nolo-cli 0.79.0-alpha.2 → 0.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +2 -2
  2. package/{_executeModel-T3FPYFVF.js → _executeModel-U5V7LOJX.js} +46 -46
  3. package/{action-D22U6CTH.js → action-EXQVY3UO.js} +11 -11
  4. package/{addContentAction-XAPUTGL4.js → addContentAction-6IXQSRD2.js} +9 -9
  5. package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-FZOB4BYM.js} +8 -8
  6. package/{agentDeleteCommand-2TYFURBN.js → agentDeleteCommand-4MIJFQQB.js} +30 -28
  7. package/{agentEmailCommands-7P35ZMUA.js → agentEmailCommands-JUXT36BY.js} +62 -60
  8. package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-YW6PQAQ2.js} +2 -2
  9. package/{agentListCommands-IFUOWXP3.js → agentListCommands-MUVKMMZ5.js} +38 -30
  10. package/{agentMachineCommands-G46ZZ2ZQ.js → agentMachineCommands-56FTZLYV.js} +30 -28
  11. package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-TOMVKJOV.js} +87 -0
  12. package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-GLOOXJ2E.js} +3 -3
  13. package/{agentRecordCommands-R74LTQEQ.js → agentRecordCommands-FST3KAKG.js} +59 -57
  14. package/{agentRunCommand-UKJAECQ6.js → agentRunCommand-UMUEVIY2.js} +60 -58
  15. package/{agentRunControl-T44MESII.js → agentRunControl-XLGD3UZ5.js} +1 -1
  16. package/{agentRuntimeLocal-PUZINLWJ.js → agentRuntimeLocal-NH6GSGAJ.js} +28 -26
  17. package/{agentSlice-EACXUOWW.js → agentSlice-YZK6KG73.js} +10 -10
  18. package/{appDeleteCommands-U4NTEJYQ.js → appDeleteCommands-U45KXYX7.js} +30 -28
  19. package/{appDeployCommands-FXF45Q7F.js → appDeployCommands-LWQIQCFX.js} +30 -28
  20. package/{appDeployStatusCommands-KONVRM53.js → appDeployStatusCommands-LZO33PGD.js} +30 -28
  21. package/{appGetCommands-3VOGIZ7T.js → appGetCommands-OJSO6BCF.js} +30 -28
  22. package/{appListCommands-A6ROBW7P.js → appListCommands-NE56V7DI.js} +30 -28
  23. package/{authCommand-EVGFLAHO.js → authCommand-U5LA6H4Y.js} +164 -24
  24. package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
  25. package/builtinSkillRegistry-4NB7PCOF.js +33 -0
  26. package/{chatQueueReduxAdapter-XEIJO5WR.js → chatQueueReduxAdapter-FRMSYX7N.js} +24 -24
  27. package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
  28. package/{chunk-U6LKJRJB.js → chunk-377KM42Z.js} +42 -26
  29. package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
  30. package/{chunk-AFIWC5NH.js → chunk-3XMOAYRC.js} +1 -1
  31. package/{chunk-UJ63UXGE.js → chunk-4CAPEGHN.js} +1077 -752
  32. package/{chunk-DWPNOYMB.js → chunk-4JBZUECA.js} +1 -1
  33. package/{chunk-NG4UT4K4.js → chunk-4QKBQHPQ.js} +1 -1
  34. package/{chunk-UZ6XXCVR.js → chunk-546FPOW3.js} +15 -2
  35. package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
  36. package/chunk-5ZUL4CUO.js +10 -0
  37. package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
  38. package/{chunk-G3NT6BM3.js → chunk-7IBK6MYW.js} +142 -59
  39. package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
  40. package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
  41. package/{chunk-H7UKKEIS.js → chunk-AQDH76OK.js} +1 -1
  42. package/{chunk-L2Y24GRM.js → chunk-B4S7MR5S.js} +16 -12
  43. package/{chunk-E36HZARC.js → chunk-BF2K6MRF.js} +3 -3
  44. package/{chunk-MGU5ADIQ.js → chunk-BKP7CFUD.js} +10 -10
  45. package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
  46. package/{chunk-AFIKMMGC.js → chunk-COM7GG76.js} +1 -1
  47. package/{chunk-HH65VA5U.js → chunk-CPH3W5A7.js} +15 -3
  48. package/{chunk-XWNRAIUL.js → chunk-DM4UNXPK.js} +6 -16
  49. package/{chunk-ZLPA7K55.js → chunk-DSX6K7C2.js} +29 -10
  50. package/{chunk-QA6YKM3H.js → chunk-E2NP7ZQU.js} +32 -4
  51. package/{chunk-FSFQ3A7S.js → chunk-E3VQ6S3A.js} +10 -10
  52. package/{chunk-YFADVSZE.js → chunk-F3UTRUDO.js} +6 -6
  53. package/{chunk-KIS76A2P.js → chunk-G5X57NDE.js} +38 -4
  54. package/{chunk-BJIRLHJR.js → chunk-GII32WZW.js} +1 -0
  55. package/{chunk-DSRXPQWA.js → chunk-GRDSMV4V.js} +43 -43
  56. package/{chunk-733J6D44.js → chunk-HGRDL36J.js} +6 -6
  57. package/{chunk-OZX2IPKM.js → chunk-HQCSU3DI.js} +1 -1
  58. package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
  59. package/{chunk-QC5LGHYP.js → chunk-HWZAXNO7.js} +10 -5
  60. package/{chunk-Q6FF2MCK.js → chunk-IIKPWSPX.js} +1 -1
  61. package/{chunk-KC5FAHVS.js → chunk-JEDZAO7L.js} +1 -1
  62. package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
  63. package/{chunk-AJHEFRGJ.js → chunk-JTYPAMGP.js} +155 -1
  64. package/{chunk-UDQWGU7F.js → chunk-KR3YI36B.js} +1 -1
  65. package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
  66. package/{chunk-SZLVDREM.js → chunk-LSSBA2TN.js} +3 -3
  67. package/{chunk-CMH2SYHX.js → chunk-MBEEYLGL.js} +2 -2
  68. package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
  69. package/{chunk-PGSKWZCB.js → chunk-NKIH4Q7W.js} +1 -1
  70. package/{chunk-FPTQQSS6.js → chunk-OH7H6LPC.js} +26 -5
  71. package/{chunk-5J7W2VWW.js → chunk-OOLWKQSM.js} +6 -265
  72. package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
  73. package/chunk-Q5FJJ6XI.js +103 -0
  74. package/{chunk-JYYZCK2Z.js → chunk-QFMFJZLO.js} +1 -1
  75. package/{chunk-P7FA2HMM.js → chunk-QMASIHYZ.js} +13 -15
  76. package/{chunk-ZY4K4CZR.js → chunk-R2YY6MWV.js} +909 -304
  77. package/chunk-RLEWGSM5.js +677 -0
  78. package/{chunk-PYXL2CJL.js → chunk-RZYQMSQA.js} +1 -1
  79. package/{chunk-EOU7ZSTU.js → chunk-S3UI4IUJ.js} +1198 -50
  80. package/{chunk-SPAQ4PVV.js → chunk-SAFZABH7.js} +1 -1
  81. package/{chunk-QRBAZ5PW.js → chunk-SASGLNUD.js} +3 -3
  82. package/{chunk-D74EWXL4.js → chunk-SUERPXJZ.js} +390 -47
  83. package/{chunk-3QPYFHAH.js → chunk-TMAZ3VHN.js} +1 -1
  84. package/{chunk-BJCWNHVU.js → chunk-U47DH2WO.js} +2 -2
  85. package/{chunk-MEVSATIF.js → chunk-UBNV6CS6.js} +66 -792
  86. package/{chunk-EXMHJN7C.js → chunk-UDEFS2PV.js} +4 -3
  87. package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
  88. package/{chunk-4EJ5QYB5.js → chunk-VOOTT7HA.js} +1 -1
  89. package/{chunk-PZM3EENV.js → chunk-W2E6HIIK.js} +1 -1
  90. package/chunk-WKEUHK57.js +1625 -0
  91. package/{chunk-GBPZKFYK.js → chunk-WON762L4.js} +4 -4
  92. package/{chunk-X7Z7U4Z6.js → chunk-WP6BC7OF.js} +15 -15
  93. package/{chunk-QUH3XHL5.js → chunk-X2ZTVRXP.js} +7 -7
  94. package/{chunk-MYU3MJCF.js → chunk-XAQAF25W.js} +175 -7
  95. package/chunk-XGJAR4T5.js +283 -0
  96. package/{chunk-ZZCJUXUI.js → chunk-XLGHBHGP.js} +2 -2
  97. package/{chunk-V3ZKNK5D.js → chunk-YOXYA2GU.js} +10 -10
  98. package/{chunk-ALGK6TIE.js → chunk-YPYMGGPJ.js} +3 -3
  99. package/{chunk-K7AG465Q.js → chunk-ZHUTWJ3N.js} +4 -2
  100. package/{chunk-CDVGNZDA.js → chunk-ZKMYGRO7.js} +11 -173
  101. package/{contentThunks-3SPROFG5.js → contentThunks-TC3AENBY.js} +25 -25
  102. package/{createAgentAutomationAction-EIP2EG3O.js → createAgentAutomationAction-67EOD3WK.js} +25 -25
  103. package/{createDialogAction-RLUSTN4D.js → createDialogAction-4OCQC5MW.js} +28 -28
  104. package/{createPageAction-4Y52G7WG.js → createPageAction-JLGVP57B.js} +26 -26
  105. package/{dbSlice-GKGGFNOB.js → dbSlice-RDGCE5MU.js} +8 -8
  106. package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
  107. package/{dialogCommands-G223U5WU.js → dialogCommands-JHSDKCR5.js} +32 -30
  108. package/{dialogSlice-THY45JWM.js → dialogSlice-I2DK32ZT.js} +24 -24
  109. package/{docCreateCommands-2P47IJDK.js → docCreateCommands-QUL6VWK2.js} +31 -29
  110. package/{docDeleteCommands-N3EGDOIC.js → docDeleteCommands-DMQ2MU6I.js} +32 -30
  111. package/{docReadCommands-6BFV2HI7.js → docReadCommands-FVHENBU6.js} +31 -29
  112. package/{docStore-ZQ3ECOPY.js → docStore-OLC6MD7B.js} +9 -9
  113. package/{docUpdateCommands-ZTMPXHC5.js → docUpdateCommands-VA6V5C6L.js} +31 -29
  114. package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
  115. package/{getPricing-HRMSOF3E.js → getPricing-YYXTEPBP.js} +4 -4
  116. package/{handleSendMessageAction-CE4M5XIE.js → handleSendMessageAction-GRDIRXAK.js} +24 -24
  117. package/index.js +88 -80
  118. package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
  119. package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
  120. package/{machineCommands-4OT7KVCD.js → machineCommands-IJJ66MYU.js} +59 -57
  121. package/{machineWsRunDispatch-TR3EYESP.js → machineWsRunDispatch-PP2ZBS6D.js} +57 -55
  122. package/{memberThunks-KATHH3F4.js → memberThunks-WQGQWYYT.js} +9 -9
  123. package/{models-GS72DVJS.js → models-UN7YGMPM.js} +2 -2
  124. package/{offlineMarxistsAgentCommand-GEH6SNNA.js → offlineMarxistsAgentCommand-JEWCIAWM.js} +1 -1
  125. package/package.json +1 -1
  126. package/providerPresetApply-NO73BG45.js +214 -0
  127. package/providerRegistry-OVY4VKNN.js +31 -0
  128. package/{read-LC6HVYBN.js → read-S4WC2OUK.js} +5 -4
  129. package/{readDocTool-N3ERJHHF.js → readDocTool-PQNM63KV.js} +1 -1
  130. package/{readlineWorkspace-RE3P324X.js → readlineWorkspace-ASJECDJD.js} +192 -109
  131. package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-YJZ6XJV6.js} +11 -11
  132. package/{runAgentClientLoop-NE5EHXSS.js → runAgentClientLoop-KIOQSDRC.js} +45 -45
  133. package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
  134. package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-E6A3WL4E.js} +9 -9
  135. package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-WBLIVICQ.js} +11 -11
  136. package/{settingSlice-OEJA4NQO.js → settingSlice-JR6S7TRD.js} +10 -10
  137. package/{spaceCommands-MRP5U3C3.js → spaceCommands-WDUNCAK5.js} +29 -27
  138. package/{streamAgentChatTurn-A6L6O22P.js → streamAgentChatTurn-EGQDPMAO.js} +57 -56
  139. package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-DTR36ZY2.js} +8 -8
  140. package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
  141. package/{toolApiClient-VGYUB4P5.js → toolApiClient-7PSIFQPJ.js} +2 -2
  142. package/{tools-JS475NYO.js → tools-AOVE5LKM.js} +41 -39
  143. package/tuiSummaryLlmCaller-XRQCSNYQ.js +127 -0
  144. package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
  145. package/{updateDialogTitleAction-GMZUT6RP.js → updateDialogTitleAction-T66TXHIR.js} +45 -28
  146. package/chunk-3IT2PFHL.js +0 -611
  147. package/chunk-I42VC5KR.js +0 -15
  148. package/codingSkills-E6KSDNSJ.js +0 -48
  149. package/tuiSummaryLlmCaller-3Z24VUWM.js +0 -116
  150. package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
  151. package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
  152. package/{localRuntimeAuthority-R5UBODT3.js → localRuntimeAuthority-6IR6BBXE.js} +3 -3
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  fetchWithTransientRetry
3
- } from "./chunk-5XTOKQLW.js";
3
+ } from "./chunk-5UTFL4QJ.js";
4
4
  import {
5
5
  isGatewayHttpStatus
6
6
  } from "./chunk-NF64D32W.js";
@@ -29,7 +29,7 @@ import {
29
29
  toCompactAgentSummary,
30
30
  toSafeAgentSummary,
31
31
  toUnavailableAgentSummary
32
- } from "./chunk-FPTQQSS6.js";
32
+ } from "./chunk-OH7H6LPC.js";
33
33
  import {
34
34
  getUserDataItemTimestamp,
35
35
  mergeAndDedupUserData
@@ -40,7 +40,7 @@ import {
40
40
  readPageFunc,
41
41
  readPageFunctionSchema,
42
42
  slateToSimplifiedMarkdown
43
- } from "./chunk-UDQWGU7F.js";
43
+ } from "./chunk-KR3YI36B.js";
44
44
  import {
45
45
  addMemberSpace,
46
46
  fetchAuthoritativeRemoteSpace,
@@ -52,7 +52,7 @@ import {
52
52
  setMembershipRejected,
53
53
  setSpaceInitialized,
54
54
  updateMemberSpaceName
55
- } from "./chunk-PZM3EENV.js";
55
+ } from "./chunk-W2E6HIIK.js";
56
56
  import {
57
57
  ToolApiError,
58
58
  buildToolRequestHeaders,
@@ -60,10 +60,10 @@ import {
60
60
  getRequestConfig,
61
61
  getToolBaseUrl,
62
62
  getToolRequestContext
63
- } from "./chunk-OZX2IPKM.js";
63
+ } from "./chunk-HQCSU3DI.js";
64
64
  import {
65
65
  setDialogExtraReferencesAction
66
- } from "./chunk-4EJ5QYB5.js";
66
+ } from "./chunk-VOOTT7HA.js";
67
67
  import {
68
68
  waitForAbortableDelay
69
69
  } from "./chunk-N4G4PKQ6.js";
@@ -81,14 +81,10 @@ import {
81
81
  } from "./chunk-VF4K2QE6.js";
82
82
  import {
83
83
  createDocState
84
- } from "./chunk-QRBAZ5PW.js";
84
+ } from "./chunk-SASGLNUD.js";
85
85
  import {
86
- BUILTIN_OBJECT_SKILL_IDS,
87
- buildBuiltinObjectSkillConfig,
88
- buildBuiltinObjectSkillDbKey,
89
- buildBuiltinObjectSkillPageContent,
90
86
  createDialogAction
91
- } from "./chunk-CDVGNZDA.js";
87
+ } from "./chunk-ZKMYGRO7.js";
92
88
  import {
93
89
  DEFAULT_COLLAPSED_CATEGORIES,
94
90
  addContentToSpace,
@@ -106,7 +102,7 @@ import {
106
102
  updateContentCategory,
107
103
  updateContentTitle,
108
104
  writeStoredCollapsedCategories
109
- } from "./chunk-P7FA2HMM.js";
105
+ } from "./chunk-QMASIHYZ.js";
110
106
  import {
111
107
  getCurrentSpaceId,
112
108
  getCurrentSpaceIdRaw,
@@ -128,14 +124,14 @@ import {
128
124
  selectMsgById,
129
125
  uiAskChoiceFunc,
130
126
  uiAskChoiceFunctionSchema
131
- } from "./chunk-D74EWXL4.js";
127
+ } from "./chunk-SUERPXJZ.js";
132
128
  import {
133
129
  createAgent,
134
130
  deleteServerSyncedCredential,
135
131
  runLlm,
136
132
  streamAgentChatTurn,
137
133
  updateAgent
138
- } from "./chunk-QUH3XHL5.js";
134
+ } from "./chunk-X2ZTVRXP.js";
139
135
  import {
140
136
  getActiveDialogKey,
141
137
  selectCurrentDialogKey,
@@ -145,15 +141,14 @@ import {
145
141
  require_react
146
142
  } from "./chunk-YDH3FDFQ.js";
147
143
  import {
148
- CODING_SKILL_SLUGS,
149
- buildCodingSkillConfig,
150
- buildCodingSkillContentBySlug,
151
- buildCodingSkillId,
152
- buildCodingSkillPageKey
153
- } from "./chunk-3IT2PFHL.js";
144
+ listBuiltinSkills,
145
+ resolveBuiltinCapability,
146
+ resolveBuiltinSkillByName,
147
+ resolveBuiltinSkillEntry
148
+ } from "./chunk-WKEUHK57.js";
154
149
  import {
155
150
  CAPABILITY_PACKS
156
- } from "./chunk-MYU3MJCF.js";
151
+ } from "./chunk-XAQAF25W.js";
157
152
  import {
158
153
  buildSkillDocMarkdown,
159
154
  normalizeSkillModalities,
@@ -161,7 +156,7 @@ import {
161
156
  parseExternalSkillMarkdown,
162
157
  parseSkillDocProtocol,
163
158
  resolvePageSkillMetadata
164
- } from "./chunk-AETZ7AD6.js";
159
+ } from "./chunk-Q554LLSI.js";
165
160
  import {
166
161
  DEFAULT_READ_DIALOG_MAX_RESPONSE_CHARS,
167
162
  NOLO_WORKSPACE_TOOL_NAMES,
@@ -178,22 +173,22 @@ import {
178
173
  redactAgentRecordForWorkspaceTool,
179
174
  resolveNoloDialogInput,
180
175
  verifyNoloDialogSubjectRefQuery
181
- } from "./chunk-V3ZKNK5D.js";
176
+ } from "./chunk-YOXYA2GU.js";
182
177
  import {
183
178
  isAgentUnavailableNow
184
179
  } from "./chunk-CJCJF5XB.js";
185
180
  import {
186
181
  buildDatabaseFileContentUrl
187
- } from "./chunk-E36HZARC.js";
182
+ } from "./chunk-BF2K6MRF.js";
188
183
  import {
189
184
  DEFAULT_MODEL
190
- } from "./chunk-UJ63UXGE.js";
185
+ } from "./chunk-4CAPEGHN.js";
191
186
  import {
192
187
  compactWhitespace
193
188
  } from "./chunk-DWLEOOGR.js";
194
189
  import {
195
190
  createFileCredentialBroker
196
- } from "./chunk-3JQ2NRYU.js";
191
+ } from "./chunk-HVURBGF3.js";
197
192
  import {
198
193
  toErrorMessage
199
194
  } from "./chunk-HNMXYYJR.js";
@@ -203,15 +198,14 @@ import {
203
198
  } from "./chunk-O6OSWFZQ.js";
204
199
  import {
205
200
  shareResourceAction
206
- } from "./chunk-SZLVDREM.js";
201
+ } from "./chunk-LSSBA2TN.js";
207
202
  import {
208
203
  AGENT_UPDATE_FIELD_NAMES,
209
- nolotusId,
210
204
  normalizeAgentUpdateFieldList,
211
205
  selectAutoApproveSelfUpdateFields,
212
206
  selectCurrentServer,
213
207
  selectSyncServers
214
- } from "./chunk-XWNRAIUL.js";
208
+ } from "./chunk-DM4UNXPK.js";
215
209
  import {
216
210
  asRecordOrEmpty
217
211
  } from "./chunk-KX6YBIHG.js";
@@ -219,7 +213,7 @@ import {
219
213
  UNCATEGORIZED_ID,
220
214
  addContentAction,
221
215
  checkSpaceMembership
222
- } from "./chunk-ZZCJUXUI.js";
216
+ } from "./chunk-XLGHBHGP.js";
223
217
  import {
224
218
  createSpaceKey,
225
219
  normalizeSpaceId
@@ -234,10 +228,12 @@ import {
234
228
  selectEntities,
235
229
  toTimestampMs,
236
230
  write
237
- } from "./chunk-YFADVSZE.js";
231
+ } from "./chunk-F3UTRUDO.js";
238
232
  import {
239
233
  SEPARATOR,
240
234
  TYPE_STORAGE_PREFIXES,
235
+ asNonEmptyStringArray,
236
+ asTrimmedNonEmptyStringArray,
241
237
  createAgentKey,
242
238
  dialogMessageRange,
243
239
  fileKey,
@@ -253,23 +249,19 @@ import {
253
249
  splitKey,
254
250
  toTrimmedString,
255
251
  ulid
256
- } from "./chunk-NHRQCXIQ.js";
252
+ } from "./chunk-VMFTFOWF.js";
257
253
  import {
258
254
  asOptionalFiniteNumber
259
255
  } from "./chunk-WWC7I6TA.js";
260
- import {
261
- asNonEmptyStringArray,
262
- asTrimmedNonEmptyStringArray
263
- } from "./chunk-I42VC5KR.js";
264
256
  import {
265
257
  asTrimmedLowercaseString
266
258
  } from "./chunk-QSJ3HFEF.js";
267
259
  import {
268
260
  readAction
269
- } from "./chunk-5J7W2VWW.js";
261
+ } from "./chunk-OOLWKQSM.js";
270
262
  import {
271
263
  extractCustomId
272
- } from "./chunk-BJIRLHJR.js";
264
+ } from "./chunk-GII32WZW.js";
273
265
  import {
274
266
  DEVICE_LOCAL_OWNER_ID,
275
267
  createAsyncThunk,
@@ -281,7 +273,7 @@ import {
281
273
  resolveEffectiveSpaceActorId,
282
274
  resolveRecordOwnerUserId,
283
275
  selectRuntimeSnapshot
284
- } from "./chunk-3RAG2NAD.js";
276
+ } from "./chunk-UKWGR5SS.js";
285
277
  import {
286
278
  isAbortError
287
279
  } from "./chunk-QOKAKDPE.js";
@@ -294,12 +286,12 @@ import {
294
286
  buildTombstoneRecord,
295
287
  isTombstoneRecord
296
288
  } from "./chunk-GBRG75BQ.js";
297
- import {
298
- asTrimmedString
299
- } from "./chunk-3EUW3WEO.js";
300
289
  import {
301
290
  isRecord
302
291
  } from "./chunk-KUG52IAP.js";
292
+ import {
293
+ asTrimmedString
294
+ } from "./chunk-3EUW3WEO.js";
303
295
  import {
304
296
  API_ENDPOINTS
305
297
  } from "./chunk-LCBAMY2M.js";
@@ -919,7 +911,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
919
911
  workspace: { mode: "lease" }
920
912
  };
921
913
  var findModelConfig = async (modelName, provider) => {
922
- const { ALL_MODELS } = await import("./models-GS72DVJS.js");
914
+ const { ALL_MODELS } = await import("./models-UN7YGMPM.js");
923
915
  const name = toTrimmedString(modelName);
924
916
  const prov = toTrimmedString(provider ?? "");
925
917
  if (!name) return null;
@@ -1164,7 +1156,7 @@ var buildPlatformFormDataFromArgs = async (args) => {
1164
1156
  const trimmedModel = toTrimmedString(model);
1165
1157
  const trimmedProvider = toTrimmedString(provider);
1166
1158
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
1167
- const { getModelPricing } = await import("./getPricing-HRMSOF3E.js");
1159
+ const { getModelPricing } = await import("./getPricing-YYXTEPBP.js");
1168
1160
  const normalizedTools = tools ?? [];
1169
1161
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
1170
1162
  const formData = {
@@ -2107,746 +2099,17 @@ Imported from: ${url}` : ""
2107
2099
  });
2108
2100
  }
2109
2101
 
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
2102
  // packages/ai/tools/agentSkillConfig.ts
2845
2103
  var MODES = [
2846
2104
  "required",
2847
2105
  "recommended",
2848
2106
  "disabled"
2849
2107
  ];
2108
+ var DEFAULT_RECOMMENDED_SKILL_SLUGS = [
2109
+ "worktree-isolation",
2110
+ "systematic-investigation",
2111
+ "show-me"
2112
+ ];
2850
2113
  var asMode = (value) => typeof value === "string" && MODES.includes(value) ? value : null;
2851
2114
  var resolveAgentSkillConfig = (source) => {
2852
2115
  const out = {};
@@ -2871,11 +2134,21 @@ var resolveAgentRequiredPackIds = (source) => {
2871
2134
  var resolveAgentRecommendedSkillNames = (source, lookup) => {
2872
2135
  const config = resolveAgentSkillConfig(source);
2873
2136
  const resolve = lookup ?? defaultSkillTitleLookup;
2137
+ const seen = /* @__PURE__ */ new Set();
2874
2138
  const out = [];
2139
+ const push = (slug) => {
2140
+ const title = resolve(slug)?.title || slug;
2141
+ if (seen.has(title)) return;
2142
+ seen.add(title);
2143
+ out.push(title);
2144
+ };
2875
2145
  for (const slug of Object.keys(config)) {
2876
2146
  if (config[slug] !== "recommended") continue;
2877
- const title = resolve(slug)?.title;
2878
- out.push(title || slug);
2147
+ push(slug);
2148
+ }
2149
+ for (const slug of DEFAULT_RECOMMENDED_SKILL_SLUGS) {
2150
+ if (Object.hasOwn(config, slug)) continue;
2151
+ push(slug);
2879
2152
  }
2880
2153
  return out;
2881
2154
  };
@@ -4672,7 +3945,7 @@ async function deleteDialogsFunc(args, thunkApi) {
4672
3945
  const deletedDialogIds = [];
4673
3946
  const deletedDialogKeys = [];
4674
3947
  const failures = [];
4675
- const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-THY45JWM.js");
3948
+ const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-I2DK32ZT.js");
4676
3949
  for (const target of targets) {
4677
3950
  try {
4678
3951
  await thunkApi.dispatch(deleteDialog2(target.dbKey)).unwrap();
@@ -4756,7 +4029,7 @@ function formatAgentListCard(agents, maxDisplay = 8) {
4756
4029
  }
4757
4030
  var listAgentsFunctionSchema = {
4758
4031
  name: "listAgents",
4759
- description: "List Nolo agents available for delegation as safe summaries. By default (scope='preferred'), returns the user's preferred agents (favorites, self-owned, OAuth subscriptions, custom API, and local agents). Note: favorited public agents stay in preferred and may still consume platform credits - check each agent's billingSource before dispatching. If no suitable preferred candidate is found or the user explicitly asks to explore public/shared agents, call with scope='public' (public agents may consume platform credits). scope='all' returns the deduplicated union for troubleshooting/management. listAgents does not automatically fallback to public agents. The payload returns `credentialGroups` summarizing independent credential capacities (credentialGroup, credentialKind, agentCount, and availableAt recovery timestamps). Orchestration discipline: Never fan out parallel runs on one credential; fan out only across distinct credentialGroups. A channel verdict is valid for the current dispatch attempt only; always re-read availability before dispatching, and never reuse a failure verdict from an earlier attempt. On config_unresolved-class errors, retry once before degrading. Reserve the strongest private channels for review; execution should use cheap channels. The `agents` array carries a compact agent-selection projection per agent: runnable `agentKey` (agent-<userId>-<id> owned, agent-pub-<id> public), name, model, provider, apiSource, billingSource ('user_subscription' | 'user_api' | 'platform_credits' | 'local'), tools, isFavorite, isOAuth, isOwned, isPublic, credentialGroup, credentialKind. Copy `agentKey` verbatim into startAgentRun. Rate-limited agents (429, nextAvailableAt in the future) are hidden by default; unavailableCount and unavailableAgents carry their nextAvailableAt recovery timestamps; pass `showUnavailable: true` to include them. Set `verbose: true` for full safe summary details.",
4032
+ description: "List Nolo agents available for delegation as safe summaries. By default (scope='preferred'), returns the user's preferred agents (favorites, self-owned, OAuth subscriptions, custom API, and local agents). Note: favorited public agents stay in preferred and may still consume platform credits - check each agent's billingSource before dispatching. If no suitable preferred candidate is found or the user explicitly asks to explore public/shared agents, call with scope='public' (public agents may consume platform credits). scope='all' returns the deduplicated union for troubleshooting/management. listAgents does not automatically fallback to public agents. The payload returns `credentialGroups` summarizing independent credential capacities (credentialGroup, credentialKind, agentCount, and availableAt recovery timestamps). Orchestration discipline: Never fan out parallel runs on one credential; fan out only across distinct credentialGroups. A channel verdict is valid for the current dispatch attempt only; always re-read availability before dispatching, and never reuse a failure verdict from an earlier attempt. On config_unresolved-class errors, retry once before degrading. Reserve the strongest private channels for review; execution should use cheap channels. The `agents` array carries a compact agent-selection projection per agent: runnable `agentKey` (agent-<userId>-<id> owned, agent-pub-<id> public), name, model, provider, apiSource, billingSource ('user_subscription' | 'owner_subscription' | 'user_api' | 'platform_credits' | 'local'), tools, isFavorite, isOAuth, isOwned, isPublic, credentialGroup, credentialKind. Copy `agentKey` verbatim into startAgentRun. Rate-limited agents (429, nextAvailableAt in the future) are hidden by default; unavailableCount and unavailableAgents carry their nextAvailableAt recovery timestamps; pass `showUnavailable: true` to include them. Set `verbose: true` for full safe summary details.",
4760
4033
  parameters: {
4761
4034
  type: "object",
4762
4035
  properties: {
@@ -4801,6 +4074,8 @@ async function listAgentsFunc(args, thunkApi) {
4801
4074
  if (favKey.startsWith("agent-pub-")) {
4802
4075
  favRecord.publicRecordExists = true;
4803
4076
  favRecord.publicKey = favKey;
4077
+ } else {
4078
+ favRecord.verifiedAgentKey = favKey;
4804
4079
  }
4805
4080
  const key = favRecord?.dbKey || favRecord?.id || favKey;
4806
4081
  recordsMap.set(key, favRecord);
@@ -4979,7 +4254,7 @@ var readSkillDocFunctionSchema = {
4979
4254
  }
4980
4255
  };
4981
4256
  async function readSkillDocFunc(args, thunkApi) {
4982
- const { buildReadDocResult } = await import("./readDocTool-N3ERJHHF.js");
4257
+ const { buildReadDocResult } = await import("./readDocTool-PQNM63KV.js");
4983
4258
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
4984
4259
  if (typeof id !== "string" || !id.trim()) {
4985
4260
  throw new Error("readSkillDoc requires id or doc.");
@@ -5782,7 +5057,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
5782
5057
  const spaceKey = createSpaceKey.space(spaceId);
5783
5058
  const readSpace = async (dbKey) => {
5784
5059
  try {
5785
- const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-GKGGFNOB.js");
5060
+ const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-RDGCE5MU.js");
5786
5061
  if (fresh) {
5787
5062
  return await dispatch(readAndWait2(dbKey)).unwrap();
5788
5063
  }
@@ -10847,7 +10122,7 @@ var cloudflareCrawlStatusFunctionSchema = {
10847
10122
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
10848
10123
  const { jobId, limit, status, cursor } = args;
10849
10124
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
10850
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-VGYUB4P5.js");
10125
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-7PSIFQPJ.js");
10851
10126
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
10852
10127
  const params = new URLSearchParams();
10853
10128
  if (limit !== void 0) params.set("limit", String(limit));
@@ -11625,7 +10900,7 @@ var selectUserIdFromState = (state2) => {
11625
10900
  var selectCurrentServerFromState = (state2) => typeof state2?.settings?.currentServer === "string" ? state2.settings.currentServer : null;
11626
10901
  async function addImageContentToSpace(input) {
11627
10902
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
11628
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-XAPUTGL4.js")).addContentAction;
10903
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-6IXQSRD2.js")).addContentAction;
11629
10904
  await addContentAction2(
11630
10905
  {
11631
10906
  spaceId: input.spaceId,
@@ -15546,7 +14821,7 @@ var executeToolRun = createAsyncThunk(
15546
14821
  if (!executionInput) {
15547
14822
  throw new Error(`ToolRun ${id} has no input to execute with.`);
15548
14823
  }
15549
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-JS475NYO.js");
14824
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-AOVE5LKM.js");
15550
14825
  const { executor } = findToolExecutor2(run.toolName);
15551
14826
  toolRunStarted({
15552
14827
  id: run.id,
@@ -15570,7 +14845,7 @@ var executeToolRun = createAsyncThunk(
15570
14845
  const latestState = thunkApi.getState();
15571
14846
  const userId = selectIdentityUserId(latestState);
15572
14847
  if (userId) {
15573
- const { fetchUserSpaceMemberships } = await import("./memberThunks-KATHH3F4.js");
14848
+ const { fetchUserSpaceMemberships } = await import("./memberThunks-WQGQWYYT.js");
15574
14849
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
15575
14850
  }
15576
14851
  }
@@ -18053,7 +17328,7 @@ async function updateDocFunc(args, thunkApi) {
18053
17328
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
18054
17329
  };
18055
17330
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
18056
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-ZQ3ECOPY.js");
17331
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-OLC6MD7B.js");
18057
17332
  if (getDocState().pageKey === id) {
18058
17333
  applyExternalDocUpdate({
18059
17334
  slateData: finalSlateData,
@@ -18078,7 +17353,7 @@ async function updateDocFunc(args, thunkApi) {
18078
17353
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
18079
17354
  async function dispatchSetSettings(thunkApi, changes) {
18080
17355
  const injectedSetSettings = thunkApi?.extra?.setSettings;
18081
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-OEJA4NQO.js")).setSettings;
17356
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-JR6S7TRD.js")).setSettings;
18082
17357
  await thunkApi.dispatch(setSettings(changes)).unwrap();
18083
17358
  }
18084
17359
  var updateUserPreferenceProfileFunctionSchema = {
@@ -20338,7 +19613,6 @@ var findToolExecutor = (rawName) => {
20338
19613
  };
20339
19614
 
20340
19615
  export {
20341
- resolveBuiltinSkillPage,
20342
19616
  resolveAgentRequiredPackIds,
20343
19617
  resolveAgentRecommendedSkillNames,
20344
19618
  clipMultilineText,