nolo-cli 0.84.0-alpha.1 → 0.84.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.
- package/README.md +2 -2
- package/{_executeModel-IULR47HG.js → _executeModel-BPUR2QYH.js} +51 -50
- package/{action-D22U6CTH.js → action-P4TNFGAD.js} +11 -11
- package/{addContentAction-XAPUTGL4.js → addContentAction-MB2HHMDZ.js} +9 -9
- package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-S2NRBCWW.js} +9 -9
- package/{agentDeleteCommand-2S4WCDQC.js → agentDeleteCommand-MNAA6MIG.js} +32 -30
- package/{agentEmailCommands-V3ADGHX7.js → agentEmailCommands-SK34WJKU.js} +70 -66
- package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-M3XFO6EN.js} +2 -2
- package/{agentListCommands-EPK3S274.js → agentListCommands-I26MKI4T.js} +55 -36
- package/{agentMachineCommands-XMZWK7P3.js → agentMachineCommands-M6QDR6P3.js} +32 -30
- package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-X3UNW77C.js} +87 -0
- package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-O5MPVJ5E.js} +3 -3
- package/agentRecordCommands-HTHLO2MM.js +129 -0
- package/{agentRunCommand-VUWNWC7C.js → agentRunCommand-IAIRCMTH.js} +70 -65
- package/{agentRunControl-T44MESII.js → agentRunControl-AVJR4JW4.js} +2 -2
- package/{agentRuntimeLocal-YRONTDLM.js → agentRuntimeLocal-3WTYYIT2.js} +32 -26
- package/{agentSlice-2P7OJFES.js → agentSlice-TVP3HINW.js} +10 -10
- package/{appDeleteCommands-YS7UGMP3.js → appDeleteCommands-SB5TNLKY.js} +32 -30
- package/{appDeployCommands-XIE5Z4BE.js → appDeployCommands-2IPKZINV.js} +32 -30
- package/{appDeployStatusCommands-54UDVYET.js → appDeployStatusCommands-K63TFUID.js} +32 -30
- package/{appGetCommands-6XYLBCRN.js → appGetCommands-VU2SLNEH.js} +32 -30
- package/{appListCommands-VEGH7SF5.js → appListCommands-S3T4DJ36.js} +32 -30
- package/{authCommand-JIEOFHXW.js → authCommand-HGP2XTKC.js} +185 -28
- package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
- package/builtinSkillRegistry-Q2VVY3SC.js +33 -0
- package/{chatQueueReduxAdapter-GPYCH5Z2.js → chatQueueReduxAdapter-TWIYKVIZ.js} +25 -25
- 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-BOYUESO7.js → chunk-3AMA42ZI.js} +1 -1
- package/{chunk-RZOJRTKR.js → chunk-3BGIKIPF.js} +444 -920
- package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
- package/{chunk-EBKMQULC.js → chunk-3IUWIAHP.js} +13 -15
- package/{chunk-NTW5GWDM.js → chunk-3VNWWVKB.js} +2 -0
- package/{chunk-4SZ37KLL.js → chunk-3VUWPRFW.js} +50 -30
- package/{chunk-WL2RKIBF.js → chunk-3YIAR5UI.js} +1 -1
- package/{chunk-DWUCB2A3.js → chunk-42V6BK2E.js} +1 -1
- package/{chunk-AX7RMXSH.js → chunk-4MK3I7Y4.js} +38 -4
- package/{chunk-PF6O3GR3.js → chunk-52Q2IW2X.js} +1340 -1273
- package/{chunk-Y3NZYLPG.js → chunk-5MEYHVIB.js} +1 -1
- package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
- package/chunk-5ZUL4CUO.js +10 -0
- package/{chunk-6YTOJY35.js → chunk-6D2JFXLY.js} +35 -0
- package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
- package/{chunk-FZGV4FGK.js → chunk-6GFOD3TK.js} +260 -140
- package/{chunk-TMPLPCVX.js → chunk-6OZ36FXI.js} +2 -2
- package/{chunk-PZM3EENV.js → chunk-6Z7MY3V7.js} +1 -1
- 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-ZZCJUXUI.js → chunk-AHAHBQMU.js} +2 -2
- package/{chunk-BJCWNHVU.js → chunk-BFDFRLLQ.js} +2 -2
- package/chunk-BMQ2MJUK.js +153 -0
- package/chunk-BNGW5ASC.js +344 -0
- package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
- package/{chunk-73BR2IQT.js → chunk-CWQINZEA.js} +127 -7
- package/{chunk-HTMVBPOF.js → chunk-DD6XE56O.js} +19 -72
- package/{chunk-CADAR6QU.js → chunk-EYAQT56M.js} +4 -3
- package/{chunk-CJCJF5XB.js → chunk-FDTR4QJ6.js} +4 -2
- package/{chunk-D6XYLSOS.js → chunk-FKNWP6SG.js} +1 -1
- package/{chunk-3VPDELAP.js → chunk-FP76KI2Y.js} +1500 -84
- package/chunk-FV3JEYR3.js +870 -0
- package/{chunk-GCJ3IS5M.js → chunk-GIVFXPWK.js} +177 -6
- package/chunk-GMZLP5DV.js +82 -0
- package/{chunk-LHDV2QUI.js → chunk-GNCCNNZD.js} +4 -2
- package/{chunk-XWNRAIUL.js → chunk-GP5LKBUZ.js} +6 -16
- package/{chunk-PZCTYKGU.js → chunk-GQBOR3G6.js} +2 -2
- package/{chunk-NFT2AOK5.js → chunk-H4AHY5BU.js} +13 -85
- package/{chunk-FNGAF7C4.js → chunk-HAFJ3NDE.js} +137 -12
- package/{chunk-ZVN6I33J.js → chunk-HCT7U36O.js} +9 -5
- package/{chunk-7QVPPOEC.js → chunk-HKNXJGEC.js} +43 -43
- package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
- package/{chunk-OZX2IPKM.js → chunk-HYJFRTLW.js} +2 -2
- package/{chunk-HH65VA5U.js → chunk-I3TQJXQ7.js} +109 -6
- 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-DUJWWUGV.js → chunk-K36IXSCQ.js} +1 -1
- package/{chunk-KRMWO2NN.js → chunk-KAUSRTO6.js} +3 -3
- package/{chunk-7FWPLK4M.js → chunk-LJ5VW2UJ.js} +1 -1
- package/{chunk-GHEJJGJI.js → chunk-LMREEBWT.js} +833 -109
- package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
- package/chunk-LVIFM7VW.js +1625 -0
- package/{chunk-BJIRLHJR.js → chunk-M2EJHDJP.js} +4 -0
- package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
- package/{chunk-KEZNSFGD.js → chunk-MZYBSTMH.js} +11 -173
- package/chunk-OCZKATRC.js +129 -0
- package/{chunk-MXUSPS2N.js → chunk-OIVSQH2O.js} +1510 -1592
- package/{chunk-E36HZARC.js → chunk-P5EVSOPA.js} +93 -17
- package/{chunk-SZLVDREM.js → chunk-PBA4UJBK.js} +3 -3
- package/{chunk-URWDSZRW.js → chunk-PMAIQX7A.js} +3 -3
- package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
- package/{chunk-AJHEFRGJ.js → chunk-Q67DOFOO.js} +214 -5
- package/{chunk-UZ6XXCVR.js → chunk-QDSINZM3.js} +15 -2
- package/{chunk-NRALD3CC.js → chunk-QSHEEA5N.js} +54 -10
- package/chunk-QU7KDSZX.js +677 -0
- package/{chunk-T25L377S.js → chunk-RPJUFEGR.js} +10 -10
- package/{chunk-QCZX4FTW.js → chunk-SH43IESU.js} +173 -15
- package/{chunk-SPAQ4PVV.js → chunk-SV5IJK6K.js} +1 -1
- package/{chunk-BKJO7LDP.js → chunk-U4OKDZFH.js} +6 -6
- package/{chunk-DM4FBSWG.js → chunk-UDVH2P4A.js} +7 -7
- package/{chunk-4EJ5QYB5.js → chunk-UEVXFHQB.js} +2 -2
- package/{chunk-JYYZCK2Z.js → chunk-V7E4PXQD.js} +1 -1
- package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
- package/{chunk-YFADVSZE.js → chunk-VRTTFDBM.js} +7 -6
- package/{chunk-U7YP7ECK.js → chunk-WP5UXDA5.js} +84 -13
- package/{chunk-5J7W2VWW.js → chunk-WV42OMV7.js} +6 -265
- package/{chunk-3QPYFHAH.js → chunk-XD2MJFUG.js} +1 -1
- package/{chunk-IDGYOD2O.js → chunk-XP3VVAPG.js} +3174 -223
- package/{chunk-ETLZZQJE.js → chunk-Z2PV6O2T.js} +121 -26
- package/{chunk-BZNGCVAW.js → chunk-Z5625XML.js} +4 -4
- package/{contentThunks-THSCADSK.js → contentThunks-JYWI7G7I.js} +26 -26
- package/{cooldownCommands-BSCH2W7P.js → cooldownCommands-REAWYVTY.js} +2 -2
- package/{createAgentAutomationAction-WGN3UQ5A.js → createAgentAutomationAction-Z4SUJ54Y.js} +26 -26
- package/{createDialogAction-3EN2NLH7.js → createDialogAction-RCHFLVJ2.js} +29 -29
- package/{createPageAction-4VK473QV.js → createPageAction-YK2253XQ.js} +28 -28
- package/{dbSlice-GKGGFNOB.js → dbSlice-A6C6H32X.js} +8 -8
- package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
- package/{dialogCommands-PS4NWYY7.js → dialogCommands-X4UOZQWX.js} +36 -32
- package/{dialogSlice-CLV7SVOZ.js → dialogSlice-IVTWLCE2.js} +31 -25
- package/{docCreateCommands-4KANZJR6.js → docCreateCommands-VD6TGHG4.js} +33 -31
- package/{docDeleteCommands-F2S2TRUF.js → docDeleteCommands-OT3R2G4W.js} +34 -32
- package/{docReadCommands-B2WDPZQE.js → docReadCommands-2G7BIXSH.js} +33 -31
- package/{docStore-TDLCHWPF.js → docStore-UENKCCDX.js} +9 -9
- package/{docUpdateCommands-E7TKHRIO.js → docUpdateCommands-45MVJKZA.js} +33 -31
- package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
- package/{getPricing-QVTUQQTM.js → getPricing-LUSEABA6.js} +4 -4
- package/{handleSendMessageAction-AHL3ZHE4.js → handleSendMessageAction-LM2J4HC3.js} +66 -74
- package/index.js +99 -86
- package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
- package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
- package/{machineCommands-OTABVXOA.js → machineCommands-6N6MQIE6.js} +69 -65
- package/{machineWsRunDispatch-V4EVQSMZ.js → machineWsRunDispatch-7MFKVQCR.js} +65 -61
- package/{memberThunks-KATHH3F4.js → memberThunks-P2ECUJ56.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/pdf-U6KSUEZZ.js +26435 -0
- package/providerPresetApply-XI3WUPTI.js +214 -0
- package/providerRegistry-KEPWWGXD.js +31 -0
- package/{read-LC6HVYBN.js → read-COE3ZYR6.js} +5 -4
- package/{readDocTool-N3ERJHHF.js → readDocTool-5USN4A6V.js} +1 -1
- package/{readlineWorkspace-IIT3FQ6I.js → readlineWorkspace-JWBON5CX.js} +291 -135
- package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-W66BJ7CF.js} +12 -12
- package/{runAgentClientLoop-7TQM7IAR.js → runAgentClientLoop-TA4SSPHE.js} +49 -49
- package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
- package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-2ALKG3WA.js} +10 -10
- package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-TQZB55F6.js} +12 -12
- package/{settingSlice-OEJA4NQO.js → settingSlice-P4ZW7K5X.js} +10 -10
- package/{spaceCommands-FSYH7AL4.js → spaceCommands-6NSAXB7D.js} +31 -29
- package/{streamAgentChatTurn-6EF6TVFK.js → streamAgentChatTurn-X5ENGUIS.js} +126 -65
- package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-3KI72HHS.js} +9 -9
- package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
- package/{toolApiClient-VGYUB4P5.js → toolApiClient-G3M73RTB.js} +3 -3
- package/{tools-R3QNWWTD.js → tools-XRQR7ZZR.js} +45 -45
- package/tuiSummaryLlmCaller-UFGFOIIW.js +128 -0
- package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
- package/{updateDialogTitleAction-F3EUOWOB.js → updateDialogTitleAction-ESUUD3GT.js} +46 -29
- package/agentRecordCommands-WFPWLWOF.js +0 -125
- package/chunk-FMODTASJ.js +0 -109
- package/chunk-I42VC5KR.js +0 -15
- package/chunk-NB5SIWC4.js +0 -611
- package/chunk-NG4UT4K4.js +0 -79
- package/codingSkills-7S6523WH.js +0 -48
- package/tuiSummaryLlmCaller-PWOXTCBF.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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchWithTransientRetry
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5UTFL4QJ.js";
|
|
4
4
|
import {
|
|
5
5
|
isGatewayHttpStatus
|
|
6
6
|
} from "./chunk-NF64D32W.js";
|
|
@@ -21,15 +21,12 @@ import {
|
|
|
21
21
|
formatStatusRunCard,
|
|
22
22
|
formatStopRunCard,
|
|
23
23
|
resolveRunLabel
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-3VNWWVKB.js";
|
|
25
25
|
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
toSafeAgentSummary,
|
|
31
|
-
toUnavailableAgentSummary
|
|
32
|
-
} from "./chunk-73BR2IQT.js";
|
|
26
|
+
buildAgentDiscoveryResult,
|
|
27
|
+
resolveDiscoveryScope,
|
|
28
|
+
toSafeAgentSummary
|
|
29
|
+
} from "./chunk-CWQINZEA.js";
|
|
33
30
|
import {
|
|
34
31
|
getUserDataItemTimestamp,
|
|
35
32
|
mergeAndDedupUserData
|
|
@@ -40,7 +37,7 @@ import {
|
|
|
40
37
|
readPageFunc,
|
|
41
38
|
readPageFunctionSchema,
|
|
42
39
|
slateToSimplifiedMarkdown
|
|
43
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-J4MOO56S.js";
|
|
44
41
|
import {
|
|
45
42
|
addMemberSpace,
|
|
46
43
|
fetchAuthoritativeRemoteSpace,
|
|
@@ -52,7 +49,7 @@ import {
|
|
|
52
49
|
setMembershipRejected,
|
|
53
50
|
setSpaceInitialized,
|
|
54
51
|
updateMemberSpaceName
|
|
55
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-6Z7MY3V7.js";
|
|
56
53
|
import {
|
|
57
54
|
ToolApiError,
|
|
58
55
|
buildToolRequestHeaders,
|
|
@@ -60,16 +57,16 @@ import {
|
|
|
60
57
|
getRequestConfig,
|
|
61
58
|
getToolBaseUrl,
|
|
62
59
|
getToolRequestContext
|
|
63
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-HYJFRTLW.js";
|
|
64
61
|
import {
|
|
65
62
|
setDialogExtraReferencesAction
|
|
66
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-UEVXFHQB.js";
|
|
67
64
|
import {
|
|
68
65
|
waitForAbortableDelay
|
|
69
66
|
} from "./chunk-N4G4PKQ6.js";
|
|
70
67
|
import {
|
|
71
68
|
markdownToSlate
|
|
72
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-6GFOD3TK.js";
|
|
73
70
|
import {
|
|
74
71
|
extractMentionsFromSlate
|
|
75
72
|
} from "./chunk-MEYIRKDN.js";
|
|
@@ -81,14 +78,10 @@ import {
|
|
|
81
78
|
} from "./chunk-VF4K2QE6.js";
|
|
82
79
|
import {
|
|
83
80
|
createDocState
|
|
84
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-PMAIQX7A.js";
|
|
85
82
|
import {
|
|
86
|
-
BUILTIN_OBJECT_SKILL_IDS,
|
|
87
|
-
buildBuiltinObjectSkillConfig,
|
|
88
|
-
buildBuiltinObjectSkillDbKey,
|
|
89
|
-
buildBuiltinObjectSkillPageContent,
|
|
90
83
|
createDialogAction
|
|
91
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-MZYBSTMH.js";
|
|
92
85
|
import {
|
|
93
86
|
DEFAULT_COLLAPSED_CATEGORIES,
|
|
94
87
|
addContentToSpace,
|
|
@@ -106,7 +99,7 @@ import {
|
|
|
106
99
|
updateContentCategory,
|
|
107
100
|
updateContentTitle,
|
|
108
101
|
writeStoredCollapsedCategories
|
|
109
|
-
} from "./chunk-
|
|
102
|
+
} from "./chunk-3IUWIAHP.js";
|
|
110
103
|
import {
|
|
111
104
|
getCurrentSpaceId,
|
|
112
105
|
getCurrentSpaceIdRaw,
|
|
@@ -128,32 +121,31 @@ import {
|
|
|
128
121
|
selectMsgById,
|
|
129
122
|
uiAskChoiceFunc,
|
|
130
123
|
uiAskChoiceFunctionSchema
|
|
131
|
-
} from "./chunk-
|
|
124
|
+
} from "./chunk-XP3VVAPG.js";
|
|
132
125
|
import {
|
|
133
126
|
createAgent,
|
|
134
127
|
deleteServerSyncedCredential,
|
|
135
128
|
runLlm,
|
|
136
129
|
streamAgentChatTurn,
|
|
137
130
|
updateAgent
|
|
138
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-UDVH2P4A.js";
|
|
139
132
|
import {
|
|
140
133
|
getActiveDialogKey,
|
|
141
134
|
selectCurrentDialogKey,
|
|
142
135
|
selectPendingRawDataByPageKey
|
|
143
|
-
} from "./chunk-
|
|
136
|
+
} from "./chunk-6D2JFXLY.js";
|
|
144
137
|
import {
|
|
145
138
|
require_react
|
|
146
139
|
} from "./chunk-YDH3FDFQ.js";
|
|
147
140
|
import {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
} from "./chunk-NB5SIWC4.js";
|
|
141
|
+
listBuiltinSkills,
|
|
142
|
+
resolveBuiltinCapability,
|
|
143
|
+
resolveBuiltinSkillByName,
|
|
144
|
+
resolveBuiltinSkillEntry
|
|
145
|
+
} from "./chunk-LVIFM7VW.js";
|
|
154
146
|
import {
|
|
155
147
|
CAPABILITY_PACKS
|
|
156
|
-
} from "./chunk-
|
|
148
|
+
} from "./chunk-GIVFXPWK.js";
|
|
157
149
|
import {
|
|
158
150
|
buildSkillDocMarkdown,
|
|
159
151
|
normalizeSkillModalities,
|
|
@@ -161,7 +153,7 @@ import {
|
|
|
161
153
|
parseExternalSkillMarkdown,
|
|
162
154
|
parseSkillDocProtocol,
|
|
163
155
|
resolvePageSkillMetadata
|
|
164
|
-
} from "./chunk-
|
|
156
|
+
} from "./chunk-Q554LLSI.js";
|
|
165
157
|
import {
|
|
166
158
|
DEFAULT_READ_DIALOG_MAX_RESPONSE_CHARS,
|
|
167
159
|
NOLO_WORKSPACE_TOOL_NAMES,
|
|
@@ -178,22 +170,19 @@ import {
|
|
|
178
170
|
redactAgentRecordForWorkspaceTool,
|
|
179
171
|
resolveNoloDialogInput,
|
|
180
172
|
verifyNoloDialogSubjectRefQuery
|
|
181
|
-
} from "./chunk-
|
|
182
|
-
import {
|
|
183
|
-
isAgentUnavailableNow
|
|
184
|
-
} from "./chunk-CJCJF5XB.js";
|
|
173
|
+
} from "./chunk-HCT7U36O.js";
|
|
185
174
|
import {
|
|
186
175
|
buildDatabaseFileContentUrl
|
|
187
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-P5EVSOPA.js";
|
|
188
177
|
import {
|
|
189
178
|
DEFAULT_MODEL
|
|
190
|
-
} from "./chunk-
|
|
179
|
+
} from "./chunk-OIVSQH2O.js";
|
|
191
180
|
import {
|
|
192
181
|
compactWhitespace
|
|
193
182
|
} from "./chunk-DWLEOOGR.js";
|
|
194
183
|
import {
|
|
195
184
|
createFileCredentialBroker
|
|
196
|
-
} from "./chunk-
|
|
185
|
+
} from "./chunk-HVURBGF3.js";
|
|
197
186
|
import {
|
|
198
187
|
toErrorMessage
|
|
199
188
|
} from "./chunk-HNMXYYJR.js";
|
|
@@ -203,15 +192,14 @@ import {
|
|
|
203
192
|
} from "./chunk-O6OSWFZQ.js";
|
|
204
193
|
import {
|
|
205
194
|
shareResourceAction
|
|
206
|
-
} from "./chunk-
|
|
195
|
+
} from "./chunk-PBA4UJBK.js";
|
|
207
196
|
import {
|
|
208
197
|
AGENT_UPDATE_FIELD_NAMES,
|
|
209
|
-
nolotusId,
|
|
210
198
|
normalizeAgentUpdateFieldList,
|
|
211
199
|
selectAutoApproveSelfUpdateFields,
|
|
212
200
|
selectCurrentServer,
|
|
213
201
|
selectSyncServers
|
|
214
|
-
} from "./chunk-
|
|
202
|
+
} from "./chunk-GP5LKBUZ.js";
|
|
215
203
|
import {
|
|
216
204
|
asRecordOrEmpty
|
|
217
205
|
} from "./chunk-KX6YBIHG.js";
|
|
@@ -219,7 +207,7 @@ import {
|
|
|
219
207
|
UNCATEGORIZED_ID,
|
|
220
208
|
addContentAction,
|
|
221
209
|
checkSpaceMembership
|
|
222
|
-
} from "./chunk-
|
|
210
|
+
} from "./chunk-AHAHBQMU.js";
|
|
223
211
|
import {
|
|
224
212
|
createSpaceKey,
|
|
225
213
|
normalizeSpaceId
|
|
@@ -229,15 +217,18 @@ import {
|
|
|
229
217
|
read,
|
|
230
218
|
readAndWait,
|
|
231
219
|
readAndWaitAction,
|
|
220
|
+
readFileContentAction,
|
|
232
221
|
remove,
|
|
233
222
|
selectById,
|
|
234
223
|
selectEntities,
|
|
235
224
|
toTimestampMs,
|
|
236
225
|
write
|
|
237
|
-
} from "./chunk-
|
|
226
|
+
} from "./chunk-VRTTFDBM.js";
|
|
238
227
|
import {
|
|
239
228
|
SEPARATOR,
|
|
240
229
|
TYPE_STORAGE_PREFIXES,
|
|
230
|
+
asNonEmptyStringArray,
|
|
231
|
+
asTrimmedNonEmptyStringArray,
|
|
241
232
|
createAgentKey,
|
|
242
233
|
dialogMessageRange,
|
|
243
234
|
fileKey,
|
|
@@ -253,23 +244,19 @@ import {
|
|
|
253
244
|
splitKey,
|
|
254
245
|
toTrimmedString,
|
|
255
246
|
ulid
|
|
256
|
-
} from "./chunk-
|
|
247
|
+
} from "./chunk-VMFTFOWF.js";
|
|
257
248
|
import {
|
|
258
249
|
asOptionalFiniteNumber
|
|
259
250
|
} from "./chunk-WWC7I6TA.js";
|
|
260
|
-
import {
|
|
261
|
-
asNonEmptyStringArray,
|
|
262
|
-
asTrimmedNonEmptyStringArray
|
|
263
|
-
} from "./chunk-I42VC5KR.js";
|
|
264
251
|
import {
|
|
265
252
|
asTrimmedLowercaseString
|
|
266
253
|
} from "./chunk-QSJ3HFEF.js";
|
|
267
254
|
import {
|
|
268
255
|
readAction
|
|
269
|
-
} from "./chunk-
|
|
256
|
+
} from "./chunk-WV42OMV7.js";
|
|
270
257
|
import {
|
|
271
258
|
extractCustomId
|
|
272
|
-
} from "./chunk-
|
|
259
|
+
} from "./chunk-M2EJHDJP.js";
|
|
273
260
|
import {
|
|
274
261
|
DEVICE_LOCAL_OWNER_ID,
|
|
275
262
|
createAsyncThunk,
|
|
@@ -281,7 +268,7 @@ import {
|
|
|
281
268
|
resolveEffectiveSpaceActorId,
|
|
282
269
|
resolveRecordOwnerUserId,
|
|
283
270
|
selectRuntimeSnapshot
|
|
284
|
-
} from "./chunk-
|
|
271
|
+
} from "./chunk-UKWGR5SS.js";
|
|
285
272
|
import {
|
|
286
273
|
isAbortError
|
|
287
274
|
} from "./chunk-QOKAKDPE.js";
|
|
@@ -294,12 +281,12 @@ import {
|
|
|
294
281
|
buildTombstoneRecord,
|
|
295
282
|
isTombstoneRecord
|
|
296
283
|
} from "./chunk-GBRG75BQ.js";
|
|
297
|
-
import {
|
|
298
|
-
asTrimmedString
|
|
299
|
-
} from "./chunk-3EUW3WEO.js";
|
|
300
284
|
import {
|
|
301
285
|
isRecord
|
|
302
286
|
} from "./chunk-KUG52IAP.js";
|
|
287
|
+
import {
|
|
288
|
+
asTrimmedString
|
|
289
|
+
} from "./chunk-3EUW3WEO.js";
|
|
303
290
|
import {
|
|
304
291
|
API_ENDPOINTS
|
|
305
292
|
} from "./chunk-LCBAMY2M.js";
|
|
@@ -316,6 +303,69 @@ import {
|
|
|
316
303
|
__toESM
|
|
317
304
|
} from "./chunk-4VNS5WPM.js";
|
|
318
305
|
|
|
306
|
+
// packages/ai/tools/agentAutomationSchemas.ts
|
|
307
|
+
var agentAutomationTriggerSchema = {
|
|
308
|
+
oneOf: [
|
|
309
|
+
{
|
|
310
|
+
type: "object",
|
|
311
|
+
description: "Cron trigger.",
|
|
312
|
+
properties: {
|
|
313
|
+
type: { type: "string", enum: ["cron"] },
|
|
314
|
+
expression: {
|
|
315
|
+
type: "string",
|
|
316
|
+
description: "Cron expression, e.g. 0 9 * * *."
|
|
317
|
+
},
|
|
318
|
+
timezone: {
|
|
319
|
+
type: "string",
|
|
320
|
+
description: "Optional timezone, e.g. Asia/Shanghai."
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
required: ["type", "expression"],
|
|
324
|
+
additionalProperties: false
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
type: "object",
|
|
328
|
+
description: "Inbound email trigger. Cheap code-side filters are evaluated before starting an Agent run. Set acceptAll=true to fire on every inbound email. Otherwise provide at least one of fromContains, subjectContains, fromContainsAny, or subjectContainsAny \u2014 within a single field, *Any arrays are OR'd; across fields they are AND'd.",
|
|
329
|
+
properties: {
|
|
330
|
+
type: { type: "string", enum: ["email"] },
|
|
331
|
+
acceptAll: {
|
|
332
|
+
type: "boolean",
|
|
333
|
+
description: "When true the automation fires on every inbound email for the bound agent mailbox \u2014 no content filtering."
|
|
334
|
+
},
|
|
335
|
+
fromContains: {
|
|
336
|
+
type: "string",
|
|
337
|
+
description: "Case-insensitive substring match against sender email address."
|
|
338
|
+
},
|
|
339
|
+
subjectContains: {
|
|
340
|
+
type: "string",
|
|
341
|
+
description: "Case-insensitive substring match against email subject."
|
|
342
|
+
},
|
|
343
|
+
fromContainsAny: {
|
|
344
|
+
type: "array",
|
|
345
|
+
description: "OR'd substring match against sender email \u2014 matches if ANY listed needle appears in the From header.",
|
|
346
|
+
items: { type: "string" },
|
|
347
|
+
minItems: 1
|
|
348
|
+
},
|
|
349
|
+
subjectContainsAny: {
|
|
350
|
+
type: "array",
|
|
351
|
+
description: "OR'd substring match against email subject \u2014 matches if ANY listed needle appears in the Subject.",
|
|
352
|
+
items: { type: "string" },
|
|
353
|
+
minItems: 1
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
required: ["type"],
|
|
357
|
+
anyOf: [
|
|
358
|
+
{ required: ["acceptAll"] },
|
|
359
|
+
{ required: ["fromContains"] },
|
|
360
|
+
{ required: ["subjectContains"] },
|
|
361
|
+
{ required: ["fromContainsAny"] },
|
|
362
|
+
{ required: ["subjectContainsAny"] }
|
|
363
|
+
],
|
|
364
|
+
additionalProperties: false
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
};
|
|
368
|
+
|
|
319
369
|
// packages/ai/tools/modelUsageTools.ts
|
|
320
370
|
var queryModelUsageFunctionSchema = {
|
|
321
371
|
name: "queryModelUsage",
|
|
@@ -440,7 +490,7 @@ var queryUserGrowthReportFunctionSchema = {
|
|
|
440
490
|
};
|
|
441
491
|
var createAgentAutomationFunctionSchema = {
|
|
442
492
|
name: "createAgentAutomation",
|
|
443
|
-
description: "\u521B\u5EFA\
|
|
493
|
+
description: "\u521B\u5EFA\u957F\u671F agent automation\u3002\u652F\u6301 cron \u5B9A\u65F6\u89E6\u53D1\uFF0C\u4EE5\u53CA\u65B0\u90AE\u4EF6\u4E8B\u4EF6\u89E6\u53D1\uFF08\u53EF\u8BBE acceptAll \u63A5\u6536\u5168\u90E8\u90AE\u4EF6\uFF0C\u6216\u6309\u53D1\u4EF6\u4EBA/\u4E3B\u9898\u8FC7\u6EE4\uFF1B*Any \u6570\u7EC4\u5B57\u6BB5\u5185\u90E8 OR\u3001\u5B57\u6BB5\u4E4B\u95F4 AND\uFF09\u3002email \u89E6\u53D1\u53EA\u5728\u4EE3\u7801\u8FC7\u6EE4\u547D\u4E2D\u540E\u542F\u52A8\u540E\u53F0 Agent run\u3002",
|
|
444
494
|
parameters: {
|
|
445
495
|
type: "object",
|
|
446
496
|
properties: {
|
|
@@ -450,29 +500,9 @@ var createAgentAutomationFunctionSchema = {
|
|
|
450
500
|
},
|
|
451
501
|
instruction: {
|
|
452
502
|
type: "string",
|
|
453
|
-
description: "automation \u6BCF\u6B21\u6267\u884C\u65F6\u4EA4\u7ED9 agent \u7684\u5B8C\u6574\u4EFB\u52A1\u63CF\u8FF0\uFF0C\u5E94\u5305\u542B\
|
|
454
|
-
},
|
|
455
|
-
trigger: {
|
|
456
|
-
type: "object",
|
|
457
|
-
description: "\u89E6\u53D1\u89C4\u5219\u3002v0 \u53EA\u652F\u6301 cron\u3002",
|
|
458
|
-
properties: {
|
|
459
|
-
type: {
|
|
460
|
-
type: "string",
|
|
461
|
-
enum: ["cron"],
|
|
462
|
-
description: "\u89E6\u53D1\u7C7B\u578B\u3002v0 \u53EA\u652F\u6301 cron\u3002"
|
|
463
|
-
},
|
|
464
|
-
expression: {
|
|
465
|
-
type: "string",
|
|
466
|
-
description: "cron \u8868\u8FBE\u5F0F\uFF0C\u4F8B\u5982\u6BCF\u5929 09:00 \u6267\u884C\u4E3A 0 9 * * *\u3002"
|
|
467
|
-
},
|
|
468
|
-
timezone: {
|
|
469
|
-
type: "string",
|
|
470
|
-
description: "\u53EF\u9009\u65F6\u533A\uFF0C\u4F8B\u5982 Asia/Shanghai\u3002"
|
|
471
|
-
}
|
|
472
|
-
},
|
|
473
|
-
required: ["type", "expression"],
|
|
474
|
-
additionalProperties: false
|
|
503
|
+
description: "automation \u6BCF\u6B21\u6267\u884C\u65F6\u4EA4\u7ED9 agent \u7684\u5B8C\u6574\u4EFB\u52A1\u63CF\u8FF0\uFF0C\u5E94\u5305\u542B\u5904\u7406\u76EE\u6807\u548C\u5FC5\u8981\u7684\u901A\u77E5\u65B9\u5F0F\u3002"
|
|
475
504
|
},
|
|
505
|
+
trigger: agentAutomationTriggerSchema,
|
|
476
506
|
ownerAgentKey: {
|
|
477
507
|
type: "string",
|
|
478
508
|
description: "\u6267\u884C\u8BE5 automation \u7684 agentKey\u3002\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D agent\u3002"
|
|
@@ -497,13 +527,64 @@ var createAgentAutomationFunctionSchema = {
|
|
|
497
527
|
},
|
|
498
528
|
runOnceNow: {
|
|
499
529
|
type: "boolean",
|
|
500
|
-
description: "\u521B\u5EFA\u540E\
|
|
530
|
+
description: "cron \u521B\u5EFA\u540E\u53EF\u7ACB\u5373\u8BD5\u8FD0\u884C\uFF1Bemail trigger \u4E0D\u652F\u6301\uFF0C\u56E0\u4E3A\u521B\u5EFA\u65F6\u6CA1\u6709\u89E6\u53D1\u90AE\u4EF6\u4E0A\u4E0B\u6587\u3002",
|
|
501
531
|
default: false
|
|
502
532
|
}
|
|
503
533
|
},
|
|
504
534
|
required: ["instruction", "trigger"]
|
|
505
535
|
}
|
|
506
536
|
};
|
|
537
|
+
var updateAgentAutomationFunctionSchema = {
|
|
538
|
+
name: "updateAgentAutomation",
|
|
539
|
+
description: "\u90E8\u5206\u66F4\u65B0\u4E00\u4E2A agent automation\u3002\u53EA\u5141\u8BB8 owner user\uFF08automation \u521B\u5EFA\u8005\uFF09\u4E14 owner agent\uFF08automation \u7684 ownerAgentKey\uFF09\u8C03\u7528\u3002\u53EF\u66F4\u65B0\u5B57\u6BB5\uFF1Atitle\u3001instruction\u3001status\uFF08active/paused\uFF09\u3001trigger\uFF08email trigger \u4F1A\u88AB\u91CD\u65B0\u5F52\u4E00\u5316\uFF09\u3001spaceId\u3001subjectRefs\u3002\u4E0D\u53EF\u66F4\u65B0\uFF1Aid\u3001dbKey\u3001ownerAgentKey\u3001createdBy\u3001createdAt\u3001runStatus\u3002",
|
|
540
|
+
parameters: {
|
|
541
|
+
type: "object",
|
|
542
|
+
properties: {
|
|
543
|
+
automationKey: {
|
|
544
|
+
type: "string",
|
|
545
|
+
description: "automation \u7684 dbKey\uFF08agent-automation-{userId}-{id}\uFF09\u3002"
|
|
546
|
+
},
|
|
547
|
+
title: { type: "string", description: "\u65B0\u6807\u9898\u3002" },
|
|
548
|
+
instruction: { type: "string", description: "\u65B0 instruction\u3002" },
|
|
549
|
+
status: {
|
|
550
|
+
type: "string",
|
|
551
|
+
enum: ["active", "paused"],
|
|
552
|
+
description: "automation \u72B6\u6001\u3002paused \u65F6 dispatcher \u4E0D\u518D\u89E6\u53D1 run\u3002"
|
|
553
|
+
},
|
|
554
|
+
trigger: agentAutomationTriggerSchema,
|
|
555
|
+
spaceId: { type: "string", description: "\u65B0\u7684 spaceId\uFF1B\u4F20\u7A7A\u5B57\u7B26\u4E32\u6E05\u9664\u3002" },
|
|
556
|
+
subjectRefs: {
|
|
557
|
+
type: "array",
|
|
558
|
+
description: "\u65B0\u7684 subjectRefs\uFF1B\u4F20\u7A7A\u6570\u7EC4\u6E05\u9664\u3002",
|
|
559
|
+
items: {
|
|
560
|
+
type: "object",
|
|
561
|
+
properties: {
|
|
562
|
+
kind: { type: "string" },
|
|
563
|
+
id: { type: "string" },
|
|
564
|
+
role: { type: "string" }
|
|
565
|
+
},
|
|
566
|
+
required: ["kind", "id"],
|
|
567
|
+
additionalProperties: true
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
required: ["automationKey"]
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
var deleteAgentAutomationFunctionSchema = {
|
|
575
|
+
name: "deleteAgentAutomation",
|
|
576
|
+
description: "\u5220\u9664\u4E00\u4E2A agent automation\uFF08\u542B owner index\uFF09\u3002\u53EA\u5141\u8BB8 owner user\uFF08automation \u521B\u5EFA\u8005\uFF09\u4E14 owner agent \u8C03\u7528\u3002\u91CD\u590D\u5220\u9664\u5DF2\u4E0D\u5B58\u5728\u7684 automation \u8FD4\u56DE deleted:false, reason:not_found \u2014\u2014 \u662F\u5E42\u7B49 no-op\u3002",
|
|
577
|
+
parameters: {
|
|
578
|
+
type: "object",
|
|
579
|
+
properties: {
|
|
580
|
+
automationKey: {
|
|
581
|
+
type: "string",
|
|
582
|
+
description: "automation \u7684 dbKey\uFF08agent-automation-{userId}-{id}\uFF09\u3002"
|
|
583
|
+
}
|
|
584
|
+
},
|
|
585
|
+
required: ["automationKey"]
|
|
586
|
+
}
|
|
587
|
+
};
|
|
507
588
|
var notifyUserFunctionSchema = {
|
|
508
589
|
name: "notifyUser",
|
|
509
590
|
description: "\u53D1\u9001\u4E00\u6761\u7AD9\u5185\u901A\u77E5\u7ED9\u5F53\u524D\u7528\u6237\u3002\u7B2C\u4E00\u7248\u53EA\u652F\u6301\u7AD9\u5185\u901A\u77E5\uFF0C\u540E\u7EED\u53EF\u6269\u5C55\u90AE\u4EF6\u3001\u684C\u9762\u7AEF\u3001\u7F51\u9875\u548C\u79FB\u52A8\u7AEF\u901A\u77E5\u3002",
|
|
@@ -545,6 +626,8 @@ var serverOnlyResult = (toolName) => ({
|
|
|
545
626
|
var queryModelUsageFunc = async () => serverOnlyResult("queryModelUsage");
|
|
546
627
|
var queryUserGrowthReportFunc = async () => serverOnlyResult("queryUserGrowthReport");
|
|
547
628
|
var createAgentAutomationFunc = async () => serverOnlyResult("createAgentAutomation");
|
|
629
|
+
var updateAgentAutomationFunc = async () => serverOnlyResult("updateAgentAutomation");
|
|
630
|
+
var deleteAgentAutomationFunc = async () => serverOnlyResult("deleteAgentAutomation");
|
|
548
631
|
var notifyUserFunc = async () => serverOnlyResult("notifyUser");
|
|
549
632
|
|
|
550
633
|
// packages/ai/tools/toolResultError.ts
|
|
@@ -919,7 +1002,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
|
|
|
919
1002
|
workspace: { mode: "lease" }
|
|
920
1003
|
};
|
|
921
1004
|
var findModelConfig = async (modelName, provider) => {
|
|
922
|
-
const { ALL_MODELS } = await import("./models-
|
|
1005
|
+
const { ALL_MODELS } = await import("./models-T3SG6MJ5.js");
|
|
923
1006
|
const name = toTrimmedString(modelName);
|
|
924
1007
|
const prov = toTrimmedString(provider ?? "");
|
|
925
1008
|
if (!name) return null;
|
|
@@ -1164,7 +1247,7 @@ var buildPlatformFormDataFromArgs = async (args) => {
|
|
|
1164
1247
|
const trimmedModel = toTrimmedString(model);
|
|
1165
1248
|
const trimmedProvider = toTrimmedString(provider);
|
|
1166
1249
|
const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
|
|
1167
|
-
const { getModelPricing } = await import("./getPricing-
|
|
1250
|
+
const { getModelPricing } = await import("./getPricing-LUSEABA6.js");
|
|
1168
1251
|
const normalizedTools = tools ?? [];
|
|
1169
1252
|
const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
|
|
1170
1253
|
const formData = {
|
|
@@ -2107,746 +2190,17 @@ Imported from: ${url}` : ""
|
|
|
2107
2190
|
});
|
|
2108
2191
|
}
|
|
2109
2192
|
|
|
2110
|
-
// packages/ai/skills/specialistSkills.ts
|
|
2111
|
-
var SPECIALIST_SKILL_SLUGS = [
|
|
2112
|
-
"feedback",
|
|
2113
|
-
"agent-creator",
|
|
2114
|
-
"app-builder"
|
|
2115
|
-
];
|
|
2116
|
-
function deterministicId(prefix, seed) {
|
|
2117
|
-
let h = 2166136261;
|
|
2118
|
-
for (let i = 0; i < seed.length; i++) {
|
|
2119
|
-
h ^= seed.charCodeAt(i);
|
|
2120
|
-
h = h * 16777619 >>> 0;
|
|
2121
|
-
}
|
|
2122
|
-
const suffix = h.toString(36).toUpperCase().padStart(14, "0");
|
|
2123
|
-
return (prefix + suffix).slice(0, 26);
|
|
2124
|
-
}
|
|
2125
|
-
function normalizeSkillSeed(input) {
|
|
2126
|
-
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
2127
|
-
}
|
|
2128
|
-
function buildSpecialistSkillId(slug) {
|
|
2129
|
-
return deterministicId("01SK", normalizeSkillSeed(slug) || slug);
|
|
2130
|
-
}
|
|
2131
|
-
function buildSpecialistSkillPageKey(userId, slug) {
|
|
2132
|
-
return `page-${userId}-${buildSpecialistSkillId(slug)}`;
|
|
2133
|
-
}
|
|
2134
|
-
var SPECIALIST_SKILL_SEEDS = [
|
|
2135
|
-
{
|
|
2136
|
-
slug: "feedback",
|
|
2137
|
-
title: "feedback",
|
|
2138
|
-
description: "\u53CD\u9988\u6536\u96C6\uFF1A\u628A\u7528\u6237\u7684\u529F\u80FD\u9700\u6C42\u3001\u95EE\u9898\u53CD\u9988\u548C\u4F53\u9A8C\u5EFA\u8BAE\u89C4\u8303\u8BB0\u5F55\u5230\u7528\u6237\u53CD\u9988\u8868\uFF1B\u7D27\u6025\u53CD\u9988\u540C\u65F6\u5199\u5165\u4EFB\u52A1\u770B\u677F\u5E76\u901A\u77E5\u3002",
|
|
2139
|
-
body: [
|
|
2140
|
-
"\u4F60\u662F\u201C\u53CD\u9988\u5165\u53E3\u201DAgent\uFF0C\u8D1F\u8D23\u6536\u96C6\u7528\u6237\u7684\u65B0\u529F\u80FD\u9700\u6C42\u3001\u95EE\u9898\u53CD\u9988\u548C\u4F53\u9A8C\u5EFA\u8BAE\uFF0C\u5E76\u5C06\u5176\u89C4\u8303\u8BB0\u5F55\u5230\u6307\u5B9A\u8868\u683C\u4E2D\u3002",
|
|
2141
|
-
"",
|
|
2142
|
-
"\u4F60\u7684\u76EE\u6807\uFF1A",
|
|
2143
|
-
"1. \u4E3B\u52A8\u5F15\u5BFC\u7528\u6237\u63CF\u8FF0\u9047\u5230\u7684\u95EE\u9898\u3001\u60F3\u8981\u7684\u65B0\u529F\u80FD\u6216\u6539\u8FDB\u5EFA\u8BAE\u3002",
|
|
2144
|
-
"2. \u6BCF\u6B21\u6536\u5230\u53CD\u9988\u540E\uFF0C\u5148\u505A\u6781\u7B80\u6F84\u6E05\uFF1B\u5982\u679C\u4FE1\u606F\u5DF2\u7ECF\u8DB3\u591F\uFF0C\u5C31\u4E0D\u8981\u8FFD\u95EE\u8FC7\u591A\u3002",
|
|
2145
|
-
"3. \u5C06\u53CD\u9988\u6574\u7406\u6210\u7ED3\u6784\u5316\u4FE1\u606F\uFF0C\u5199\u5165\u201C\u7528\u6237\u53CD\u9988\u201D\u8868\u3002",
|
|
2146
|
-
`4. \u5982\u679C\u53CD\u9988\u8FBE\u5230\u201C\u7D27\u6025\u201D\u7EA7\u522B\uFF0C\u9664\u5199\u5165\u7528\u6237\u53CD\u9988\u8868\u5916\uFF0C\u8FD8\u8981\u76F4\u63A5\u5199\u5165 Nolo \u4EFB\u52A1\u770B\u677F\uFF0C\u5E76\u901A\u77E5\u7528\u6237 ${nolotusId}\u3002`,
|
|
2147
|
-
"5. \u8BB0\u5F55\u63D0\u4EA4\u53CD\u9988\u7684\u7528\u6237 ID\uFF0C\u65B9\u4FBF\u4EFB\u52A1\u5B8C\u6210\u6216\u8FDB\u5165 main \u540E\u901A\u77E5\u539F\u7528\u6237\u3002",
|
|
2148
|
-
"6. \u56DE\u590D\u98CE\u683C\u7B80\u6D01\u3001\u81EA\u7136\u3001\u50CF\u4EA7\u54C1\u56E2\u961F\u7684\u53CD\u9988\u6536\u96C6\u5165\u53E3\u3002",
|
|
2149
|
-
"",
|
|
2150
|
-
"\u5DE5\u4F5C\u89C4\u5219\uFF1A",
|
|
2151
|
-
"- \u4F18\u5148\u5224\u65AD\u53CD\u9988\u7C7B\u578B\uFF1A\u529F\u80FD\u9700\u6C42 / \u95EE\u9898\u53CD\u9988 / \u4F53\u9A8C\u5EFA\u8BAE / \u5176\u4ED6\u3002",
|
|
2152
|
-
"- \u9ED8\u8BA4\u72B6\u6001\u5199\u4E3A\u201C\u5F85\u5904\u7406\u201D\u3002",
|
|
2153
|
-
"- \u6839\u636E\u5185\u5BB9\u7C97\u7565\u5224\u65AD\u4F18\u5148\u7EA7\uFF1A",
|
|
2154
|
-
" - \u6570\u636E\u4E22\u5931\u3001\u65E0\u6CD5\u767B\u5F55\u3001\u65E0\u6CD5\u6253\u5F00\u4E3B\u5165\u53E3\u3001\u6838\u5FC3\u7F16\u8F91/\u521B\u5EFA/\u652F\u4ED8/\u4FDD\u5B58\u5B8C\u5168\u4E0D\u53EF\u7528\u3001\u963B\u65AD\u5927\u90E8\u5206\u7528\u6237\u6838\u5FC3\u6D41\u7A0B -> \u7D27\u6025",
|
|
2155
|
-
" - \u660E\u663E\u5F71\u54CD\u6B63\u5E38\u4F7F\u7528\u3001\u65E0\u6CD5\u5B8C\u6210\u67D0\u4E2A\u6838\u5FC3\u6D41\u7A0B\u3001\u4E25\u91CD\u4FDD\u5B58\u5931\u8D25 -> \u9AD8",
|
|
2156
|
-
" - \u4E00\u822C bug\u3001\u660E\u786E\u9700\u6C42\u3001\u5F71\u54CD\u5E38\u7528\u7F16\u8F91/\u521B\u5EFA\u6D41\u7A0B -> \u4E2D",
|
|
2157
|
-
" - \u666E\u901A\u5EFA\u8BAE\u6216\u8F7B\u5FAE\u4F53\u9A8C\u95EE\u9898 -> \u4F4E",
|
|
2158
|
-
"- \u5982\u679C\u7CFB\u7EDF\u6216\u5DE5\u5177\u4E0A\u4E0B\u6587\u80FD\u63D0\u4F9B\u5F53\u524D\u7528\u6237 ID\uFF0C\u628A\u5B83\u5199\u5165 submitterUserId\uFF1B\u5982\u679C\u770B\u4E0D\u5230\u7528\u6237 ID\uFF0C\u53EF\u4EE5\u7559\u7A7A\uFF0C\u670D\u52A1\u7AEF\u4F1A\u515C\u5E95\u8865\u5199\u3002",
|
|
2159
|
-
"- \u5982\u679C\u7528\u6237\u6CA1\u6709\u63D0\u4F9B\u8054\u7CFB\u65B9\u5F0F\uFF0C\u4E0D\u8981\u5F3A\u6C42\uFF0C\u53EF\u7559\u7A7A\u3002",
|
|
2160
|
-
"- \u5982\u679C\u7528\u6237\u63D0\u4F9B\u4E86\u7AEF\u3001\u9875\u9762\u3001\u7248\u672C\u3001\u670D\u52A1\u5668\u3001\u6D4F\u89C8\u5668\u3001\u622A\u56FE\u8BF4\u660E\u3001\u590D\u73B0\u6B65\u9AA4\u3001\u671F\u671B\u7ED3\u679C\u3001\u5B9E\u9645\u7ED3\u679C\uFF0C\u8981\u5C3D\u91CF\u5199\u8FDB\u5BF9\u5E94\u5B57\u6BB5\u3002",
|
|
2161
|
-
"- \u5982\u679C\u7F3A\u5C11\u5173\u952E\u4FE1\u606F\u4F46\u4ECD\u80FD\u7406\u89E3\u6838\u5FC3\u53CD\u9988\uFF0C\u5148\u8BB0\u5F55\uFF0C\u4E0D\u8981\u56E0\u4E3A\u5B57\u6BB5\u4E0D\u5168\u800C\u963B\u585E\u3002",
|
|
2162
|
-
"- source \u56FA\u5B9A\u5199\u201C\u53CD\u9988\u5165\u53E3\u201D\u3002",
|
|
2163
|
-
"- createdAtNote \u5199\u201C\u7531\u53CD\u9988\u5165\u53E3\u8BB0\u5F55\u201D\u3002",
|
|
2164
|
-
"",
|
|
2165
|
-
"\u666E\u901A\u5199\u8868\u89C4\u5219\uFF1A",
|
|
2166
|
-
"- \u975E\u7D27\u6025\u53CD\u9988\u53EA\u8C03\u7528\u4E00\u6B21 addTableRow\uFF0C\u5199\u5165\u7528\u6237\u53CD\u9988\u8868\uFF1B\u6210\u529F\u5199\u5165\u540E\u4E0D\u8981\u91CD\u590D\u5199\u5165\u540C\u4E00\u5185\u5BB9\u3002",
|
|
2167
|
-
`- \u4F7F\u7528 addTableRow \u5DE5\u5177\uFF0C\u628A\u53CD\u9988\u5199\u5165 dbKey \u4E3A meta-${nolotusId}-01NOLOFEEDBACKT000000000R1 \u7684\u8868\u3002`,
|
|
2168
|
-
`- \u663E\u5F0F\u4F20\u5165 tenantId="${nolotusId}" \u548C tableId="01NOLOFEEDBACKT000000000R1"\u3002`,
|
|
2169
|
-
"- \u5B57\u6BB5\u6620\u5C04\uFF1A",
|
|
2170
|
-
" - content: \u7528\u6237\u53CD\u9988\u5185\u5BB9\u7684\u7B80\u6D01\u6574\u7406\u7248\uFF0C\u4FDD\u7559\u5177\u4F53\u5BF9\u8C61\u548C\u75C7\u72B6",
|
|
2171
|
-
" - feedbackType: \u53CD\u9988\u7C7B\u578B",
|
|
2172
|
-
" - status: \u56FA\u5B9A\u4E3A\u201C\u5F85\u5904\u7406\u201D",
|
|
2173
|
-
" - priority: \u6309\u89C4\u5219\u5224\u65AD",
|
|
2174
|
-
" - contact: \u7528\u6237\u4E3B\u52A8\u63D0\u4F9B\u7684\u8054\u7CFB\u65B9\u5F0F\uFF0C\u6CA1\u6709\u5C31\u7559\u7A7A",
|
|
2175
|
-
" - source: \u56FA\u5B9A\u4E3A\u201C\u53CD\u9988\u5165\u53E3\u201D",
|
|
2176
|
-
" - submitterUserId: \u5F53\u524D\u63D0\u4EA4\u53CD\u9988\u7684\u7528\u6237 ID\uFF1B\u770B\u4E0D\u5230\u5C31\u7559\u7A7A\uFF0C\u670D\u52A1\u7AEF\u4F1A\u8865\u5199",
|
|
2177
|
-
" - environment: \u7528\u6237\u4E3B\u52A8\u63D0\u5230\u7684\u7AEF\u3001\u670D\u52A1\u5668\u3001\u9875\u9762\u3001\u6D4F\u89C8\u5668\u3001\u7CFB\u7EDF\u6216\u7248\u672C\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
|
|
2178
|
-
" - reproductionSteps: \u7528\u6237\u63CF\u8FF0\u7684\u590D\u73B0\u6B65\u9AA4\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
|
|
2179
|
-
" - expectedResult: \u7528\u6237\u8868\u8FBE\u7684\u671F\u671B\u884C\u4E3A\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
|
|
2180
|
-
" - actualResult: \u7528\u6237\u8868\u8FBE\u7684\u5B9E\u9645\u5F02\u5E38\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
|
|
2181
|
-
" - userImpact: \u5BF9\u7528\u6237\u6D41\u7A0B\u7684\u5F71\u54CD\uFF1B\u6CA1\u6709\u5C31\u6839\u636E\u5185\u5BB9\u7B80\u77ED\u5F52\u7EB3",
|
|
2182
|
-
" - createdAtNote: \u56FA\u5B9A\u4E3A\u201C\u7531\u53CD\u9988\u5165\u53E3\u8BB0\u5F55\u201D",
|
|
2183
|
-
"",
|
|
2184
|
-
"\u7D27\u6025\u53CD\u9988\u989D\u5916\u89C4\u5219\uFF1A",
|
|
2185
|
-
"- \u5F53 priority \u5224\u65AD\u4E3A\u201C\u7D27\u6025\u201D\u65F6\uFF0C\u5141\u8BB8\u989D\u5916\u8C03\u7528\u4E00\u6B21 addTableRow\uFF0C\u628A\u540C\u4E00\u4E8B\u9879\u76F4\u63A5\u5199\u5165 Nolo \u4EFB\u52A1\u770B\u677F\u3002",
|
|
2186
|
-
`- \u4EFB\u52A1\u770B\u677F\u56FA\u5B9A\u4E3A tenantId="${nolotusId}", tableId="NOLOTASKBOARD", dbKey="meta-${nolotusId}-NOLOTASKBOARD"\u3002`,
|
|
2187
|
-
"- \u4EFB\u52A1\u770B\u677F\u5B57\u6BB5\uFF1A",
|
|
2188
|
-
" - title: \u7528\u201CURGENT \u53CD\u9988\uFF1A\u201D\u5F00\u5934\uFF0C\u540E\u63A5\u95EE\u9898\u4E3B\u9898",
|
|
2189
|
-
" - status: \u201C\u5F85\u5904\u7406\u201D",
|
|
2190
|
-
" - priority: \u201C\u7D27\u6025\u201D",
|
|
2191
|
-
" - executionMode: \u201C\u7ACB\u5373\u6267\u884C\u201D",
|
|
2192
|
-
" - owner: \u201Cnolo \u9879\u76EE\u7ECF\u7406\u201D",
|
|
2193
|
-
" - source: \u201C\u53CD\u9988\u5165\u53E3\u201D",
|
|
2194
|
-
" - feedbackSubmitterUserId: \u5F53\u524D\u63D0\u4EA4\u53CD\u9988\u7684\u7528\u6237 ID\uFF1B\u770B\u4E0D\u5230\u5C31\u7559\u7A7A\uFF0C\u670D\u52A1\u7AEF\u4F1A\u8865\u5199",
|
|
2195
|
-
" - acceptance: \u590D\u8FF0\u53EF\u9A8C\u8BC1\u7684\u4FEE\u590D\u6807\u51C6",
|
|
2196
|
-
" - progress: \u201C\u7531\u53CD\u9988\u5165\u53E3\u6839\u636E\u7D27\u6025\u53CD\u9988\u81EA\u52A8\u5165\u8868\uFF0C\u7B49\u5F85\u9879\u76EE\u7ECF\u7406\u5206\u6D3E\u3002\u201D",
|
|
2197
|
-
" - codeStatus: \u201C\u672A\u5F00\u59CB\u201D",
|
|
2198
|
-
"- \u7D27\u6025\u53CD\u9988\u5199\u5165\u4EFB\u52A1\u8868\u540E\uFF0C\u8C03\u7528 notifyUser\uFF1A",
|
|
2199
|
-
" - title: \u201C\u7D27\u6025\u53CD\u9988\u5DF2\u8FDB\u5165\u4EFB\u52A1\u8868\u201D",
|
|
2200
|
-
" - message: \u7B80\u8981\u8BF4\u660E\u53CD\u9988\u5185\u5BB9\u548C\u4EFB\u52A1\u8868\u72B6\u6001",
|
|
2201
|
-
" - severity: \u201Ccritical\u201D",
|
|
2202
|
-
` - targetUserId: "${nolotusId}"`,
|
|
2203
|
-
"- \u5982\u679C notifyUser \u5DE5\u5177\u8FD4\u56DE\u9519\u8BEF\uFF0C\u4E0D\u8981\u91CD\u590D\u5199\u4EFB\u52A1\u8868\uFF1B\u5728\u56DE\u590D\u4E2D\u8BF4\u660E\u201C\u5DF2\u8FDB\u5165\u4EFB\u52A1\u8868\uFF0C\u901A\u77E5\u53D1\u9001\u5931\u8D25/\u5F85\u91CD\u8BD5\u201D\u3002",
|
|
2204
|
-
"",
|
|
2205
|
-
"\u4EA4\u4E92\u89C4\u5219\uFF1A",
|
|
2206
|
-
"- \u5982\u679C\u7528\u6237\u53EA\u8BF4\u201C\u6709\u95EE\u9898\u201D\u201C\u60F3\u63D0\u9700\u6C42\u201D\u8FD9\u7C7B\u4E0D\u5B8C\u6574\u8868\u8FBE\uFF0C\u5148\u7528\u4E00\u53E5\u8BDD\u8FFD\u95EE\u6700\u5173\u952E\u7684\u4FE1\u606F\u3002",
|
|
2207
|
-
"- \u5982\u679C\u7528\u6237\u5DF2\u7ECF\u6E05\u695A\u63CF\u8FF0\u95EE\u9898\u6216\u9700\u6C42\uFF0C\u76F4\u63A5\u8BB0\u5F55\uFF0C\u4E0D\u8981\u8FDB\u884C\u5197\u957F\u5206\u6790\u3002",
|
|
2208
|
-
"- \u6210\u529F\u8BB0\u5F55\u540E\uFF0C\u660E\u786E\u544A\u8BC9\u7528\u6237\u201C\u5DF2\u7ECF\u5E2E\u4F60\u8BB0\u4E0B\u201D\uFF0C\u5E76\u7528\u4E00\u53E5\u8BDD\u590D\u8FF0\u6838\u5FC3\u5185\u5BB9\u3002",
|
|
2209
|
-
"- \u7D27\u6025\u53CD\u9988\u6210\u529F\u8FDB\u5165\u4EFB\u52A1\u8868\u540E\uFF0C\u544A\u8BC9\u7528\u6237\u201C\u5DF2\u6309\u7D27\u6025\u53CD\u9988\u8FDB\u5165\u4EFB\u52A1\u8868\u201D\u3002",
|
|
2210
|
-
"- \u4E0D\u8981\u627F\u8BFA\u4E00\u5B9A\u4FEE\u590D\u3001\u4E00\u5B9A\u5F00\u53D1\uFF0C\u53EA\u627F\u8BFA\u201C\u5DF2\u8BB0\u5F55\u53CD\u9988\u201D\u6216\u201C\u5DF2\u8FDB\u5165\u4EFB\u52A1\u8868\u201D\u3002"
|
|
2211
|
-
].join("\n"),
|
|
2212
|
-
toolNames: ["addTableRow", "notifyUser"]
|
|
2213
|
-
},
|
|
2214
|
-
{
|
|
2215
|
-
slug: "agent-creator",
|
|
2216
|
-
title: "agent-creator",
|
|
2217
|
-
description: "\u521B\u5EFA Agent\uFF1A\u901A\u8FC7\u5BF9\u8BDD\u628A\u7528\u6237\u7684\u60F3\u6CD5\u62C6\u6210 prompt\u3001\u77E5\u8BC6\u3001\u5DE5\u5177\u3001skill/workflow \u548C eval\uFF0C\u751F\u6210\u53EF\u9884\u89C8\u8349\u7A3F\u5E76\u5728\u7528\u6237\u786E\u8BA4\u540E\u521B\u5EFA\u771F\u5B9E Agent\u3002",
|
|
2218
|
-
body: [
|
|
2219
|
-
"\u4F60\u662F Nolo \u7684 AI \u521B\u5EFA\u52A9\u624B\uFF0C\u53EA\u8D1F\u8D23\u901A\u8FC7\u5BF9\u8BDD\u5E2E\u52A9\u7528\u6237\u521B\u5EFA\u6216\u8C03\u6574\u4E00\u4E2A\u65B0\u7684 Agent\u3002",
|
|
2220
|
-
"\u6838\u5FC3\u539F\u5219\uFF1AAgent = prompt + knowledge + tools + skills/workflows + eval \u7684\u53EF\u8FD0\u884C\u5C01\u88C5\u3002",
|
|
2221
|
-
"\u521B\u5EFA\u6D41\u7A0B\u8981\u5E2E\u52A9\u7528\u6237\u628A\u4E13\u4E1A\u7ECF\u9A8C\u62C6\u5230\u5DF2\u6709\u8D44\u4EA7\u91CC\uFF0C\u4E0D\u8981\u628A\u6240\u6709\u7ECF\u9A8C\u90FD\u585E\u8FDB prompt\u3002",
|
|
2222
|
-
"\u5148\u7406\u89E3\u7528\u6237\u60F3\u8BA9\u8FD9\u4E2A AI \u670D\u52A1\u8C01\u3001\u5B8C\u6210\u4EC0\u4E48\u4EFB\u52A1\u3001\u4F7F\u7528\u4EC0\u4E48\u8BED\u6C14\u3001\u9700\u8981\u54EA\u4E9B\u80FD\u529B\u3001\u662F\u5426\u9700\u8981\u77E5\u8BC6\u5F15\u7528\uFF0C\u4EE5\u53CA\u662F\u5426\u9002\u5408\u516C\u5F00\u3002",
|
|
2223
|
-
"\u62C6\u89E3\u80FD\u529B\u65F6\u533A\u5206\uFF1Aprompt \u8D1F\u8D23\u89D2\u8272\u548C\u884C\u4E3A\u8FB9\u754C\uFF1Bknowledge/references \u8D1F\u8D23\u8D44\u6599\u6765\u6E90\uFF1Btools \u8D1F\u8D23\u52A8\u4F5C\uFF1Bskills/workflows \u8D1F\u8D23\u7A33\u5B9A\u6D41\u7A0B\u548C\u4E13\u5BB6\u65B9\u6CD5\uFF1Beval \u8D1F\u8D23\u6210\u529F/\u5931\u8D25\u6837\u4F8B\u548C\u9A8C\u6536\u3002",
|
|
2224
|
-
"\u5F53\u4FE1\u606F\u8DB3\u591F\u5F62\u6210\u521D\u7248\u914D\u7F6E\u65F6\uFF0C\u5148\u8C03\u7528 prepareAgentDraft\uFF0C\u751F\u6210\u53EF\u9884\u89C8\u8349\u7A3F\uFF1B\u4FE1\u606F\u4E0D\u8DB3\u65F6\u6BCF\u6B21\u53EA\u95EE\u4E00\u4E2A\u5173\u952E\u95EE\u9898\u3002",
|
|
2225
|
-
"prepareAgentDraft \u53EA\u751F\u6210\u8349\u7A3F\uFF0C\u4E0D\u4EE3\u8868\u5DF2\u7ECF\u521B\u5EFA\u771F\u5B9E Agent\u3002",
|
|
2226
|
-
"\u5982\u679C\u7528\u6237\u63CF\u8FF0\u4E86\u7A33\u5B9A\u6D41\u7A0B\u3001\u4E13\u5BB6\u65B9\u6CD5\u6216\u64CD\u4F5C\u6B65\u9AA4\uFF0C\u5148\u653E\u8FDB suggestedSkillIdeas / suggestedWorkflowIdeas\uFF1B\u7528\u6237\u660E\u786E\u786E\u8BA4\u8981\u6C89\u6DC0\u6D41\u7A0B\u540E\uFF0C\u624D\u53EF\u7528 createSkillDoc \u6216 updateDoc \u521B\u5EFA/\u66F4\u65B0 skill \u6216 workflow \u6587\u6863\uFF0C\u518D\u7528 updateAgent \u6302\u5230 references\u3002",
|
|
2227
|
-
"\u5982\u679C\u7528\u6237\u63CF\u8FF0\u4E86\u9A8C\u6536\u3001\u5931\u8D25\u8FB9\u754C\u6216\u771F\u5B9E\u6848\u4F8B\uFF0C\u5148\u653E\u8FDB suggestedEvalCases\uFF1B\u9ED8\u8BA4\u53EA\u751F\u6210 eval case \u8349\u7A3F\uFF0C\u4E0D\u8981\u81EA\u52A8\u8DD1 live eval\uFF0C\u4E5F\u4E0D\u8981\u6697\u4E2D\u4EA7\u751F\u4ED8\u8D39\u8BC4\u4F30\u3002",
|
|
2228
|
-
"\u8349\u7A3F\u5C55\u793A\u540E\uFF0C\u7B49\u5F85\u7528\u6237\u660E\u786E\u786E\u8BA4\uFF0C\u4F8B\u5982\u201C\u786E\u8BA4\u521B\u5EFA\u201D\u201C\u5C31\u6309\u8FD9\u4E2A\u521B\u5EFA\u201D\u201C\u521B\u5EFA\u8FD9\u4E2A AI\u201D\u3002",
|
|
2229
|
-
"\u53EA\u6709\u5F97\u5230\u660E\u786E\u786E\u8BA4\u540E\uFF0C\u624D\u8C03\u7528 createAgent \u521B\u5EFA\u771F\u5B9E Agent\u3002",
|
|
2230
|
-
"\u7528\u6237\u53EA\u662F\u8BA8\u8BBA\u3001\u8865\u5145\u3001\u4FEE\u6539\u6216\u8BF4\u201C\u5148\u770B\u770B\u201D\u65F6\uFF0C\u4E0D\u8981\u8C03\u7528 createAgent\u3002",
|
|
2231
|
-
"\u9ED8\u8BA4\u6A21\u578B\u4F7F\u7528 provider=nolo, model=deepseek-v4-flash\uFF1B\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u4E14\u5E73\u53F0\u5DF2\u77E5\u652F\u6301\uFF0C\u4E0D\u8981\u9009\u62E9 Claude/Anthropic \u7B49\u5F53\u524D runtime \u4E0D\u652F\u6301\u7684 provider\u3002",
|
|
2232
|
-
"\u516C\u5F00\u72B6\u6001\u4FDD\u6301\u4FDD\u5B88\uFF1A\u4F60\u53EF\u4EE5\u5EFA\u8BAE\u516C\u5F00\uFF0C\u4F46\u53EA\u6709\u7528\u6237\u660E\u786E\u8981\u6C42\u516C\u5F00\u53D1\u5E03\u65F6\uFF0CcreateAgent \u7684 isPublic \u624D\u80FD\u4E3A true\u3002",
|
|
2233
|
-
"\u5982\u679C\u7528\u6237\u60F3\u624B\u52A8\u5FAE\u8C03\u6A21\u578B\u3001\u5DE5\u5177\u3001\u77E5\u8BC6\u5F15\u7528\u6216\u53D1\u5E03\u72B6\u6001\uFF0C\u53EF\u4EE5\u5F15\u5BFC\u7528\u6237\u8FDB\u5165 /create/agent \u9AD8\u7EA7\u7F16\u8F91\u9875\u3002"
|
|
2234
|
-
].join("\n"),
|
|
2235
|
-
toolNames: [
|
|
2236
|
-
"prepareAgentDraft",
|
|
2237
|
-
"createAgent",
|
|
2238
|
-
"createSkillDoc",
|
|
2239
|
-
"readDoc",
|
|
2240
|
-
"updateDoc",
|
|
2241
|
-
"updateAgent"
|
|
2242
|
-
]
|
|
2243
|
-
},
|
|
2244
|
-
{
|
|
2245
|
-
slug: "app-builder",
|
|
2246
|
-
title: "app-builder",
|
|
2247
|
-
description: "\u5E94\u7528\u6784\u5EFA\uFF1A\u5E2E\u7528\u6237\u6784\u5EFA\u548C\u4FEE\u6539 Web \u5E94\u7528\uFF08\u54C1\u724C\u7AD9\u3001\u535A\u5BA2\u3001\u9884\u7EA6\u7AD9\u3001\u4F5C\u54C1\u96C6\u3001\u77E5\u8BC6\u7AD9\u3001\u8F7B\u5DE5\u5177\uFF09\uFF0C\u652F\u6301\u5BF9\u8BDD\u521B\u5EFA\u3001\u8FED\u4EE3\u4FEE\u6539\u3001\u9884\u68C0\u548C\u53D1\u5E03\uFF0C\u65E0\u9700\u7F16\u7A0B\u7ECF\u9A8C\u3002",
|
|
2248
|
-
body: [
|
|
2249
|
-
"\u4F60\u662F\u300C\u5E94\u7528\u6784\u5EFA\u52A9\u624B\u300D\uFF0C\u5E2E\u7528\u6237\u6784\u5EFA\u548C\u4FEE\u6539 Web \u5E94\u7528\u3002\u6838\u5FC3\u539F\u5219\uFF1A**\u7528\u6700\u5C11\u7684\u6B65\u9AA4\u548C\u6700\u5C11\u7684\u8BDD\u628A\u4E8B\u505A\u6210**\u3002",
|
|
2250
|
-
"",
|
|
2251
|
-
"## \u89D2\u8272",
|
|
2252
|
-
"- \u670D\u52A1\u5BF9\u8C61\uFF1A\u6CA1\u6709\u7F16\u7A0B\u7ECF\u9A8C\u7684\u7528\u6237\u3002\u8BED\u6C14\u8F7B\u677E\u53CB\u597D\uFF0C\u907F\u514D\u6280\u672F\u672F\u8BED\uFF08Worker\u3001JavaScript\u3001API \u7B49\uFF09\u3002",
|
|
2253
|
-
"- \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u770B\u4EE3\u7801\uFF0C\u5426\u5219\u4E0D\u5C55\u793A\u5927\u6BB5\u4EE3\u7801\u3002",
|
|
2254
|
-
"- \u4F18\u5148\u6536\u655B\u6210\u5185\u5BB9\u9A71\u52A8\u7684\u7F51\u7AD9\u578B\u5C0F\u5E94\u7528\uFF1A\u54C1\u724C\u7AD9\u3001\u535A\u5BA2\u3001\u9884\u7EA6\u7AD9\u3001\u4F5C\u54C1\u96C6\u3001\u77E5\u8BC6\u7AD9\u3001\u8F7B\u5DE5\u5177\u3002",
|
|
2255
|
-
"",
|
|
2256
|
-
"## \u5DE5\u4F5C\u65B9\u5F0F",
|
|
2257
|
-
"1. \u7406\u89E3\u9700\u6C42\uFF1A\u7528\u7B80\u5355\u5BF9\u8BDD\u4E86\u89E3\u7528\u6237\u60F3\u8981\u4EC0\u4E48\uFF0C\u6700\u591A\u95EE 1-2 \u4E2A\u5173\u952E\u95EE\u9898\u3002",
|
|
2258
|
-
"2. \u81EA\u52A8\u6784\u5EFA\uFF1A\u6839\u636E\u63CF\u8FF0\u751F\u6210\u6216\u4FEE\u6539\u5E94\u7528\uFF0C\u7528\u6237\u9ED8\u8BA4\u4E0D\u9700\u8981\u770B\u5230\u4EE3\u7801\u3002",
|
|
2259
|
-
"3. \u7ED9\u51FA\u7ED3\u679C\uFF1A\u90E8\u7F72\u6210\u529F\u540E\u7ACB\u5373\u544A\u8BC9\u7528\u6237\u53EF\u8BBF\u95EE\u94FE\u63A5\uFF0C1-2 \u53E5\u8BDD\u8BF4\u660E\u5E94\u7528\u80FD\u505A\u4EC0\u4E48\u3002",
|
|
2260
|
-
"4. \u6301\u7EED\u8FED\u4EE3\uFF1A\u8981\u6539\u529F\u80FD\u6216\u6837\u5F0F\u65F6\uFF0C\u5148\u7528 appList \u627E\u5230\u76EE\u6807\u5E94\u7528\uFF0C\u518D\u6309\u300C\u5E94\u7528\u6784\u5EFA\u80FD\u529B\u5305\u300D\u7684\u64CD\u4F5C\u7EAA\u5F8B\u6267\u884C\uFF08\u6548\u7387\u4F18\u5148\u3001\u5B9A\u70B9\u4FEE\u6539\u3001SSR \u7EF4\u62A4\u3001\u9884\u68C0\u90E8\u7F72\uFF09\u3002",
|
|
2261
|
-
"",
|
|
2262
|
-
"## \u65B0\u5EFA\u5E94\u7528",
|
|
2263
|
-
"- \u63CF\u8FF0\u6E05\u6670\u5C31\u76F4\u63A5\u6784\u5EFA\u5E76\u90E8\u7F72\uFF0C\u7ED9\u51FA\u53EF\u8BBF\u95EE\u94FE\u63A5\u3002\u4E0D\u8981\u53CD\u95EE\u4E00\u5806\u7EC6\u8282\uFF0C\u5148\u505A\u51FA\u53EF\u7528\u7684\u7B2C\u4E00\u7248\u518D\u8FED\u4EE3\u3002",
|
|
2264
|
-
"",
|
|
2265
|
-
"## \u6536\u5C3E",
|
|
2266
|
-
"- \u90E8\u7F72\u6210\u529F\u540E\u4E00\u53E5\u8BDD\u7ED9\u94FE\u63A5\u5373\u53EF\u3002\u5931\u8D25\u5219\u6309\u8FD4\u56DE\u7684 issues \u5B9A\u70B9\u4FEE\u590D\u540E\u91CD\u8BD5\uFF0C\u4E0D\u8981\u505C\u4E0B\u6765\u95EE\u3002",
|
|
2267
|
-
"",
|
|
2268
|
-
"## \u5DE5\u5177",
|
|
2269
|
-
"- \u672C skill \u7684\u5DE5\u5177\uFF08app* / \u8868 / openAIGptImage \u7B49\uFF09\u7531\u300Capp-builder\u300D\u80FD\u529B\u5305\u6CE8\u5165",
|
|
2270
|
-
" \uFF08packages/ai/tools/toolPacks.ts \u7684 CAPABILITY_PACKS\uFF09\u3002\u82E5\u5F53\u524D runtime \u672A\u542F\u7528",
|
|
2271
|
-
" \u8BE5\u80FD\u529B\u5305\uFF0C\u5DE5\u5177\u9762\u4E0D\u4F1A\u5C55\u5F00\uFF0C\u9700\u8981\u5148\u786E\u8BA4\u8FD0\u884C\u73AF\u5883\u3002"
|
|
2272
|
-
].join("\n"),
|
|
2273
|
-
toolNames: []
|
|
2274
|
-
}
|
|
2275
|
-
];
|
|
2276
|
-
function seedBySlug(slug) {
|
|
2277
|
-
const seed = SPECIALIST_SKILL_SEEDS.find((item) => item.slug === slug);
|
|
2278
|
-
if (!seed) {
|
|
2279
|
-
throw new Error(`Unknown specialist skill slug: ${slug}`);
|
|
2280
|
-
}
|
|
2281
|
-
return seed;
|
|
2282
|
-
}
|
|
2283
|
-
function buildSpecialistSkillConfig(slug) {
|
|
2284
|
-
const seed = seedBySlug(slug);
|
|
2285
|
-
return {
|
|
2286
|
-
version: "0.1",
|
|
2287
|
-
kind: "skill",
|
|
2288
|
-
id: buildSpecialistSkillId(slug),
|
|
2289
|
-
name: seed.title,
|
|
2290
|
-
description: seed.description,
|
|
2291
|
-
...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
|
|
2292
|
-
};
|
|
2293
|
-
}
|
|
2294
|
-
function buildSpecialistSkillContentBySlug(slug) {
|
|
2295
|
-
const seed = seedBySlug(slug);
|
|
2296
|
-
const skillConfig = buildSpecialistSkillConfig(slug);
|
|
2297
|
-
return buildSkillDocMarkdown({
|
|
2298
|
-
body: seed.body,
|
|
2299
|
-
skillConfig
|
|
2300
|
-
});
|
|
2301
|
-
}
|
|
2302
|
-
|
|
2303
|
-
// packages/ai/skills/codePlannerSkills.ts
|
|
2304
|
-
var CODE_PLANNER_SKILL_SLUGS = [
|
|
2305
|
-
"code-planning",
|
|
2306
|
-
"search-first",
|
|
2307
|
-
"workspace-code",
|
|
2308
|
-
"web-research-lite",
|
|
2309
|
-
"dispatch-executors"
|
|
2310
|
-
];
|
|
2311
|
-
var CODE_PLANNER_ROOT_SKILL_SLUG = "code-planning";
|
|
2312
|
-
function deterministicId2(prefix, seed) {
|
|
2313
|
-
let h = 2166136261;
|
|
2314
|
-
for (let i = 0; i < seed.length; i++) {
|
|
2315
|
-
h ^= seed.charCodeAt(i);
|
|
2316
|
-
h = h * 16777619 >>> 0;
|
|
2317
|
-
}
|
|
2318
|
-
const suffix = h.toString(36).toUpperCase().padStart(14, "0");
|
|
2319
|
-
return (prefix + suffix).slice(0, 26);
|
|
2320
|
-
}
|
|
2321
|
-
function normalizeSkillSeed2(input) {
|
|
2322
|
-
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
2323
|
-
}
|
|
2324
|
-
function buildCodePlannerSkillId(slug) {
|
|
2325
|
-
return deterministicId2("01SK", normalizeSkillSeed2(slug) || slug);
|
|
2326
|
-
}
|
|
2327
|
-
function buildCodePlannerSkillPageKey(userId, slug) {
|
|
2328
|
-
return `page-${userId}-${buildCodePlannerSkillId(slug)}`;
|
|
2329
|
-
}
|
|
2330
|
-
var CODE_PLANNER_ROOT_SKILL_ID = buildCodePlannerSkillId(
|
|
2331
|
-
CODE_PLANNER_ROOT_SKILL_SLUG
|
|
2332
|
-
);
|
|
2333
|
-
function buildDispatchExecutorsPromptPatch() {
|
|
2334
|
-
return [
|
|
2335
|
-
"\u6D3E\u53D1\u534F\u8BAE\uFF1A",
|
|
2336
|
-
"- \u552F\u4E00\u771F\u5B9E\u5206\u6D3E\u901A\u9053\u662F startAgentRun\u3002\u7981\u6B62\u58F0\u79F0\u4F7F\u7528\u4E86\u672C\u673A CLI \u6216 nolo agent run\uFF08\u9664\u975E\u7528\u6237\u5F53\u524D\u4F1A\u8BDD\u672C\u8EAB\u5C31\u662F CLI\uFF09\u3002",
|
|
2337
|
-
"- \u5F53\u4EFB\u52A1\u9002\u5408\u59D4\u6D3E\u65F6\uFF0C\u5148\u8C03\u7528 listAgents \u83B7\u53D6\u5F53\u524D\u53EF\u7528\u5019\u9009\u3002",
|
|
2338
|
-
"- \u9ED8\u8BA4\u4F7F\u7528 preferred scope\uFF1B\u53EA\u6709\u6CA1\u6709\u5408\u9002\u5019\u9009\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u63A2\u7D22\u516C\u5F00 Agent \u65F6\u518D\u67E5\u8BE2 public\u3002",
|
|
2339
|
-
"- \u6839\u636E\u7528\u6237\u6307\u5B9A\u3001\u4EFB\u52A1\u80FD\u529B\u3001runtime\u3001billingSource\u3001availability\u3001cost \u548C\u53EF\u7528 quality evidence \u9009\u62E9\u3002",
|
|
2340
|
-
"- agentKey \u5FC5\u987B\u539F\u6837\u590D\u5236 listAgents \u8FD4\u56DE\u503C\u3002",
|
|
2341
|
-
"- \u7136\u540E\u8C03\u7528 startAgentRun\u3002",
|
|
2342
|
-
"- \u4E0D\u5047\u8BBE\u4EFB\u4F55\u56FA\u5B9A implementer/reviewer/coder \u89D2\u8272\u3002",
|
|
2343
|
-
"- \u4E0D\u7EF4\u62A4\u9759\u6001\u5E73\u53F0 executor pool\u3002",
|
|
2344
|
-
"- started \u2260 completed\uFF1AstartAgentRun \u6210\u529F\u8FD4\u56DE\u771F\u5B9E runId\uFF08\u540C\u6B65 wait:true \u5219\u8FD4\u56DE\u7ED3\u679C\uFF09\u540E\u624D\u80FD\u8BF4\u300C\u5DF2\u542F\u52A8\u300D\uFF1B\u5F02\u6B65\u6D3E\u53D1\u6210\u529F\u53EA\u8868\u793A started\u3002",
|
|
2345
|
-
"- \u591A\u6587\u4EF6\u5B9E\u73B0\u3001\u5927\u91CD\u6784\u3001\u65B0\u5EFA\u6A21\u5757\u5E94\u6D3E\u53D1\u6267\u884C\u8005\uFF1B\u5355\u70B9\u5C0F\u6539\u53EF\u76F4\u63A5\u7528\u5DE5\u4F5C\u533A\u5DE5\u5177\u5B8C\u6210\u3002",
|
|
2346
|
-
"- \u4E0D\u8981\u5199\u6B7B owner \u79C1\u6709 agentKey\u3002"
|
|
2347
|
-
].join("\n");
|
|
2348
|
-
}
|
|
2349
|
-
var CODE_PLANNER_SKILL_SEEDS = [
|
|
2350
|
-
{
|
|
2351
|
-
slug: "search-first",
|
|
2352
|
-
title: "search-first",
|
|
2353
|
-
description: "Search-first protocol for code work: repo before web; evaluate Adopt/Extend/Compose/Build.",
|
|
2354
|
-
body: [
|
|
2355
|
-
"# search-first",
|
|
2356
|
-
"",
|
|
2357
|
-
"Protocol-only skill. It does not grant tools by itself.",
|
|
2358
|
-
"Use workspace and web skills for actual reads/searches."
|
|
2359
|
-
].join("\n"),
|
|
2360
|
-
triggerMode: "required",
|
|
2361
|
-
promptPatch: [
|
|
2362
|
-
"Search-first \u534F\u8BAE\uFF1A",
|
|
2363
|
-
"1. \u5148\u5728\u7ED1\u5B9A\u5DE5\u4F5C\u533A/\u4ED3\u5E93\u5185\u641C\u7D22\u76F8\u5173\u6A21\u5757\u3001\u6D4B\u8BD5\u3001guidance\u3001\u65E2\u6709 helper \u4E0E\u6A21\u5F0F\u3002",
|
|
2364
|
-
"2. \u4EC5\u5F53\u4ED3\u5E93\u5185\u4FE1\u606F\u4E0D\u8DB3\uFF0C\u6216\u9700\u8981\u6838\u5BF9 API/\u7248\u672C/\u5DF2\u77E5 issue \u65F6\uFF0C\u518D\u67E5\u4F9D\u8D56\u6E90\u7801\u3001\u5B98\u65B9\u6587\u6863\u3001GitHub\u3001Web\u3002",
|
|
2365
|
-
"3. \u8BC4\u4EF7\u8DEF\u5F84\uFF1AAdopt / Extend / Compose / Build\u3002\u9ED8\u8BA4\u4F18\u5148 Adopt/Extend/Compose\uFF1BBuild \u9700\u8BF4\u660E\u4E3A\u4F55\u4E0D\u591F\u3002",
|
|
2366
|
-
"4. \u4EA7\u51FA\u53EF\u6267\u884C\u8BA1\u5212\uFF1A\u76EE\u6807\u3001\u8FB9\u754C\u3001\u5173\u952E\u6587\u4EF6\u3001\u9A8C\u8BC1\u65B9\u5F0F\u3001\u98CE\u9669\uFF1B\u518D\u6309\u7528\u6237\u610F\u56FE\u51B3\u5B9A\u53EA\u7ED9\u8BA1\u5212\u3001\u81EA\u5DF1\u5C0F\u6539\uFF0C\u8FD8\u662F startAgentRun \u6D3E\u53D1\u3002",
|
|
2367
|
-
"5. \u5DE5\u5177\u9884\u7B97\uFF1A\u7B80\u5355\u95EE\u7B54\u5C3D\u91CF \u22645 \u6B21\u5DE5\u5177\u8C03\u7528\uFF1B\u7981\u6B62\u65E0\u76EE\u6807\u8FDE\u8BFB\u5927\u91CF\u6587\u4EF6\u3002",
|
|
2368
|
-
"6. \u4ECE\u672A\u8C03\u7528\u7684\u6E20\u9053\u7981\u6B62\u58F0\u79F0\u5DF2\u641C\u7D22/\u5DF2\u68C0\u67E5\u3002"
|
|
2369
|
-
].join("\n")
|
|
2370
|
-
},
|
|
2371
|
-
{
|
|
2372
|
-
slug: "workspace-code",
|
|
2373
|
-
title: "workspace-code",
|
|
2374
|
-
description: "Workspace read/edit/shell protocol for local bound folders and repo inspection.",
|
|
2375
|
-
body: [
|
|
2376
|
-
"# workspace-code",
|
|
2377
|
-
"",
|
|
2378
|
-
"Declares local workspace tools and the honest fallback when they are unavailable."
|
|
2379
|
-
].join("\n"),
|
|
2380
|
-
triggerMode: "required",
|
|
2381
|
-
toolNames: [
|
|
2382
|
-
"readFile",
|
|
2383
|
-
"globFiles",
|
|
2384
|
-
"editFile",
|
|
2385
|
-
"execShell"
|
|
2386
|
-
],
|
|
2387
|
-
promptPatch: [
|
|
2388
|
-
"\u5DE5\u4F5C\u533A\u534F\u8BAE\uFF1A",
|
|
2389
|
-
"- Desktop/Space \u4EE3\u7801\u5BF9\u8BDD\u4E2D\uFF0C\u7528\u6237\u8BF4\u300C\u5F53\u524D\u4EE3\u7801\u300D\u300C\u5F53\u524D\u6539\u52A8\u300D\u300C\u5F53\u524D\u5DE5\u4F5C\u533A\u300D\u300C\u8FD9\u4E2A\u9879\u76EE\u300D\u300C\u4ED3\u5E93\u91CC\u300D\uFF0C\u6216\u70B9\u540D\u4ED3\u5E93\u7EC4\u4EF6\uFF08\u5982\u300CCLI \u76F8\u5173\u300D\uFF09\u65F6\uFF0C\u9ED8\u8BA4\u6307\u7ED1\u5B9A\u5DE5\u4F5C\u533A\uFF1B\u7ACB\u5373\u7528\u5DE5\u4F5C\u533A/shell \u5DE5\u5177\u68C0\u67E5\u3002\u4EE3\u7801\u6539\u52A8 review \u65F6\u5148\u4ECE git status -sb\u3001diff/stat\u3001\u76F8\u5173 guidance/tests \u5165\u624B\u3002\u4E0D\u8981\u8981\u6C42\u7528\u6237\u7C98\u8D34\u4EE3\u7801/diff\uFF0C\u9664\u975E\u5DE5\u4F5C\u533A\u5DE5\u5177\u786E\u5B9E\u4E0D\u53EF\u7528\u3001\u6CA1\u6709\u7ED1\u5B9A\u6587\u4EF6\u5939\uFF0C\u6216\u8BBF\u95EE/\u547D\u4EE4\u5931\u8D25\u2014\u2014\u5148\u62AB\u9732\u5931\u8D25\u518D\u9000\u56DE\u7C98\u8D34\u3002",
|
|
2390
|
-
"- \u53EA\u8BFB\uFF1AreadFile\u3001globFiles\u3002\u76EE\u5F55\u7ED3\u6784\u4E0E\u6587\u4EF6\u5217\u8868\u4F18\u5148\u4F7F\u7528 execShell \u8FD0\u884C ls/find\uFF0C\u4EE3\u7801/\u6587\u672C\u641C\u7D22\u4F18\u5148\u4F7F\u7528 execShell \u8FD0\u884C rg/git grep\u3002\u6CA1\u6709\u6210\u529F\u7ED3\u679C\u65F6\uFF0C\u7981\u6B62\u58F0\u79F0\u300C\u5DF2\u68C0\u67E5\u4ED3\u5E93/\u5DE5\u4F5C\u533A/\u6587\u4EF6\u300D\u3002",
|
|
2391
|
-
"- editFile\uFF1A\u5C0F\u8303\u56F4\u7CBE\u786E\u66FF\u6362\u3002edit \u524D\u5148 readFile \u62FF exact oldText\uFF1B\u9ED8\u8BA4 expectedReplacements=1\uFF0C\u5339\u914D\u6570\u4E0D\u7B26\u65F6\u505C\u5E76\u62A5\u544A blocker\u3002\u6CA1\u6709 writeFile\u2014\u2014\u9700\u8981\u65B0\u5EFA\u6587\u4EF6\u6216\u6574\u6587\u4EF6\u91CD\u5199\u65F6 startAgentRun \u6D3E\u53D1\u3002",
|
|
2392
|
-
"- execShell\uFF1A\u4F18\u5148\u53EA\u8BFB/\u8BCA\u65AD\u3002git \u72B6\u6001\u7528 shell\uFF08\u5982 git status -sb\uFF09\uFF0C\u7981\u6B62\u7528 readFile \u6316 .git \u4EE3\u66FF\u3002\u7834\u574F\u6027\u547D\u4EE4\u4E0E\u672A\u6279\u51C6\u7684 push/\u5408\u5E76\u7981\u6B62\u3002",
|
|
2393
|
-
"- \u5DE5\u4F5C\u533A\u5DE5\u5177\u4E0D\u53EF\u7528\uFF08\u975E Desktop\u3001\u672A\u7ED1\u5B9A boundFolder\u3001\u5DE5\u5177\u5931\u8D25\uFF09\u65F6\u5FC5\u987B\u62AB\u9732\uFF0C\u5E76\u53EA\u57FA\u4E8E\u7528\u6237\u7C98\u8D34\u5185\u5BB9\u4E0E\u4ECD\u53EF\u7528\u6E20\u9053\u7EE7\u7EED\u3002"
|
|
2394
|
-
].join("\n")
|
|
2395
|
-
},
|
|
2396
|
-
{
|
|
2397
|
-
slug: "web-research-lite",
|
|
2398
|
-
title: "web-research-lite",
|
|
2399
|
-
description: "Lite web verification protocol for dependency/docs/issue lookups.",
|
|
2400
|
-
body: [
|
|
2401
|
-
"# web-research-lite",
|
|
2402
|
-
"",
|
|
2403
|
-
"Declares external search/scrape tools for verification after local search."
|
|
2404
|
-
].join("\n"),
|
|
2405
|
-
triggerMode: "required",
|
|
2406
|
-
// 刻意不声明 toolNames:联网能力是系统层能力包(web-search / web-scrape),
|
|
2407
|
-
// 不编码的对话同样需要,不该由 Code Planner 私藏一份。这里只留协议,工具由
|
|
2408
|
-
// 宿主按能力包挂载,用户在设置页的全局开关才能真正管住它们。
|
|
2409
|
-
promptPatch: [
|
|
2410
|
-
"\u5916\u90E8\u68C0\u7D22\u534F\u8BAE\uFF1A",
|
|
2411
|
-
"- \u8054\u7F51\u5DE5\u5177\u7531\u5E73\u53F0\u80FD\u529B\u5305\u63D0\u4F9B\uFF08\u8054\u7F51\u641C\u7D22 / \u6DF1\u5EA6\u7F51\u9875\u6293\u53D6\uFF09\uFF0C\u7528\u6237\u53EF\u80FD\u5DF2\u5168\u5C40\u5173\u95ED\u3002",
|
|
2412
|
-
"- \u53EA\u4F7F\u7528\u672C\u8F6E\u5B9E\u9645\u62FF\u5230\u7684\u5DE5\u5177\uFF1B\u5DE5\u5177\u4E0D\u5728\u624B\u4E0A\u65F6\u5982\u5B9E\u8BF4\u660E\u300C\u8054\u7F51\u80FD\u529B\u672A\u5F00\u542F\u300D\uFF0C\u4E0D\u8981\u81C6\u9020\u8C03\u7528\u3002",
|
|
2413
|
-
"- \u6CA1\u6709\u6210\u529F\u7ED3\u679C\u65F6\uFF0C\u7981\u6B62\u58F0\u79F0\u300C\u5DF2\u641C\u7D22\u4F9D\u8D56/\u5B98\u65B9\u6587\u6863/GitHub/Web\u300D\u3002",
|
|
2414
|
-
"- \u6E20\u9053\u5931\u8D25\u6216\u4E0D\u53EF\u7528\u65F6\u5FC5\u987B\u62AB\u9732\u7F3A\u53E3\uFF0C\u6539\u7528\u4ECD\u53EF\u7528\u5DE5\u5177\uFF1B\u4E0D\u8981\u5047\u88C5\u5DF2\u6838\u5B9E\u3002"
|
|
2415
|
-
].join("\n")
|
|
2416
|
-
},
|
|
2417
|
-
{
|
|
2418
|
-
slug: "dispatch-executors",
|
|
2419
|
-
title: "dispatch-executors",
|
|
2420
|
-
description: "listAgents discovery and startAgentRun dispatch protocol for Code Planner.",
|
|
2421
|
-
body: [
|
|
2422
|
-
"# dispatch-executors",
|
|
2423
|
-
"",
|
|
2424
|
-
"Discover candidates via listAgents and dispatch chosen exact agentKey via startAgentRun."
|
|
2425
|
-
].join("\n"),
|
|
2426
|
-
triggerMode: "required",
|
|
2427
|
-
toolNames: ["listAgents", "startAgentRun"],
|
|
2428
|
-
promptPatch: buildDispatchExecutorsPromptPatch()
|
|
2429
|
-
},
|
|
2430
|
-
{
|
|
2431
|
-
slug: "code-planning",
|
|
2432
|
-
title: "code-planning",
|
|
2433
|
-
description: "Root Code Planner skill: composes search-first, workspace, web, and dispatch skills.",
|
|
2434
|
-
body: [
|
|
2435
|
-
"# code-planning",
|
|
2436
|
-
"",
|
|
2437
|
-
"Composition-only root skill for Code Planner.",
|
|
2438
|
-
"Attach this skill on the Agent; children load via requiredSkills.",
|
|
2439
|
-
"Until runtimes expand skill pages, Agent seed also carries a compiled snapshot."
|
|
2440
|
-
].join("\n"),
|
|
2441
|
-
triggerMode: "required",
|
|
2442
|
-
requiredSkillSlugs: [
|
|
2443
|
-
"search-first",
|
|
2444
|
-
"workspace-code",
|
|
2445
|
-
"web-research-lite",
|
|
2446
|
-
"dispatch-executors"
|
|
2447
|
-
]
|
|
2448
|
-
}
|
|
2449
|
-
];
|
|
2450
|
-
function seedBySlug2(slug) {
|
|
2451
|
-
const seed = CODE_PLANNER_SKILL_SEEDS.find((item) => item.slug === slug);
|
|
2452
|
-
if (!seed) {
|
|
2453
|
-
throw new Error(`Unknown Code Planner skill slug: ${slug}`);
|
|
2454
|
-
}
|
|
2455
|
-
return seed;
|
|
2456
|
-
}
|
|
2457
|
-
function collectCodePlannerReachableSkillSlugs(rootSlug = CODE_PLANNER_ROOT_SKILL_SLUG) {
|
|
2458
|
-
const ordered = [];
|
|
2459
|
-
const seen = /* @__PURE__ */ new Set();
|
|
2460
|
-
const visit = (slug) => {
|
|
2461
|
-
if (seen.has(slug)) return;
|
|
2462
|
-
seen.add(slug);
|
|
2463
|
-
ordered.push(slug);
|
|
2464
|
-
for (const child of seedBySlug2(slug).requiredSkillSlugs ?? []) {
|
|
2465
|
-
visit(child);
|
|
2466
|
-
}
|
|
2467
|
-
};
|
|
2468
|
-
visit(rootSlug);
|
|
2469
|
-
return ordered;
|
|
2470
|
-
}
|
|
2471
|
-
function compileCodePlannerEffectiveTools() {
|
|
2472
|
-
const tools = [];
|
|
2473
|
-
const seen = /* @__PURE__ */ new Set();
|
|
2474
|
-
for (const slug of collectCodePlannerReachableSkillSlugs()) {
|
|
2475
|
-
for (const toolName of seedBySlug2(slug).toolNames ?? []) {
|
|
2476
|
-
if (seen.has(toolName)) continue;
|
|
2477
|
-
seen.add(toolName);
|
|
2478
|
-
tools.push(toolName);
|
|
2479
|
-
}
|
|
2480
|
-
}
|
|
2481
|
-
return tools;
|
|
2482
|
-
}
|
|
2483
|
-
var CODE_PLANNER_COMPILED_EFFECTIVE_TOOLS = compileCodePlannerEffectiveTools();
|
|
2484
|
-
function buildCodePlannerSkillConfig(slug, options) {
|
|
2485
|
-
const seed = seedBySlug2(slug);
|
|
2486
|
-
const requiredSkills = options?.requiredSkills ?? seed.requiredSkillSlugs?.map((childSlug) => buildCodePlannerSkillId(childSlug));
|
|
2487
|
-
return {
|
|
2488
|
-
version: "0.1",
|
|
2489
|
-
kind: "skill",
|
|
2490
|
-
id: buildCodePlannerSkillId(slug),
|
|
2491
|
-
name: seed.title,
|
|
2492
|
-
description: seed.description,
|
|
2493
|
-
...seed.triggerMode ? { triggerMode: seed.triggerMode } : {},
|
|
2494
|
-
...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {},
|
|
2495
|
-
...requiredSkills?.length ? { requiredSkills: [...requiredSkills] } : {},
|
|
2496
|
-
...seed.promptPatch ? { promptPatch: seed.promptPatch } : {}
|
|
2497
|
-
};
|
|
2498
|
-
}
|
|
2499
|
-
function buildCodePlannerSkillPageRecords(userId) {
|
|
2500
|
-
const trimmedUserId = userId.trim();
|
|
2501
|
-
if (!trimmedUserId) {
|
|
2502
|
-
throw new Error("buildCodePlannerSkillPageRecords requires userId");
|
|
2503
|
-
}
|
|
2504
|
-
return CODE_PLANNER_SKILL_SEEDS.map((seed) => {
|
|
2505
|
-
const skillId = buildCodePlannerSkillId(seed.slug);
|
|
2506
|
-
const dbKey = buildCodePlannerSkillPageKey(trimmedUserId, seed.slug);
|
|
2507
|
-
const requiredSkills = seed.requiredSkillSlugs?.map(
|
|
2508
|
-
(childSlug) => buildCodePlannerSkillPageKey(trimmedUserId, childSlug)
|
|
2509
|
-
);
|
|
2510
|
-
const skillConfig = buildCodePlannerSkillConfig(seed.slug, {
|
|
2511
|
-
requiredSkills
|
|
2512
|
-
});
|
|
2513
|
-
return {
|
|
2514
|
-
slug: seed.slug,
|
|
2515
|
-
skillId,
|
|
2516
|
-
dbKey,
|
|
2517
|
-
title: seed.title,
|
|
2518
|
-
content: buildSkillDocMarkdown({
|
|
2519
|
-
body: seed.body,
|
|
2520
|
-
skillConfig
|
|
2521
|
-
}),
|
|
2522
|
-
meta: {
|
|
2523
|
-
kind: "skill",
|
|
2524
|
-
skillConfig
|
|
2525
|
-
},
|
|
2526
|
-
...skillConfig.toolNames?.length ? { tools: [...skillConfig.toolNames] } : {}
|
|
2527
|
-
};
|
|
2528
|
-
});
|
|
2529
|
-
}
|
|
2530
|
-
|
|
2531
|
-
// packages/ai/skills/searchDialogSkill.ts
|
|
2532
|
-
var SEARCH_DIALOG_SKILL_SLUGS = [
|
|
2533
|
-
"search-dialog-messages"
|
|
2534
|
-
];
|
|
2535
|
-
function deterministicId3(prefix, seed) {
|
|
2536
|
-
let h = 2166136261;
|
|
2537
|
-
for (let i = 0; i < seed.length; i++) {
|
|
2538
|
-
h ^= seed.charCodeAt(i);
|
|
2539
|
-
h = h * 16777619 >>> 0;
|
|
2540
|
-
}
|
|
2541
|
-
const suffix = h.toString(36).toUpperCase().padStart(14, "0");
|
|
2542
|
-
return (prefix + suffix).slice(0, 26);
|
|
2543
|
-
}
|
|
2544
|
-
function normalizeSkillSeed3(input) {
|
|
2545
|
-
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
2546
|
-
}
|
|
2547
|
-
function buildSearchDialogSkillId(slug) {
|
|
2548
|
-
return deterministicId3("01SK", normalizeSkillSeed3(slug) || slug);
|
|
2549
|
-
}
|
|
2550
|
-
function buildSearchDialogSkillPageKey(userId, slug) {
|
|
2551
|
-
return `page-${userId}-${buildSearchDialogSkillId(slug)}`;
|
|
2552
|
-
}
|
|
2553
|
-
var SEARCH_DIALOG_SKILL_SEEDS = [
|
|
2554
|
-
{
|
|
2555
|
-
slug: "search-dialog-messages",
|
|
2556
|
-
title: "\u5BF9\u8BDD\u68C0\u7D22",
|
|
2557
|
-
description: "\u5BF9\u8BDD\u68C0\u7D22\uFF1AlistDialogs \u5217\u51FA\u5F53\u524D\u7528\u6237\u7684\u5BF9\u8BDD\uFF08\u9ED8\u8BA4 100 \u6761\u3001\u4E0A\u9650 500\uFF09\uFF0C\u7528\u4E8E\u5728\u76EE\u6807\u5BF9\u8BDD\u4E0D\u660E\u786E\u65F6\u5148\u5B9A\u4F4D\uFF1BreadDialog \u8BFB\u53D6\u6307\u5B9A\u5BF9\u8BDD\u7684\u5143\u6570\u636E\u4E0E\u6700\u8FD1\u6D88\u606F\uFF08dialog \u4F18\u5148\u4F20\u5B8C\u6574 dbKey dialog-<userId>-<id> \u6216\u5BF9\u8BDD URL\uFF0C\u88F8 ID \u4EC5\u5BF9\u5F53\u524D\u767B\u5F55\u7528\u6237\u6709\u6548\uFF09\uFF1BsearchDialogMessages \u5728\u6307\u5B9A\u5BF9\u8BDD\u7684\u539F\u59CB\u6D88\u606F\u4E2D\u6309\u7CBE\u786E\u6216\u6A21\u7CCA\u6587\u672C\u641C\u7D22\uFF0C\u8FD4\u56DE\u5339\u914D\u7684 messageId\u3001\u89D2\u8272\u3001\u88C1\u526A\u540E\u7684\u539F\u6587\u7247\u6BB5\u4E0E\u90BB\u8FD1\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u628A\u6574\u6BB5\u5BF9\u8BDD\u704C\u8FDB\u6A21\u578B\u4E0A\u4E0B\u6587\u3002",
|
|
2558
|
-
body: [
|
|
2559
|
-
"\u4F60\u662F\u300C\u5BF9\u8BDD\u68C0\u7D22\u300D\u80FD\u529B\u7684\u4F7F\u7528\u8005\uFF1A\u9700\u8981\u8BFB\u53D6\u6216\u53D6\u8BC1\u67D0\u6BB5\u5BF9\u8BDD\u65F6\uFF0C\u5728\u672C skill \u7684 listDialogs\u3001readDialog \u4E0E searchDialogMessages \u4E09\u4E2A\u5DE5\u5177\u4E2D\u9009\u62E9\u5408\u9002\u7684\u90A3\u4E2A\u3002",
|
|
2560
|
-
"",
|
|
2561
|
-
"## \u4EC0\u4E48\u65F6\u5019\u7528",
|
|
2562
|
-
"- \u7528\u6237\u8981\u7CBE\u786E\u7684\u65E7\u6D88\u606F\u3001\u539F\u6587\u63AA\u8F9E\u3001\u8C01\u8BF4\u4E86\u4EC0\u4E48\u3001\u67D0\u4E2A\u51B3\u7B56\u4E3A\u4EC0\u4E48\u505A\u51FA\u3001\u65E9\u671F\u5386\u53F2\u7EC6\u8282\u3002",
|
|
2563
|
-
"- \u9700\u8981\u6587\u4EF6/\u5DE5\u5177\u8BC1\u636E\u3001\u5931\u8D25\u5C1D\u8BD5\u3001\u6216\u4E0E\u4E4B\u524D\u5DE5\u4F5C\u7684\u5BF9\u6BD4\uFF08\u6765\u81EA\u88AB\u5F15\u7528\u5BF9\u8BDD\uFF09\u3002",
|
|
2564
|
-
"- \u76EE\u6807\u5BF9\u8BDD\u4E0D\u660E\u786E\u3001\u9700\u8981\u5148\u5217\u51FA\u5019\u9009\u5BF9\u8BDD\uFF08\u5F53\u524D\u7528\u6237\u7684\u5BF9\u8BDD\u5217\u8868\uFF09\u65F6\uFF0C\u7528 listDialogs\u3002",
|
|
2565
|
-
"- \u5F53\u524D\u4E0A\u4E0B\u6587\u53EA\u6709\u6709\u635F\u7684\u5BF9\u8BDD\u6458\u8981\uFF0C\u800C\u7528\u6237\u9700\u8981\u8BC1\u636E\u3001\u51FA\u5904\u6216\u5177\u4F53\u5386\u53F2\u7EC6\u8282\u65F6\u2014\u2014\u4F18\u5148\u7528\u672C skill\uFF0C\u4E0D\u8981\u51ED\u6458\u8981\u731C\u3002",
|
|
2566
|
-
"",
|
|
2567
|
-
"## listDialogs\uFF1A\u5B9A\u4F4D\u5BF9\u8BDD",
|
|
2568
|
-
"\u5217\u51FA\u5F53\u524D\u7528\u6237\u7684\u5BF9\u8BDD\uFF1A`listDialogs({ limit?, space?, includeScheduled? })`\u3002",
|
|
2569
|
-
"- \u8FD4\u56DE `{ total, dialogs: [{ id, dbKey, title, status, updatedAt, createdAt, spaceId, triggerType, primaryAgentKey }] }`\uFF0C\u6309\u6700\u8FD1\u66F4\u65B0\u6392\u5E8F\u3002",
|
|
2570
|
-
"- limit \u63A7\u5236\u8FD4\u56DE\u6761\u6570\uFF08\u9ED8\u8BA4 100\uFF0C\u4E0A\u9650 500\uFF09\uFF1Bspace \u53EF\u4F20 space id \u6216 URL \u6536\u7A84\u8303\u56F4\uFF1BincludeScheduled \u63A7\u5236\u662F\u5426\u5305\u542B\u5B9A\u65F6/\u540E\u53F0\u8FD0\u884C\u5BF9\u8BDD\uFF08\u9ED8\u8BA4\u4E0D\u542B\uFF09\u3002",
|
|
2571
|
-
"- \u76EE\u6807\u5BF9\u8BDD\u4E0D\u660E\u786E\u65F6\u5148\u7528\u5B83\u5B9A\u4F4D\uFF1A\u4ECE\u7ED3\u679C\u91CC\u53D6 dbKey \u6216 URL \u4EA4\u7ED9 readDialog / searchDialogMessages\uFF0C\u4E0D\u8981\u7528\u88F8 ID\u3002",
|
|
2572
|
-
"",
|
|
2573
|
-
"## readDialog\uFF1A\u8BFB\u53D6\u5BF9\u8BDD",
|
|
2574
|
-
'\u8BFB\u53D6\u6307\u5B9A\u5BF9\u8BDD\u7684\u5143\u6570\u636E\u4E0E\u6700\u8FD1\u6D88\u606F\uFF1A`readDialog({ dialog: "<dialog \u7684 dbKey>" })`\u3002',
|
|
2575
|
-
"- dialog \u4F18\u5148\u4F20\u5B8C\u6574 dbKey\uFF08dialog-<userId>-<id>\uFF09\u6216\u5BF9\u8BDD URL\uFF1B\u88F8 ID \u53EA\u5BF9\u5F53\u524D\u767B\u5F55\u7528\u6237\u6709\u6548\uFF0C\u4E0D\u80FD\u53EF\u9760\u8BFB\u53D6\u5176\u4ED6\u7528\u6237\u6216\u8DE8\u670D\u52A1\u5668\u7684\u5BF9\u8BDD\u3002",
|
|
2576
|
-
"- \u76EE\u6807\u5BF9\u8BDD\u4E0D\u660E\u786E\u65F6\uFF0C\u5148 listDialogs \u5B9A\u4F4D\u518D\u8BFB\u53D6\u3002",
|
|
2577
|
-
"- limit \u63A7\u5236\u8FD4\u56DE\u6D88\u606F\u6761\u6570\uFF08\u9ED8\u8BA4 120\uFF0C\u4E0A\u9650 1000\uFF09\u3002",
|
|
2578
|
-
"",
|
|
2579
|
-
"## searchDialogMessages\uFF1A\u539F\u6587\u641C\u7D22",
|
|
2580
|
-
'\u57FA\u672C\u5F62\u5F0F\uFF1A`searchDialogMessages({ dialogKey: "<dialog \u7684 dbKey>", query: "<\u8981\u641C\u7684\u6587\u672C>" })`',
|
|
2581
|
-
"",
|
|
2582
|
-
"\u53C2\u6570\uFF1A",
|
|
2583
|
-
"- dialogKey\uFF1A\u76EE\u6807\u5BF9\u8BDD\u7684 dbKey\uFF08\u5F62\u5982 dialog-<userId>-01ABC...\uFF09\u3002",
|
|
2584
|
-
"- query\uFF1A\u8981\u5728\u539F\u59CB\u6D88\u606F\u5185\u5BB9\u91CC\u641C\u7D22\u7684\u6587\u672C\u3002",
|
|
2585
|
-
"- limit\uFF1A\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u6761\u5339\u914D\uFF08\u4E0A\u9650 10\uFF09\u3002",
|
|
2586
|
-
"- scanLimit\uFF1A\u4ECE server \u62C9\u53D6\u65F6\u6700\u591A\u626B\u63CF\u591A\u5C11\u6761\u6D88\u606F\uFF08\u4E0A\u9650 500\uFF09\u3002",
|
|
2587
|
-
"- contextMessages\uFF1A\u6BCF\u6761\u5339\u914D\u524D\u540E\u9644\u5E26\u591A\u5C11\u6761\u90BB\u8FD1\u6D88\u606F\uFF08\u4E0A\u9650 3\uFF09\u3002",
|
|
2588
|
-
"- role\uFF1A\u53EF\u9009\uFF0C\u53EA\u641C\u6307\u5B9A\u89D2\u8272\uFF08user / assistant / tool / system\uFF09\u3002",
|
|
2589
|
-
"- includeTools\uFF1A\u53EF\u9009\uFF0C\u662F\u5426\u5305\u542B tool \u6D88\u606F\u3002",
|
|
2590
|
-
"",
|
|
2591
|
-
"## \u8FD4\u56DE",
|
|
2592
|
-
"searchDialogMessages \u8FD4\u56DE\u5339\u914D\u7684 messageId\u3001\u89D2\u8272\u3001\u88C1\u526A\u540E\u7684\u539F\u6587\u5185\u5BB9\u7247\u6BB5\u4EE5\u53CA\u90BB\u8FD1\u4E0A\u4E0B\u6587\u3002",
|
|
2593
|
-
"\u57FA\u4E8E\u8FD4\u56DE\u7684\u539F\u6587\u7247\u6BB5\u56DE\u7B54\u7528\u6237\uFF0C\u5F15\u7528\u65F6\u4FDD\u6301\u539F\u6587\uFF1B\u7247\u6BB5\u88AB\u88C1\u526A\u65F6\uFF0C\u5982\u9700\u66F4\u5B8C\u6574\u5185\u5BB9\u518D\u9488\u5BF9\u6027\u7F29\u5C0F\u67E5\u8BE2\u6216\u6362\u5173\u952E\u8BCD\u3002",
|
|
2594
|
-
"",
|
|
2595
|
-
"## \u8FB9\u754C",
|
|
2596
|
-
"- searchDialogMessages \u53EA\u641C**\u4E00\u4E2A**\u6307\u5B9A\u5BF9\u8BDD\u7684\u539F\u59CB\u6D88\u606F\uFF1B\u8DE8\u5BF9\u8BDD\u6216\u6309\u4E3B\u9898\u805A\u5408\u8BF7\u7528 queryDialogsBySubjectRef\u3002",
|
|
2597
|
-
"- listDialogs \u53EA\u5217**\u5F53\u524D\u767B\u5F55\u7528\u6237**\u7684\u5BF9\u8BDD\uFF08\u9ED8\u8BA4\u4E0D\u542B\u5B9A\u65F6/\u540E\u53F0\u8FD0\u884C\u5BF9\u8BDD\uFF0C\u9664\u975E includeScheduled\uFF09\uFF1B\u8DE8\u7528\u6237/\u8DE8\u670D\u52A1\u5668\u68C0\u7D22\u4E0D\u53D7\u652F\u6301\u3002",
|
|
2598
|
-
"- \u4E0D\u8981\u4E3A\u4E86\u300C\u591A\u62FF\u70B9\u4E0A\u4E0B\u6587\u300D\u800C\u7528\u5927 scanLimit/limit \u4EE3\u66FF readDialog \u7684\u5B8C\u6574\u8BFB\u53D6\u8BED\u4E49\uFF1B\u672C skill \u91CC readDialog \u8D1F\u8D23\u5B8C\u6574\u8BFB\u53D6\uFF0CsearchDialogMessages \u7684\u4EF7\u503C\u662F\u5B9A\u70B9\u53D6\u8BC1\u3002",
|
|
2599
|
-
"- \u641C\u4E0D\u5230\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u7528\u6458\u8981\u6216\u8BB0\u5FC6\u7F16\u9020\u539F\u6587\u3002"
|
|
2600
|
-
].join("\n"),
|
|
2601
|
-
toolNames: ["listDialogs", "readDialog", "searchDialogMessages"]
|
|
2602
|
-
}
|
|
2603
|
-
];
|
|
2604
|
-
function seedBySlug3(slug) {
|
|
2605
|
-
const seed = SEARCH_DIALOG_SKILL_SEEDS.find((item) => item.slug === slug);
|
|
2606
|
-
if (!seed) {
|
|
2607
|
-
throw new Error(`Unknown search-dialog skill slug: ${slug}`);
|
|
2608
|
-
}
|
|
2609
|
-
return seed;
|
|
2610
|
-
}
|
|
2611
|
-
function buildSearchDialogSkillConfig(slug) {
|
|
2612
|
-
const seed = seedBySlug3(slug);
|
|
2613
|
-
return {
|
|
2614
|
-
version: "0.1",
|
|
2615
|
-
kind: "skill",
|
|
2616
|
-
id: buildSearchDialogSkillId(slug),
|
|
2617
|
-
name: seed.title,
|
|
2618
|
-
description: seed.description,
|
|
2619
|
-
...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
|
|
2620
|
-
};
|
|
2621
|
-
}
|
|
2622
|
-
function buildSearchDialogSkillContentBySlug(slug) {
|
|
2623
|
-
const seed = seedBySlug3(slug);
|
|
2624
|
-
const skillConfig = buildSearchDialogSkillConfig(slug);
|
|
2625
|
-
return buildSkillDocMarkdown({
|
|
2626
|
-
body: seed.body,
|
|
2627
|
-
skillConfig
|
|
2628
|
-
});
|
|
2629
|
-
}
|
|
2630
|
-
|
|
2631
|
-
// packages/ai/skills/searchSpaceSkill.ts
|
|
2632
|
-
var SEARCH_SPACE_SKILL_SLUGS = [
|
|
2633
|
-
"search-all-spaces"
|
|
2634
|
-
];
|
|
2635
|
-
function deterministicId4(prefix, seed) {
|
|
2636
|
-
let h = 2166136261;
|
|
2637
|
-
for (let i = 0; i < seed.length; i++) {
|
|
2638
|
-
h ^= seed.charCodeAt(i);
|
|
2639
|
-
h = h * 16777619 >>> 0;
|
|
2640
|
-
}
|
|
2641
|
-
const suffix = h.toString(36).toUpperCase().padStart(14, "0");
|
|
2642
|
-
return (prefix + suffix).slice(0, 26);
|
|
2643
|
-
}
|
|
2644
|
-
function normalizeSkillSeed4(input) {
|
|
2645
|
-
return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
|
|
2646
|
-
}
|
|
2647
|
-
function buildSearchSpaceSkillId(slug) {
|
|
2648
|
-
return deterministicId4("01SK", normalizeSkillSeed4(slug) || slug);
|
|
2649
|
-
}
|
|
2650
|
-
function buildSearchSpaceSkillPageKey(userId, slug) {
|
|
2651
|
-
return `page-${userId}-${buildSearchSpaceSkillId(slug)}`;
|
|
2652
|
-
}
|
|
2653
|
-
var SEARCH_SPACE_SKILL_SEEDS = [
|
|
2654
|
-
{
|
|
2655
|
-
slug: "search-all-spaces",
|
|
2656
|
-
title: "\u5168\u7A7A\u95F4\u641C\u7D22",
|
|
2657
|
-
description: "\u5168\u7A7A\u95F4\u641C\u7D22\uFF1A\u4F7F\u7528 search_all_spaces \u5728\u5F53\u524D\u8BBE\u5907\u5DF2\u540C\u6B65\u7684\u5168\u90E8\u5185\u5BB9\u4E2D\u641C\u7D22\u5F53\u524D\u7528\u6237\u7684\u6570\u636E\uFF08\u7B49\u540C\u4E8E\u5168\u90E8\u89C6\u56FE Recent \u7684\u5185\u5BB9\u8BED\u4E49\uFF09\uFF0C\u5E76\u8FD4\u56DE\u6240\u5C5E\u7A7A\u95F4\uFF08\u5982\u6709\uFF09\u3002\u9002\u5408\u5728\u5168\u90E8\u89C6\u56FE\uFF08All View\uFF09\u6216\u9700\u8981\u8DE8\u7A7A\u95F4\u68C0\u7D22\u65F6\u4F7F\u7528\u3002",
|
|
2658
|
-
body: [
|
|
2659
|
-
"\u4F60\u662F\u300C\u5168\u7A7A\u95F4\u641C\u7D22\u300D\u80FD\u529B\u7684\u4F7F\u7528\u8005\uFF1A\u9700\u8981\u8DE8\u7A7A\u95F4\u3001\u6216\u5728\u6CA1\u6709\u300C\u5F53\u524D\u7A7A\u95F4\u300D\u8BED\u4E49\u7684\u4E0A\u4E0B\u6587\u4E2D\u68C0\u7D22\u7528\u6237\u5185\u5BB9\u65F6\uFF0C\u4F7F\u7528\u672C skill \u7684 search_all_spaces \u5DE5\u5177\u3002",
|
|
2660
|
-
"",
|
|
2661
|
-
"## \u4EC0\u4E48\u65F6\u5019\u7528",
|
|
2662
|
-
"- \u7528\u6237\u8981\u8DE8\u7A7A\u95F4\u67E5\u627E\u5185\u5BB9\uFF08\u9875\u9762\u3001\u8868\u683C\u3001\u5BF9\u8BDD\u7B49\uFF09\uFF0C\u4E14\u4E0D\u9650\u5B9A\u5728\u67D0\u4E2A\u5177\u4F53\u7A7A\u95F4\u3002",
|
|
2663
|
-
"- \u5F53\u524D\u89C6\u56FE\u662F\u5168\u90E8\u89C6\u56FE\uFF08All View\uFF09\uFF1A\u6CA1\u6709\u5F53\u524D\u7A7A\u95F4\uFF0Csearch_workspace \u4E0D\u9002\u7528\uFF0C\u4F18\u5148\u7528\u672C skill\u3002",
|
|
2664
|
-
"- \u9700\u8981\u786E\u8BA4\u67D0\u6761\u5185\u5BB9\u5C5E\u4E8E\u54EA\u4E2A\u7A7A\u95F4\uFF08\u8FD4\u56DE\u7ED3\u679C\u5E26 spaceId / spaceName\uFF09\u65F6\u3002",
|
|
2665
|
-
"",
|
|
2666
|
-
"## \u8C03\u7528\u65B9\u5F0F",
|
|
2667
|
-
'`search_all_spaces({ query: "<\u5173\u952E\u8BCD>" })`',
|
|
2668
|
-
"- query\uFF1A\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5339\u914D\u6807\u9898\u4E0E\u6587\u4EF6\u540D\uFF08contentKey\uFF09\u3002",
|
|
2669
|
-
"- \u8FD4\u56DE rawData.contents\uFF1A\u6BCF\u9879\u5305\u542B title\u3001type\u3001contentKey\u3001spaceId\u3001spaceName\uFF08\u5982\u6709\uFF09\u3001createdAt / updatedAt\u3001serverOrigin\uFF08\u5982\u6709\uFF09\u3002",
|
|
2670
|
-
"",
|
|
2671
|
-
"## \u8BED\u4E49\u4E0E\u8FB9\u754C",
|
|
2672
|
-
"- \u641C\u7D22\u8303\u56F4 = \u5F53\u524D\u8BBE\u5907\u5DF2\u540C\u6B65\u7684 user-data \u5185\u5BB9\uFF08\u4E0E\u300C\u5168\u90E8\u89C6\u56FE Recent\u300D\u540C\u4E00\u5957\u8BED\u4E49\uFF09\uFF0C\u4E0D\u662F\u8FDC\u7A0B\u6570\u636E\u5E93\u7684\u5168\u91CF\u68C0\u7D22\u3002",
|
|
2673
|
-
"- \u7ED3\u679C\u53EF\u80FD\u8DE8\u591A\u4E2A\u7A7A\u95F4\uFF0C\u6309\u5185\u5BB9\u9010\u6761\u8FD4\u56DE\uFF0C\u4E0D\u9700\u8981\u5728\u8FD4\u56DE\u540E\u4E8C\u6B21\u641C\u7D22\u3002",
|
|
2674
|
-
"- \u6CA1\u6709\u547D\u4E2D\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u7F16\u9020\u5185\u5BB9\u6216\u7A7A\u95F4\u5F52\u5C5E\u3002",
|
|
2675
|
-
"- \u5206\u7C7B\u89C6\u56FE\uFF08categories\uFF09\u4E0B\u7528\u6237\u53EA\u95EE\u5F53\u524D\u7A7A\u95F4\u5185\u5BB9\u65F6\uFF0C\u4F18\u5148\u7528\u5E38\u9A7B\u7684 search_workspace\uFF1B\u9700\u8981\u8DE8\u7A7A\u95F4\u624D loadSkill \u672C skill\u3002"
|
|
2676
|
-
].join("\n"),
|
|
2677
|
-
toolNames: ["search_all_spaces"]
|
|
2678
|
-
}
|
|
2679
|
-
];
|
|
2680
|
-
function seedBySlug4(slug) {
|
|
2681
|
-
const seed = SEARCH_SPACE_SKILL_SEEDS.find((item) => item.slug === slug);
|
|
2682
|
-
if (!seed) {
|
|
2683
|
-
throw new Error(`Unknown search-space skill slug: ${slug}`);
|
|
2684
|
-
}
|
|
2685
|
-
return seed;
|
|
2686
|
-
}
|
|
2687
|
-
function buildSearchSpaceSkillConfig(slug) {
|
|
2688
|
-
const seed = seedBySlug4(slug);
|
|
2689
|
-
return {
|
|
2690
|
-
version: "0.1",
|
|
2691
|
-
kind: "skill",
|
|
2692
|
-
id: buildSearchSpaceSkillId(slug),
|
|
2693
|
-
name: seed.title,
|
|
2694
|
-
description: seed.description,
|
|
2695
|
-
...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
|
|
2696
|
-
};
|
|
2697
|
-
}
|
|
2698
|
-
function buildSearchSpaceSkillContentBySlug(slug) {
|
|
2699
|
-
const seed = seedBySlug4(slug);
|
|
2700
|
-
const skillConfig = buildSearchSpaceSkillConfig(slug);
|
|
2701
|
-
return buildSkillDocMarkdown({
|
|
2702
|
-
body: seed.body,
|
|
2703
|
-
skillConfig
|
|
2704
|
-
});
|
|
2705
|
-
}
|
|
2706
|
-
|
|
2707
|
-
// packages/ai/skills/builtinSkillRegistry.ts
|
|
2708
|
-
var codePlannerContentBySlug = /* @__PURE__ */ (() => {
|
|
2709
|
-
const cache = /* @__PURE__ */ new Map();
|
|
2710
|
-
return (slug) => {
|
|
2711
|
-
if (cache.size === 0) {
|
|
2712
|
-
for (const page of buildCodePlannerSkillPageRecords("platform-skill-owner")) {
|
|
2713
|
-
cache.set(page.slug, page.content);
|
|
2714
|
-
}
|
|
2715
|
-
}
|
|
2716
|
-
return cache.get(slug) ?? "";
|
|
2717
|
-
};
|
|
2718
|
-
})();
|
|
2719
|
-
var OBJECT_SKILL_KINDS = Object.keys(
|
|
2720
|
-
BUILTIN_OBJECT_SKILL_IDS
|
|
2721
|
-
);
|
|
2722
|
-
var SOURCES = [
|
|
2723
|
-
{
|
|
2724
|
-
slugs: OBJECT_SKILL_KINDS,
|
|
2725
|
-
buildSkillId: (kind) => BUILTIN_OBJECT_SKILL_IDS[kind],
|
|
2726
|
-
buildPageKey: (userId, kind) => buildBuiltinObjectSkillDbKey(kind, userId),
|
|
2727
|
-
buildConfig: buildBuiltinObjectSkillConfig,
|
|
2728
|
-
buildContent: buildBuiltinObjectSkillPageContent
|
|
2729
|
-
},
|
|
2730
|
-
{
|
|
2731
|
-
slugs: CODING_SKILL_SLUGS,
|
|
2732
|
-
buildSkillId: buildCodingSkillId,
|
|
2733
|
-
buildPageKey: buildCodingSkillPageKey,
|
|
2734
|
-
buildConfig: buildCodingSkillConfig,
|
|
2735
|
-
buildContent: buildCodingSkillContentBySlug
|
|
2736
|
-
},
|
|
2737
|
-
{
|
|
2738
|
-
slugs: SPECIALIST_SKILL_SLUGS,
|
|
2739
|
-
buildSkillId: buildSpecialistSkillId,
|
|
2740
|
-
buildPageKey: buildSpecialistSkillPageKey,
|
|
2741
|
-
buildConfig: buildSpecialistSkillConfig,
|
|
2742
|
-
buildContent: buildSpecialistSkillContentBySlug
|
|
2743
|
-
},
|
|
2744
|
-
{
|
|
2745
|
-
slugs: CODE_PLANNER_SKILL_SLUGS,
|
|
2746
|
-
buildSkillId: buildCodePlannerSkillId,
|
|
2747
|
-
buildPageKey: buildCodePlannerSkillPageKey,
|
|
2748
|
-
buildConfig: buildCodePlannerSkillConfig,
|
|
2749
|
-
buildContent: codePlannerContentBySlug
|
|
2750
|
-
},
|
|
2751
|
-
{
|
|
2752
|
-
slugs: SEARCH_DIALOG_SKILL_SLUGS,
|
|
2753
|
-
buildSkillId: buildSearchDialogSkillId,
|
|
2754
|
-
buildPageKey: buildSearchDialogSkillPageKey,
|
|
2755
|
-
buildConfig: buildSearchDialogSkillConfig,
|
|
2756
|
-
buildContent: buildSearchDialogSkillContentBySlug
|
|
2757
|
-
},
|
|
2758
|
-
{
|
|
2759
|
-
slugs: SEARCH_SPACE_SKILL_SLUGS,
|
|
2760
|
-
buildSkillId: buildSearchSpaceSkillId,
|
|
2761
|
-
buildPageKey: buildSearchSpaceSkillPageKey,
|
|
2762
|
-
buildConfig: buildSearchSpaceSkillConfig,
|
|
2763
|
-
buildContent: buildSearchSpaceSkillContentBySlug
|
|
2764
|
-
}
|
|
2765
|
-
];
|
|
2766
|
-
var buildRegistry = () => {
|
|
2767
|
-
const entries = [];
|
|
2768
|
-
const seenSlugs = /* @__PURE__ */ new Set();
|
|
2769
|
-
for (const source of SOURCES) {
|
|
2770
|
-
for (const slug of source.slugs) {
|
|
2771
|
-
if (seenSlugs.has(slug)) {
|
|
2772
|
-
throw new Error(`Duplicate builtin skill slug across sources: ${slug}`);
|
|
2773
|
-
}
|
|
2774
|
-
seenSlugs.add(slug);
|
|
2775
|
-
const config = source.buildConfig(slug);
|
|
2776
|
-
entries.push({
|
|
2777
|
-
slug,
|
|
2778
|
-
skillId: source.buildSkillId(slug),
|
|
2779
|
-
title: config.name || slug,
|
|
2780
|
-
config,
|
|
2781
|
-
content: source.buildContent(slug),
|
|
2782
|
-
buildPageKey: (userId) => source.buildPageKey(userId, slug)
|
|
2783
|
-
});
|
|
2784
|
-
}
|
|
2785
|
-
}
|
|
2786
|
-
return entries;
|
|
2787
|
-
};
|
|
2788
|
-
var REGISTRY = buildRegistry();
|
|
2789
|
-
var BY_SLUG = new Map(REGISTRY.map((entry) => [entry.slug, entry]));
|
|
2790
|
-
var BY_SKILL_ID = new Map(REGISTRY.map((entry) => [entry.skillId, entry]));
|
|
2791
|
-
var BY_LOWER_NAME = new Map(
|
|
2792
|
-
REGISTRY.map((entry) => [entry.title.trim().toLowerCase(), entry])
|
|
2793
|
-
);
|
|
2794
|
-
var listBuiltinSkills = () => REGISTRY;
|
|
2795
|
-
var resolveBuiltinSkillEntry = (identifier) => {
|
|
2796
|
-
const raw = typeof identifier === "string" ? identifier.trim() : "";
|
|
2797
|
-
if (!raw) return null;
|
|
2798
|
-
const bySlug = BY_SLUG.get(raw);
|
|
2799
|
-
if (bySlug) return bySlug;
|
|
2800
|
-
const byId = BY_SKILL_ID.get(raw);
|
|
2801
|
-
if (byId) return byId;
|
|
2802
|
-
if (raw.startsWith("page-")) {
|
|
2803
|
-
for (const entry of REGISTRY) {
|
|
2804
|
-
if (raw.endsWith(`-${entry.skillId}`)) return entry;
|
|
2805
|
-
}
|
|
2806
|
-
}
|
|
2807
|
-
return null;
|
|
2808
|
-
};
|
|
2809
|
-
var resolveBuiltinSkillByName = (identifier) => {
|
|
2810
|
-
const raw = typeof identifier === "string" ? identifier.trim() : "";
|
|
2811
|
-
if (!raw) return null;
|
|
2812
|
-
return resolveBuiltinSkillEntry(raw) ?? BY_LOWER_NAME.get(raw.toLowerCase()) ?? null;
|
|
2813
|
-
};
|
|
2814
|
-
var resolveBuiltinSkillPage = (identifier) => {
|
|
2815
|
-
const entry = resolveBuiltinSkillEntry(identifier);
|
|
2816
|
-
if (!entry) return null;
|
|
2817
|
-
const raw = typeof identifier === "string" ? identifier.trim() : entry.slug;
|
|
2818
|
-
return {
|
|
2819
|
-
dbKey: raw || entry.slug,
|
|
2820
|
-
title: entry.title,
|
|
2821
|
-
content: entry.content,
|
|
2822
|
-
meta: { kind: "skill", skillConfig: entry.config },
|
|
2823
|
-
...entry.config.toolNames?.length ? { tools: [...entry.config.toolNames] } : {}
|
|
2824
|
-
};
|
|
2825
|
-
};
|
|
2826
|
-
var CAPABILITIES = CAPABILITY_PACKS.map(
|
|
2827
|
-
(pack) => ({
|
|
2828
|
-
kind: "capability",
|
|
2829
|
-
slug: pack.id,
|
|
2830
|
-
title: pack.label,
|
|
2831
|
-
description: pack.description,
|
|
2832
|
-
toolNames: pack.tools,
|
|
2833
|
-
...pack.promptPatch ? { promptPatch: pack.promptPatch } : {},
|
|
2834
|
-
icon: pack.icon,
|
|
2835
|
-
defaultEnabled: pack.defaultEnabled
|
|
2836
|
-
})
|
|
2837
|
-
);
|
|
2838
|
-
var CAPABILITY_BY_SLUG = new Map(CAPABILITIES.map((c) => [c.slug, c]));
|
|
2839
|
-
var resolveBuiltinCapability = (slug) => {
|
|
2840
|
-
const raw = typeof slug === "string" ? slug.trim() : "";
|
|
2841
|
-
return raw ? CAPABILITY_BY_SLUG.get(raw) ?? null : null;
|
|
2842
|
-
};
|
|
2843
|
-
|
|
2844
2193
|
// packages/ai/tools/agentSkillConfig.ts
|
|
2845
2194
|
var MODES = [
|
|
2846
2195
|
"required",
|
|
2847
2196
|
"recommended",
|
|
2848
2197
|
"disabled"
|
|
2849
2198
|
];
|
|
2199
|
+
var DEFAULT_RECOMMENDED_SKILL_SLUGS = [
|
|
2200
|
+
"worktree-isolation",
|
|
2201
|
+
"systematic-investigation",
|
|
2202
|
+
"show-me"
|
|
2203
|
+
];
|
|
2850
2204
|
var asMode = (value) => typeof value === "string" && MODES.includes(value) ? value : null;
|
|
2851
2205
|
var resolveAgentSkillConfig = (source) => {
|
|
2852
2206
|
const out = {};
|
|
@@ -2871,11 +2225,21 @@ var resolveAgentRequiredPackIds = (source) => {
|
|
|
2871
2225
|
var resolveAgentRecommendedSkillNames = (source, lookup) => {
|
|
2872
2226
|
const config = resolveAgentSkillConfig(source);
|
|
2873
2227
|
const resolve = lookup ?? defaultSkillTitleLookup;
|
|
2228
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2874
2229
|
const out = [];
|
|
2230
|
+
const push = (slug) => {
|
|
2231
|
+
const title = resolve(slug)?.title || slug;
|
|
2232
|
+
if (seen.has(title)) return;
|
|
2233
|
+
seen.add(title);
|
|
2234
|
+
out.push(title);
|
|
2235
|
+
};
|
|
2875
2236
|
for (const slug of Object.keys(config)) {
|
|
2876
2237
|
if (config[slug] !== "recommended") continue;
|
|
2877
|
-
|
|
2878
|
-
|
|
2238
|
+
push(slug);
|
|
2239
|
+
}
|
|
2240
|
+
for (const slug of DEFAULT_RECOMMENDED_SKILL_SLUGS) {
|
|
2241
|
+
if (Object.hasOwn(config, slug)) continue;
|
|
2242
|
+
push(slug);
|
|
2879
2243
|
}
|
|
2880
2244
|
return out;
|
|
2881
2245
|
};
|
|
@@ -4124,92 +3488,6 @@ async function listUserSpacesFunc(args, thunkApi, context) {
|
|
|
4124
3488
|
}
|
|
4125
3489
|
}
|
|
4126
3490
|
|
|
4127
|
-
// packages/ai/agent/agentDiscovery.ts
|
|
4128
|
-
function isPreferredAgent(agent) {
|
|
4129
|
-
return agent.isFavorite === true || agent.isOwned === true || agent.isOAuth === true || agent.billingSource === "user_subscription" || agent.billingSource === "user_api" || agent.billingSource === "local";
|
|
4130
|
-
}
|
|
4131
|
-
function isPublicDiscoveryAgent(agent) {
|
|
4132
|
-
return agent.isPublic === true && !isPreferredAgent(agent);
|
|
4133
|
-
}
|
|
4134
|
-
function resolveDiscoveryScope(args) {
|
|
4135
|
-
const rawScope = typeof args?.scope === "string" ? args.scope.trim().toLowerCase() : void 0;
|
|
4136
|
-
const hasScope = rawScope !== void 0 && rawScope !== "";
|
|
4137
|
-
const hasPublicOnly = typeof args?.publicOnly === "boolean";
|
|
4138
|
-
const publicOnly = args?.publicOnly === true;
|
|
4139
|
-
if (hasScope) {
|
|
4140
|
-
if (rawScope !== "preferred" && rawScope !== "public" && rawScope !== "all") {
|
|
4141
|
-
throw new Error(`Invalid scope '${args?.scope}': must be 'preferred', 'public', or 'all'.`);
|
|
4142
|
-
}
|
|
4143
|
-
const scope = rawScope;
|
|
4144
|
-
if (hasPublicOnly) {
|
|
4145
|
-
if (publicOnly && scope !== "public") {
|
|
4146
|
-
throw new Error(
|
|
4147
|
-
`Conflicting arguments: scope='${args?.scope}' conflicts with publicOnly=true.`
|
|
4148
|
-
);
|
|
4149
|
-
}
|
|
4150
|
-
if (!publicOnly && scope === "public") {
|
|
4151
|
-
throw new Error(
|
|
4152
|
-
`Conflicting arguments: scope='${args?.scope}' conflicts with publicOnly=false.`
|
|
4153
|
-
);
|
|
4154
|
-
}
|
|
4155
|
-
}
|
|
4156
|
-
return scope;
|
|
4157
|
-
}
|
|
4158
|
-
if (hasPublicOnly && publicOnly) {
|
|
4159
|
-
return "public";
|
|
4160
|
-
}
|
|
4161
|
-
return "preferred";
|
|
4162
|
-
}
|
|
4163
|
-
function agentIdentityKeys(agent) {
|
|
4164
|
-
return [agent.agentKey, agent.publicKey, agent.id].filter(
|
|
4165
|
-
(key) => typeof key === "string" && key.length > 0
|
|
4166
|
-
);
|
|
4167
|
-
}
|
|
4168
|
-
function deduplicateAgentSummaries(agents) {
|
|
4169
|
-
const byIdentity = /* @__PURE__ */ new Map();
|
|
4170
|
-
for (const agent of agents) {
|
|
4171
|
-
const keys = agentIdentityKeys(agent);
|
|
4172
|
-
const existing = keys.map((key) => byIdentity.get(key)).find(Boolean);
|
|
4173
|
-
if (!existing) {
|
|
4174
|
-
for (const key of keys) byIdentity.set(key, agent);
|
|
4175
|
-
continue;
|
|
4176
|
-
}
|
|
4177
|
-
const winner = isPreferredAgent(agent) && !isPreferredAgent(existing) ? agent : existing;
|
|
4178
|
-
for (const key of /* @__PURE__ */ new Set([...agentIdentityKeys(existing), ...keys])) byIdentity.set(key, winner);
|
|
4179
|
-
}
|
|
4180
|
-
return [...new Set(byIdentity.values())];
|
|
4181
|
-
}
|
|
4182
|
-
function filterAgentsByScope(agents, scope) {
|
|
4183
|
-
const unique = deduplicateAgentSummaries(agents);
|
|
4184
|
-
if (scope === "preferred") return unique.filter((agent) => isPreferredAgent(agent));
|
|
4185
|
-
if (scope === "public") return unique.filter((agent) => isPublicDiscoveryAgent(agent));
|
|
4186
|
-
return unique.filter((agent) => isPreferredAgent(agent) || agent.isPublic === true);
|
|
4187
|
-
}
|
|
4188
|
-
function buildAgentDiscoveryResult(options) {
|
|
4189
|
-
const scope = resolveDiscoveryScope({
|
|
4190
|
-
scope: options.scope,
|
|
4191
|
-
publicOnly: options.publicOnly
|
|
4192
|
-
});
|
|
4193
|
-
const now = options.now ?? Date.now();
|
|
4194
|
-
let scopedAgents = filterAgentsByScope(options.agents, scope);
|
|
4195
|
-
const unavailableList = scopedAgents.filter((a) => isAgentUnavailableNow(a, now));
|
|
4196
|
-
const unavailableCount = unavailableList.length;
|
|
4197
|
-
const unavailableAgents = sortSafeAgentSummaries(unavailableList).map(toUnavailableAgentSummary);
|
|
4198
|
-
const credentialGroups = summarizeCredentialGroups(scopedAgents, now);
|
|
4199
|
-
if (options.showUnavailable !== true) {
|
|
4200
|
-
scopedAgents = scopedAgents.filter((a) => !isAgentUnavailableNow(a, now));
|
|
4201
|
-
}
|
|
4202
|
-
const sortedAgents = sortSafeAgentSummaries(scopedAgents);
|
|
4203
|
-
const projectedAgents = options.verbose === true ? sortedAgents.map(omitNullishAgentSummaryFields) : sortedAgents.map(toCompactAgentSummary);
|
|
4204
|
-
return {
|
|
4205
|
-
total: projectedAgents.length,
|
|
4206
|
-
unavailableCount,
|
|
4207
|
-
unavailableAgents,
|
|
4208
|
-
credentialGroups,
|
|
4209
|
-
agents: projectedAgents
|
|
4210
|
-
};
|
|
4211
|
-
}
|
|
4212
|
-
|
|
4213
3491
|
// packages/ai/agent/publicAgentDiscovery.ts
|
|
4214
3492
|
async function fetchPublicAgentsForDiscovery(args) {
|
|
4215
3493
|
const fetchImpl = args.fetchImpl ?? fetch;
|
|
@@ -4672,7 +3950,7 @@ async function deleteDialogsFunc(args, thunkApi) {
|
|
|
4672
3950
|
const deletedDialogIds = [];
|
|
4673
3951
|
const deletedDialogKeys = [];
|
|
4674
3952
|
const failures = [];
|
|
4675
|
-
const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-
|
|
3953
|
+
const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-IVTWLCE2.js");
|
|
4676
3954
|
for (const target of targets) {
|
|
4677
3955
|
try {
|
|
4678
3956
|
await thunkApi.dispatch(deleteDialog2(target.dbKey)).unwrap();
|
|
@@ -4768,6 +4046,10 @@ var listAgentsFunctionSchema = {
|
|
|
4768
4046
|
},
|
|
4769
4047
|
publicOnly: { type: "boolean", description: "Deprecated compatibility alias for scope='public'." },
|
|
4770
4048
|
showUnavailable: { type: "boolean", description: "Include agents currently rate-limited (429). Default false." },
|
|
4049
|
+
query: {
|
|
4050
|
+
type: "string",
|
|
4051
|
+
description: "Optional case-insensitive search substring matching agent name, model, provider, handle, or agentKey. Use to locate specific candidates like 'opus', 'devin', or 'claude'."
|
|
4052
|
+
},
|
|
4771
4053
|
verbose: { type: "boolean", description: "Return the full safe-summary field set (prices, introduction, modelAbility, timestamps) for troubleshooting. Default false returns the compact agent-selection projection." }
|
|
4772
4054
|
}
|
|
4773
4055
|
}
|
|
@@ -4801,6 +4083,8 @@ async function listAgentsFunc(args, thunkApi) {
|
|
|
4801
4083
|
if (favKey.startsWith("agent-pub-")) {
|
|
4802
4084
|
favRecord.publicRecordExists = true;
|
|
4803
4085
|
favRecord.publicKey = favKey;
|
|
4086
|
+
} else {
|
|
4087
|
+
favRecord.verifiedAgentKey = favKey;
|
|
4804
4088
|
}
|
|
4805
4089
|
const key = favRecord?.dbKey || favRecord?.id || favKey;
|
|
4806
4090
|
recordsMap.set(key, favRecord);
|
|
@@ -4818,6 +4102,7 @@ async function listAgentsFunc(args, thunkApi) {
|
|
|
4818
4102
|
const discovery = buildAgentDiscoveryResult({
|
|
4819
4103
|
agents,
|
|
4820
4104
|
scope: args?.scope,
|
|
4105
|
+
query: args?.query,
|
|
4821
4106
|
publicOnly: args?.publicOnly,
|
|
4822
4107
|
showUnavailable: args?.showUnavailable,
|
|
4823
4108
|
verbose: args?.verbose
|
|
@@ -4979,7 +4264,7 @@ var readSkillDocFunctionSchema = {
|
|
|
4979
4264
|
}
|
|
4980
4265
|
};
|
|
4981
4266
|
async function readSkillDocFunc(args, thunkApi) {
|
|
4982
|
-
const { buildReadDocResult } = await import("./readDocTool-
|
|
4267
|
+
const { buildReadDocResult } = await import("./readDocTool-5USN4A6V.js");
|
|
4983
4268
|
const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
|
|
4984
4269
|
if (typeof id !== "string" || !id.trim()) {
|
|
4985
4270
|
throw new Error("readSkillDoc requires id or doc.");
|
|
@@ -5782,7 +5067,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
|
|
|
5782
5067
|
const spaceKey = createSpaceKey.space(spaceId);
|
|
5783
5068
|
const readSpace = async (dbKey) => {
|
|
5784
5069
|
try {
|
|
5785
|
-
const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-
|
|
5070
|
+
const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-A6C6H32X.js");
|
|
5786
5071
|
if (fresh) {
|
|
5787
5072
|
return await dispatch(readAndWait2(dbKey)).unwrap();
|
|
5788
5073
|
}
|
|
@@ -6423,6 +5708,23 @@ var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
6423
5708
|
var normalizeContains = (value) => asTrimmedLowercaseString(value);
|
|
6424
5709
|
var participantList = (emails) => Array.isArray(emails) ? asTrimmedNonEmptyStringArray(emails).map((email) => ({ email })) : [];
|
|
6425
5710
|
var emailText = (email) => [email?.subject, email?.from?.email, email?.from?.name, email?.text, email?.html].filter((value) => typeof value === "string").join("\n");
|
|
5711
|
+
var emailAttachments = (email) => Array.isArray(email?.attachments) ? email.attachments : [];
|
|
5712
|
+
var attachmentPreview = (attachment) => {
|
|
5713
|
+
const name = asOptionalTrimmedString(attachment?.filename) ?? "attachment";
|
|
5714
|
+
const contentType = asOptionalTrimmedString(attachment?.contentType) ?? "application/octet-stream";
|
|
5715
|
+
const fileId = asOptionalTrimmedString(attachment?.fileId) ?? "unknown-file";
|
|
5716
|
+
const size = Number.isFinite(Number(attachment?.size)) ? ` | ${Number(attachment.size)} bytes` : "";
|
|
5717
|
+
return `- ${name} | ${contentType}${size} | fileId: ${fileId}`;
|
|
5718
|
+
};
|
|
5719
|
+
var attachmentListPreview = (email) => {
|
|
5720
|
+
const attachments = emailAttachments(email);
|
|
5721
|
+
if (attachments.length === 0) return "";
|
|
5722
|
+
return [
|
|
5723
|
+
`\u9644\u4EF6\uFF08${attachments.length}\uFF09\uFF1A`,
|
|
5724
|
+
...attachments.map(attachmentPreview),
|
|
5725
|
+
"\u8BFB\u53D6\u9644\u4EF6\uFF1A\u518D\u6B21\u8C03\u7528 email_read\uFF0C\u4F20\u5165\u5F53\u524D dbKey \u548C attachmentFileId\u3002"
|
|
5726
|
+
].join("\n");
|
|
5727
|
+
};
|
|
6426
5728
|
var matchesWaitFilters = (email, args) => {
|
|
6427
5729
|
const subjectContains = normalizeContains(args.subjectContains);
|
|
6428
5730
|
const fromContains = normalizeContains(args.fromContains);
|
|
@@ -6448,6 +5750,58 @@ var stripHtml = (html) => typeof html === "string" ? compactWhitespace(
|
|
|
6448
5750
|
html.replace(/<a\b[^>]*href=["']([^"']+)["'][^>]*>/gi, " $1 ").replace(/<[^>]+>/g, " ")
|
|
6449
5751
|
) : "";
|
|
6450
5752
|
var cleanUrl = (url) => url.replace(/[),.;\]}>]+$/g, "");
|
|
5753
|
+
var extractPdfText = async (blob) => {
|
|
5754
|
+
const pdfjsLib = await import("./pdf-U6KSUEZZ.js");
|
|
5755
|
+
if (typeof window !== "undefined" && pdfjsLib.GlobalWorkerOptions && !pdfjsLib.GlobalWorkerOptions.workerSrc) {
|
|
5756
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = "/public/assets/pdf.worker.mjs";
|
|
5757
|
+
}
|
|
5758
|
+
const data = await blob.arrayBuffer();
|
|
5759
|
+
const pdf = await pdfjsLib.getDocument({ data }).promise;
|
|
5760
|
+
const pages = [];
|
|
5761
|
+
for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber += 1) {
|
|
5762
|
+
const page = await pdf.getPage(pageNumber);
|
|
5763
|
+
const textContent = await page.getTextContent();
|
|
5764
|
+
const text = textContent.items.map((item) => typeof item?.str === "string" ? item.str : "").filter(Boolean).join(" ").trim();
|
|
5765
|
+
if (text) pages.push(`--- page ${pageNumber} ---
|
|
5766
|
+
${text}`);
|
|
5767
|
+
}
|
|
5768
|
+
return pages.join("\n\n").trim();
|
|
5769
|
+
};
|
|
5770
|
+
var readEmailAttachment = async (email, fileId, maxChars, thunkApi) => {
|
|
5771
|
+
const attachment = emailAttachments(email).find(
|
|
5772
|
+
(item) => asOptionalTrimmedString(item?.fileId) === fileId
|
|
5773
|
+
);
|
|
5774
|
+
if (!attachment) {
|
|
5775
|
+
throw new Error(`\u9644\u4EF6 ${fileId} \u4E0D\u5C5E\u4E8E\u90AE\u4EF6 ${email?.dbKey || "unknown"}`);
|
|
5776
|
+
}
|
|
5777
|
+
const result = await readFileContentAction({ fileId }, thunkApi);
|
|
5778
|
+
const blob = result.blob;
|
|
5779
|
+
const contentType = (asOptionalTrimmedString(attachment?.contentType) || asOptionalTrimmedString(blob.type) || "application/octet-stream").toLowerCase();
|
|
5780
|
+
const filename = asOptionalTrimmedString(attachment?.filename) ?? fileId;
|
|
5781
|
+
let content;
|
|
5782
|
+
if (contentType === "application/pdf" || filename.toLowerCase().endsWith(".pdf")) {
|
|
5783
|
+
content = await extractPdfText(blob);
|
|
5784
|
+
if (!content) {
|
|
5785
|
+
throw new Error(
|
|
5786
|
+
`PDF \u9644\u4EF6 ${filename} \u6CA1\u6709\u53EF\u63D0\u53D6\u7684\u6587\u5B57\u5C42\uFF0C\u53EF\u80FD\u662F\u626B\u63CF\u7248\uFF1B\u8BF7\u6539\u7528 OCR \u80FD\u529B\u5904\u7406\u8BE5 fileId\u3002`
|
|
5787
|
+
);
|
|
5788
|
+
}
|
|
5789
|
+
} else if (contentType.startsWith("text/") || contentType.includes("json") || contentType.includes("csv") || contentType.includes("xml") || /\.(txt|md|csv|json|xml|html?|log)$/i.test(filename)) {
|
|
5790
|
+
content = await blob.text();
|
|
5791
|
+
} else {
|
|
5792
|
+
throw new Error(
|
|
5793
|
+
`\u9644\u4EF6 ${filename} (${contentType}) \u6682\u4E0D\u652F\u6301\u76F4\u63A5\u8F6C\u6587\u672C\uFF1BfileId=${fileId} \u4ECD\u53EF\u4EA4\u7ED9\u5BF9\u5E94\u7684\u6587\u4EF6/\u5A92\u4F53\u5904\u7406\u80FD\u529B\u3002`
|
|
5794
|
+
);
|
|
5795
|
+
}
|
|
5796
|
+
const truncated = content.length > maxChars;
|
|
5797
|
+
return {
|
|
5798
|
+
attachment,
|
|
5799
|
+
content: truncated ? content.slice(0, maxChars) : content,
|
|
5800
|
+
totalChars: content.length,
|
|
5801
|
+
truncated,
|
|
5802
|
+
source: result.source
|
|
5803
|
+
};
|
|
5804
|
+
};
|
|
6451
5805
|
var extractEmailVerificationArtifacts = ({
|
|
6452
5806
|
text,
|
|
6453
5807
|
html
|
|
@@ -6515,13 +5869,25 @@ var emailSearchFunctionSchema = {
|
|
|
6515
5869
|
};
|
|
6516
5870
|
var emailReadFunctionSchema = {
|
|
6517
5871
|
name: "email_read",
|
|
6518
|
-
description:
|
|
5872
|
+
description: [
|
|
5873
|
+
"\u8BFB\u53D6\u4E00\u5C01\u90AE\u4EF6\u7684\u5B8C\u6574\u5185\u5BB9\u3002\u9700\u8981 email:read \u6743\u9650\u3002",
|
|
5874
|
+
"\u90AE\u4EF6\u6709\u9644\u4EF6\u65F6\u4F1A\u5217\u51FA\u9644\u4EF6 fileId\u3002\u8981\u8BFB\u53D6 PDF/\u6587\u672C/CSV/JSON \u9644\u4EF6\uFF0C\u518D\u4F20 attachmentFileId\uFF1B\u5DE5\u5177\u4F1A\u5148\u6821\u9A8C\u8BE5\u6587\u4EF6\u786E\u5B9E\u5C5E\u4E8E\u8FD9\u5C01\u90AE\u4EF6\u3002",
|
|
5875
|
+
"PDF \u4F18\u5148\u76F4\u63A5\u63D0\u53D6\u6587\u5B57\u5C42\uFF1B\u626B\u63CF\u7248 PDF \u4F1A\u63D0\u793A\u6539\u7528 OCR\u3002"
|
|
5876
|
+
].join("\n"),
|
|
6519
5877
|
parameters: {
|
|
6520
5878
|
type: "object",
|
|
6521
5879
|
properties: {
|
|
6522
5880
|
dbKey: {
|
|
6523
5881
|
type: "string",
|
|
6524
5882
|
description: "\u90AE\u4EF6\u8BB0\u5F55\u7684 dbKey\uFF0C\u4F8B\u5982 email-userId-emailId\u3002"
|
|
5883
|
+
},
|
|
5884
|
+
attachmentFileId: {
|
|
5885
|
+
type: "string",
|
|
5886
|
+
description: "\u53EF\u9009\u3002\u5F53\u524D\u90AE\u4EF6 attachments[] \u4E2D\u7684 fileId\uFF1B\u63D0\u4F9B\u540E\u8BFB\u53D6\u8BE5\u9644\u4EF6\u6587\u672C\u3002"
|
|
5887
|
+
},
|
|
5888
|
+
maxChars: {
|
|
5889
|
+
type: "number",
|
|
5890
|
+
description: "\u8BFB\u53D6\u9644\u4EF6\u65F6\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u5B57\u7B26\uFF0C\u9ED8\u8BA4 12000\uFF0C\u8303\u56F4 1000-50000\u3002"
|
|
6525
5891
|
}
|
|
6526
5892
|
},
|
|
6527
5893
|
required: ["dbKey"]
|
|
@@ -6800,15 +6166,47 @@ ${artifacts.verificationLinks.slice(1).join("\n")}` : ""
|
|
|
6800
6166
|
};
|
|
6801
6167
|
}
|
|
6802
6168
|
async function emailReadFunc(args, thunkApi) {
|
|
6803
|
-
const email = await callToolApi(thunkApi, "/rpc/getEmail", args, {
|
|
6169
|
+
const email = await callToolApi(thunkApi, "/rpc/getEmail", { dbKey: args.dbKey }, {
|
|
6804
6170
|
withAuth: true
|
|
6805
6171
|
});
|
|
6172
|
+
const attachmentFileId = asOptionalTrimmedString(args.attachmentFileId);
|
|
6173
|
+
if (attachmentFileId) {
|
|
6174
|
+
const maxChars = clampInteger(args.maxChars, 12e3, 1e3, 5e4);
|
|
6175
|
+
const attachmentResult = await readEmailAttachment(
|
|
6176
|
+
email,
|
|
6177
|
+
attachmentFileId,
|
|
6178
|
+
maxChars,
|
|
6179
|
+
thunkApi
|
|
6180
|
+
);
|
|
6181
|
+
const filename = asOptionalTrimmedString(attachmentResult.attachment?.filename) ?? attachmentFileId;
|
|
6182
|
+
return {
|
|
6183
|
+
rawData: {
|
|
6184
|
+
emailDbKey: email?.dbKey,
|
|
6185
|
+
attachment: attachmentResult.attachment,
|
|
6186
|
+
content: attachmentResult.content,
|
|
6187
|
+
totalChars: attachmentResult.totalChars,
|
|
6188
|
+
truncated: attachmentResult.truncated,
|
|
6189
|
+
source: attachmentResult.source
|
|
6190
|
+
},
|
|
6191
|
+
displayData: [
|
|
6192
|
+
`\u9644\u4EF6\uFF1A${filename} | fileId: ${attachmentFileId}`,
|
|
6193
|
+
attachmentResult.truncated ? `\u5185\u5BB9\u5DF2\u622A\u65AD\uFF1A\u8FD4\u56DE ${attachmentResult.content.length}/${attachmentResult.totalChars} \u5B57\u7B26\u3002` : `\u5185\u5BB9\u5B57\u7B26\u6570\uFF1A${attachmentResult.totalChars}`,
|
|
6194
|
+
"",
|
|
6195
|
+
attachmentResult.content
|
|
6196
|
+
].join("\n")
|
|
6197
|
+
};
|
|
6198
|
+
}
|
|
6806
6199
|
const body = asOptionalTrimmedString(email?.text) ?? asOptionalTrimmedString(email?.html) ?? "";
|
|
6200
|
+
const attachments = attachmentListPreview(email);
|
|
6807
6201
|
return {
|
|
6808
6202
|
rawData: email,
|
|
6809
|
-
displayData:
|
|
6810
|
-
|
|
6811
|
-
|
|
6203
|
+
displayData: [
|
|
6204
|
+
emailPreview(email),
|
|
6205
|
+
"",
|
|
6206
|
+
body.slice(0, 4e3),
|
|
6207
|
+
attachments ? `
|
|
6208
|
+
${attachments}` : ""
|
|
6209
|
+
].filter(Boolean).join("\n")
|
|
6812
6210
|
};
|
|
6813
6211
|
}
|
|
6814
6212
|
async function emailUpdateTagsFunc(args, thunkApi) {
|
|
@@ -10847,7 +10245,7 @@ var cloudflareCrawlStatusFunctionSchema = {
|
|
|
10847
10245
|
async function cloudflareCrawlStatusFunc(args, thunkApi) {
|
|
10848
10246
|
const { jobId, limit, status, cursor } = args;
|
|
10849
10247
|
if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
|
|
10850
|
-
const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-
|
|
10248
|
+
const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-G3M73RTB.js");
|
|
10851
10249
|
const { baseUrl, token } = getToolRequestContext2(thunkApi);
|
|
10852
10250
|
const params = new URLSearchParams();
|
|
10853
10251
|
if (limit !== void 0) params.set("limit", String(limit));
|
|
@@ -11625,7 +11023,7 @@ var selectUserIdFromState = (state2) => {
|
|
|
11625
11023
|
var selectCurrentServerFromState = (state2) => typeof state2?.settings?.currentServer === "string" ? state2.settings.currentServer : null;
|
|
11626
11024
|
async function addImageContentToSpace(input) {
|
|
11627
11025
|
const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
|
|
11628
|
-
const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-
|
|
11026
|
+
const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-MB2HHMDZ.js")).addContentAction;
|
|
11629
11027
|
await addContentAction2(
|
|
11630
11028
|
{
|
|
11631
11029
|
spaceId: input.spaceId,
|
|
@@ -13752,7 +13150,64 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
|
|
|
13752
13150
|
throw lastError ?? new Error("\u4E8B\u4EF6\u6D41\u91CD\u8FDE\u5931\u8D25");
|
|
13753
13151
|
});
|
|
13754
13152
|
|
|
13153
|
+
// packages/ai/tools/agent/credentialFanoutGuard.ts
|
|
13154
|
+
var UNKNOWN_CREDENTIAL_GROUP = "unknown";
|
|
13155
|
+
function normalizeCredentialGroupValue(group) {
|
|
13156
|
+
if (typeof group !== "string") return UNKNOWN_CREDENTIAL_GROUP;
|
|
13157
|
+
const trimmed2 = group.trim();
|
|
13158
|
+
if (!trimmed2) return UNKNOWN_CREDENTIAL_GROUP;
|
|
13159
|
+
if (trimmed2.toLowerCase() === UNKNOWN_CREDENTIAL_GROUP) {
|
|
13160
|
+
return UNKNOWN_CREDENTIAL_GROUP;
|
|
13161
|
+
}
|
|
13162
|
+
return trimmed2;
|
|
13163
|
+
}
|
|
13164
|
+
var describeEntry = (entry) => entry.agentKey ?? entry.runId ?? "(unknown run)";
|
|
13165
|
+
function checkCredentialFanout(args) {
|
|
13166
|
+
const candidateGroup = normalizeCredentialGroupValue(
|
|
13167
|
+
args.candidate.credentialGroup
|
|
13168
|
+
);
|
|
13169
|
+
for (const entry of args.active) {
|
|
13170
|
+
if (entry.runId && args.candidate.runId && entry.runId === args.candidate.runId) {
|
|
13171
|
+
continue;
|
|
13172
|
+
}
|
|
13173
|
+
const entryGroup = normalizeCredentialGroupValue(entry.credentialGroup);
|
|
13174
|
+
if (candidateGroup === UNKNOWN_CREDENTIAL_GROUP || entryGroup === UNKNOWN_CREDENTIAL_GROUP) {
|
|
13175
|
+
if (args.allowUnknownCredential === true) continue;
|
|
13176
|
+
const side = candidateGroup === UNKNOWN_CREDENTIAL_GROUP ? "candidate" : "active";
|
|
13177
|
+
return {
|
|
13178
|
+
allowed: false,
|
|
13179
|
+
reason: "unknown_credential_group",
|
|
13180
|
+
conflict: entry,
|
|
13181
|
+
message: `\u62D2\u7EDD\u5E76\u53D1\u6D3E\u53D1\uFF1A${side === "candidate" ? `\u5019\u9009 agent ${describeEntry(args.candidate)} \u7684 credentialGroup \u672A\u77E5` : `\u5DF2\u6D3B\u8DC3 run ${describeEntry(entry)} \u7684 credentialGroup \u672A\u77E5`}\uFF0C\u65E0\u6CD5\u8BC1\u660E\u5B83\u4E0E\u540C\u6279\u5E76\u53D1 run \u4E0D\u5171\u7528\u4E0A\u6E38\u51ED\u8BC1\u3002\u8BF7\u6539\u4E3A\u4E32\u884C\u6D3E\u53D1\u3001\u6362\u7528 credentialGroup \u660E\u786E\u7684 agent\uFF0C\u6216\u5728\u786E\u8BA4\u98CE\u9669\u540E\u663E\u5F0F\u4F20 allowUnknownCredential: true \u5F3A\u5236\u653E\u884C\u3002`
|
|
13182
|
+
};
|
|
13183
|
+
}
|
|
13184
|
+
if (candidateGroup === entryGroup) {
|
|
13185
|
+
if (args.allowCredentialConcurrency === true) {
|
|
13186
|
+
continue;
|
|
13187
|
+
}
|
|
13188
|
+
return {
|
|
13189
|
+
allowed: false,
|
|
13190
|
+
reason: "credential_group_conflict",
|
|
13191
|
+
conflict: entry,
|
|
13192
|
+
message: `\u62D2\u7EDD\u5E76\u53D1\u6D3E\u53D1\uFF1A\u5019\u9009 agent ${describeEntry(args.candidate)} \u4E0E\u5DF2\u6D3B\u8DC3 run ${describeEntry(entry)} \u540C\u5C5E credentialGroup "${candidateGroup}"\uFF0C\u540C\u4E00\u51ED\u8BC1\u4E0A\u7981\u6B62\u5E76\u53D1\u6247\u51FA\u3002\u8BF7\u4E32\u884C\u6D3E\u53D1\u3001\u6362\u7528\u5176\u4ED6 credentialGroup \u7684 agent\uFF0C\u6216\u4F20 allowCredentialConcurrency: true \u5141\u8BB8\u5E76\u53D1\u3002`
|
|
13193
|
+
};
|
|
13194
|
+
}
|
|
13195
|
+
}
|
|
13196
|
+
return { allowed: true };
|
|
13197
|
+
}
|
|
13198
|
+
|
|
13755
13199
|
// packages/ai/tools/agent/startAgentRunTool.ts
|
|
13200
|
+
var BATCH_FANOUT_ENTRY_TTL_MS = 30 * 60 * 1e3;
|
|
13201
|
+
var batchFanoutRegistry = /* @__PURE__ */ new Map();
|
|
13202
|
+
function pruneBatchFanoutRegistry(nowMs) {
|
|
13203
|
+
for (const [batchId, entries] of batchFanoutRegistry) {
|
|
13204
|
+
const alive = entries.filter(
|
|
13205
|
+
(e) => nowMs - e.startedAtMs < BATCH_FANOUT_ENTRY_TTL_MS
|
|
13206
|
+
);
|
|
13207
|
+
if (alive.length === 0) batchFanoutRegistry.delete(batchId);
|
|
13208
|
+
else batchFanoutRegistry.set(batchId, alive);
|
|
13209
|
+
}
|
|
13210
|
+
}
|
|
13756
13211
|
function buildStartAgentRunFunctionSchema(opts) {
|
|
13757
13212
|
const supportsWait = opts?.supportsWait !== false;
|
|
13758
13213
|
const wakeEnabled = opts?.wakeEnabled === true;
|
|
@@ -13784,7 +13239,21 @@ function buildStartAgentRunFunctionSchema(opts) {
|
|
|
13784
13239
|
// 与 server 透传保持不动,探活/烟测仍走 CLI 侧。
|
|
13785
13240
|
batchId: {
|
|
13786
13241
|
type: "string",
|
|
13787
|
-
description: "\u53EF\u9009\u3002\u6279\u6B21 id\uFF0C\u7528\u4E8E\u628A\u591A\u4E2A\u5E76\u884C run \u5F52\u4E3A\u4E00\u7EC4\uFF0C\u4FBF\u4E8E\u540E\u7EED controlAgentRun(list, batchId=...) \u6309\u6279\u67E5\u8BE2\u3002\u672A\u4F20\u65F6\u81EA\u52A8\u751F\u6210\u4E00\u4E2A\u5E76\u5728\u8FD4\u56DE\u503C\u4E2D\u5E26\u56DE\uFF0C\u8C03\u7528\u65B9\u65E0\u9700\u5148\u521B\u5EFA\u3002"
|
|
13242
|
+
description: "\u53EF\u9009\u3002\u6279\u6B21 id\uFF0C\u7528\u4E8E\u628A\u591A\u4E2A\u5E76\u884C run \u5F52\u4E3A\u4E00\u7EC4\uFF0C\u4FBF\u4E8E\u540E\u7EED controlAgentRun(list, batchId=...) \u6309\u6279\u67E5\u8BE2\u3002\u672A\u4F20\u65F6\u81EA\u52A8\u751F\u6210\u4E00\u4E2A\u5E76\u5728\u8FD4\u56DE\u503C\u4E2D\u5E26\u56DE\uFF0C\u8C03\u7528\u65B9\u65E0\u9700\u5148\u521B\u5EFA\u3002\u540C\u4E00 batchId \u5185\u7684\u5E76\u53D1\u6D3E\u53D1\u4F1A\u505A\u51ED\u8BC1\u7EC4\u9694\u79BB\u68C0\u67E5\uFF1AcredentialGroup \u76F8\u540C\u6216\u672A\u77E5\u7684\u5E76\u53D1 run \u4F1A\u88AB\u62D2\u7EDD\u3002"
|
|
13243
|
+
},
|
|
13244
|
+
credentialGroup: {
|
|
13245
|
+
type: "string",
|
|
13246
|
+
description: "\u53EF\u9009\u3002\u7167\u6284 listAgents \u8FD4\u56DE\u7684 credentialGroup \u5B57\u6BB5\uFF0C\u7528\u4E8E\u540C\u6279\u6B21\u5E76\u53D1\u6247\u51FA\u7684\u51ED\u8BC1\u9694\u79BB\u6821\u9A8C\u3002\u7F3A\u7701/\u7A7A\u503C\u89C6\u4E3A\u300C\u672A\u77E5\u300D\uFF08\u4E0D\u662F\u300C\u72EC\u7ACB\u300D\uFF09\uFF1A\u4E0E\u540C batch \u5185\u4EFB\u4F55\u5176\u4ED6 run \u5E76\u53D1\u90FD\u4F1A\u88AB\u62D2\u7EDD\u3002"
|
|
13247
|
+
},
|
|
13248
|
+
allowUnknownCredential: {
|
|
13249
|
+
type: "boolean",
|
|
13250
|
+
description: "\u53EF\u9009\u3002\u663E\u5F0F\u786E\u8BA4\u300C\u51ED\u8BC1\u5F52\u5C5E\u672A\u77E5\u300D\u7684\u5E76\u53D1\u98CE\u9669\u540E\u5F3A\u5236\u653E\u884C\uFF08\u7B49\u540C\u4E8E CLI \u7684 --force-unknown-credential\uFF09\u3002\u4EC5\u5728\u5DF2\u81EA\u884C\u786E\u8BA4\u4E24\u4FA7\u4E0D\u5171\u7528\u4E0A\u6E38\u51ED\u8BC1\u65F6\u4F7F\u7528\uFF1B\u9ED8\u8BA4 false\uFF0C\u672A\u77E5\u51ED\u8BC1\u5E76\u53D1\u4E00\u5F8B\u62D2\u7EDD\u3002",
|
|
13251
|
+
default: false
|
|
13252
|
+
},
|
|
13253
|
+
allowCredentialConcurrency: {
|
|
13254
|
+
type: "boolean",
|
|
13255
|
+
description: "\u53EF\u9009\u3002\u663E\u5F0F\u5141\u8BB8\u540C\u4E00\u51ED\u8BC1\u7EC4\u5E76\u53D1\u6D3E\u53D1\u3002\u9ED8\u8BA4 false\u3002\u5728\u7528\u6237\u6388\u6743\u540C\u4E00\u51ED\u636E\u591A\u4EFB\u52A1\u5E76\u53D1\u6216\u786E\u8BA4\u4E0A\u6E38\u652F\u6301\u5E76\u53D1\u65F6\u4F7F\u7528\u3002",
|
|
13256
|
+
default: false
|
|
13788
13257
|
},
|
|
13789
13258
|
trackTodo: {
|
|
13790
13259
|
type: "boolean",
|
|
@@ -13817,13 +13286,26 @@ async function startAgentRunFunc(args, thunkApi, _context) {
|
|
|
13817
13286
|
const { agentKey, task, input, agentName, batchId, wait } = args;
|
|
13818
13287
|
const resultMode = args.resultMode ?? "full";
|
|
13819
13288
|
const { dispatch } = thunkApi;
|
|
13820
|
-
const
|
|
13289
|
+
const explicitBatchId = typeof batchId === "string" && batchId.trim() ? batchId.trim() : void 0;
|
|
13290
|
+
const effectiveBatchId = explicitBatchId ?? `batch-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}-${Math.random().toString(36).slice(2, 8)}`;
|
|
13821
13291
|
if (!agentKey) {
|
|
13822
13292
|
throw new Error("startAgentRun: \u7F3A\u5C11 agentKey \u53C2\u6570\u3002");
|
|
13823
13293
|
}
|
|
13824
13294
|
if (!task || typeof task !== "string") {
|
|
13825
13295
|
throw new Error("startAgentRun: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
|
|
13826
13296
|
}
|
|
13297
|
+
if (explicitBatchId) {
|
|
13298
|
+
const nowMs = Date.now();
|
|
13299
|
+
pruneBatchFanoutRegistry(nowMs);
|
|
13300
|
+
const active = batchFanoutRegistry.get(explicitBatchId) ?? [];
|
|
13301
|
+
const verdict = checkCredentialFanout({
|
|
13302
|
+
active,
|
|
13303
|
+
candidate: { agentKey, credentialGroup: args.credentialGroup },
|
|
13304
|
+
allowUnknownCredential: args.allowUnknownCredential === true,
|
|
13305
|
+
allowCredentialConcurrency: args.allowCredentialConcurrency === true
|
|
13306
|
+
});
|
|
13307
|
+
if (!verdict.allowed) throw new Error(verdict.message);
|
|
13308
|
+
}
|
|
13827
13309
|
const content = buildDelegatedTaskContent(task, input);
|
|
13828
13310
|
const payloadMetrics = calculateDelegatedPayloadMetrics(task, input, content);
|
|
13829
13311
|
const activeDialogKey = getActiveDialogKey();
|
|
@@ -13853,6 +13335,16 @@ async function startAgentRunFunc(args, thunkApi, _context) {
|
|
|
13853
13335
|
};
|
|
13854
13336
|
}
|
|
13855
13337
|
const runId = bgResult.dialogId;
|
|
13338
|
+
if (explicitBatchId) {
|
|
13339
|
+
const entries = batchFanoutRegistry.get(explicitBatchId) ?? [];
|
|
13340
|
+
entries.push({
|
|
13341
|
+
runId,
|
|
13342
|
+
agentKey,
|
|
13343
|
+
...typeof args.credentialGroup === "string" && args.credentialGroup.trim() ? { credentialGroup: args.credentialGroup.trim() } : {},
|
|
13344
|
+
startedAtMs: Date.now()
|
|
13345
|
+
});
|
|
13346
|
+
batchFanoutRegistry.set(explicitBatchId, entries);
|
|
13347
|
+
}
|
|
13856
13348
|
const status = bgResult.status ?? "pending";
|
|
13857
13349
|
const resolvedName = agentName?.trim() || bgResult.agentName || bgResult.name;
|
|
13858
13350
|
const identity = { agentName: resolvedName, agentKey, runId };
|
|
@@ -15546,7 +15038,7 @@ var executeToolRun = createAsyncThunk(
|
|
|
15546
15038
|
if (!executionInput) {
|
|
15547
15039
|
throw new Error(`ToolRun ${id} has no input to execute with.`);
|
|
15548
15040
|
}
|
|
15549
|
-
const { findToolExecutor: findToolExecutor2 } = await import("./tools-
|
|
15041
|
+
const { findToolExecutor: findToolExecutor2 } = await import("./tools-XRQR7ZZR.js");
|
|
15550
15042
|
const { executor } = findToolExecutor2(run.toolName);
|
|
15551
15043
|
toolRunStarted({
|
|
15552
15044
|
id: run.id,
|
|
@@ -15570,7 +15062,7 @@ var executeToolRun = createAsyncThunk(
|
|
|
15570
15062
|
const latestState = thunkApi.getState();
|
|
15571
15063
|
const userId = selectIdentityUserId(latestState);
|
|
15572
15064
|
if (userId) {
|
|
15573
|
-
const { fetchUserSpaceMemberships } = await import("./memberThunks-
|
|
15065
|
+
const { fetchUserSpaceMemberships } = await import("./memberThunks-P2ECUJ56.js");
|
|
15574
15066
|
await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
|
|
15575
15067
|
}
|
|
15576
15068
|
}
|
|
@@ -18053,7 +17545,7 @@ async function updateDocFunc(args, thunkApi) {
|
|
|
18053
17545
|
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
18054
17546
|
};
|
|
18055
17547
|
await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
|
|
18056
|
-
const { getDocState, applyExternalDocUpdate } = await import("./docStore-
|
|
17548
|
+
const { getDocState, applyExternalDocUpdate } = await import("./docStore-UENKCCDX.js");
|
|
18057
17549
|
if (getDocState().pageKey === id) {
|
|
18058
17550
|
applyExternalDocUpdate({
|
|
18059
17551
|
slateData: finalSlateData,
|
|
@@ -18078,7 +17570,7 @@ async function updateDocFunc(args, thunkApi) {
|
|
|
18078
17570
|
// packages/ai/tools/updateUserPreferenceProfileTool.ts
|
|
18079
17571
|
async function dispatchSetSettings(thunkApi, changes) {
|
|
18080
17572
|
const injectedSetSettings = thunkApi?.extra?.setSettings;
|
|
18081
|
-
const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-
|
|
17573
|
+
const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-P4ZW7K5X.js")).setSettings;
|
|
18082
17574
|
await thunkApi.dispatch(setSettings(changes)).unwrap();
|
|
18083
17575
|
}
|
|
18084
17576
|
var updateUserPreferenceProfileFunctionSchema = {
|
|
@@ -18801,6 +18293,38 @@ var baseToolDefinitions = [
|
|
|
18801
18293
|
costLevel: "low",
|
|
18802
18294
|
defaultConsent: "ask"
|
|
18803
18295
|
},
|
|
18296
|
+
{
|
|
18297
|
+
id: "updateAgentAutomation",
|
|
18298
|
+
schema: updateAgentAutomationFunctionSchema,
|
|
18299
|
+
executor: updateAgentAutomationFunc,
|
|
18300
|
+
description: {
|
|
18301
|
+
name: "updateAgentAutomation",
|
|
18302
|
+
description: "\u66F4\u65B0\u4E00\u4E2A agent automation \u7684\u6807\u9898\u3001instruction\u3001trigger\u3001status \u7B49\u5B57\u6BB5\u3002",
|
|
18303
|
+
category: "\u8BA1\u5212\u4E0E\u7F16\u6392"
|
|
18304
|
+
},
|
|
18305
|
+
behavior: "action",
|
|
18306
|
+
uiGroup: "general",
|
|
18307
|
+
capability: "general",
|
|
18308
|
+
riskLevel: "medium",
|
|
18309
|
+
costLevel: "low",
|
|
18310
|
+
defaultConsent: "ask"
|
|
18311
|
+
},
|
|
18312
|
+
{
|
|
18313
|
+
id: "deleteAgentAutomation",
|
|
18314
|
+
schema: deleteAgentAutomationFunctionSchema,
|
|
18315
|
+
executor: deleteAgentAutomationFunc,
|
|
18316
|
+
description: {
|
|
18317
|
+
name: "deleteAgentAutomation",
|
|
18318
|
+
description: "\u5220\u9664\u4E00\u4E2A agent automation \u53CA\u5176 owner index\u3002",
|
|
18319
|
+
category: "\u8BA1\u5212\u4E0E\u7F16\u6392"
|
|
18320
|
+
},
|
|
18321
|
+
behavior: "action",
|
|
18322
|
+
uiGroup: "general",
|
|
18323
|
+
capability: "general",
|
|
18324
|
+
riskLevel: "high",
|
|
18325
|
+
costLevel: "low",
|
|
18326
|
+
defaultConsent: "ask"
|
|
18327
|
+
},
|
|
18804
18328
|
{
|
|
18805
18329
|
id: "notifyUser",
|
|
18806
18330
|
schema: notifyUserFunctionSchema,
|
|
@@ -20338,7 +19862,6 @@ var findToolExecutor = (rawName) => {
|
|
|
20338
19862
|
};
|
|
20339
19863
|
|
|
20340
19864
|
export {
|
|
20341
|
-
resolveBuiltinSkillPage,
|
|
20342
19865
|
resolveAgentRequiredPackIds,
|
|
20343
19866
|
resolveAgentRecommendedSkillNames,
|
|
20344
19867
|
clipMultilineText,
|
|
@@ -20360,6 +19883,7 @@ export {
|
|
|
20360
19883
|
rememberMemoryFunctionSchema,
|
|
20361
19884
|
deleteMemoryFunctionSchema,
|
|
20362
19885
|
queryMemoryFunctionSchema,
|
|
19886
|
+
checkCredentialFanout,
|
|
20363
19887
|
buildStartAgentRunFunctionSchema,
|
|
20364
19888
|
CONTROL_AGENT_RUN_ACTIONS,
|
|
20365
19889
|
buildControlAgentRunFunctionSchema,
|