nolo-cli 0.29.2 → 0.30.0-alpha.10

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 (138) hide show
  1. package/{_executeModel-BFVTGZXE.js → _executeModel-5ARVVUIK.js} +64 -69
  2. package/{action-LG32A6DJ.js → action-HI3VRQLP.js} +15 -16
  3. package/{addContentAction-MPGMBJTQ.js → addContentAction-NCURJ6PK.js} +13 -13
  4. package/{addDialogAgentAction-ZH23WDID.js → addDialogAgentAction-RCY4ECF4.js} +12 -12
  5. package/{agentDeleteCommand-4S4STG42.js → agentDeleteCommand-5Q6TDCJU.js} +62 -40
  6. package/{agentEmailCommands-3F4IP4DI.js → agentEmailCommands-DSX4BJ2I.js} +77 -81
  7. package/{agentGrantCommands-JNDE4RWR.js → agentGrantCommands-E7ZZFRHK.js} +2 -1
  8. package/{agentListCommands-JCRV2XF6.js → agentListCommands-S66HL5RO.js} +59 -41
  9. package/{agentMachineCommands-KYXPYSFP.js → agentMachineCommands-ULCQ5ZNN.js} +55 -36
  10. package/{agentPullCommand-ZZGU5KOY.js → agentPullCommand-4V36XNGV.js} +4 -3
  11. package/{agentRecordCommands-UADUPIXO.js → agentRecordCommands-2AA3GEGO.js} +75 -79
  12. package/{agentRunCommand-MJWSR53W.js → agentRunCommand-3KOT77XY.js} +79 -83
  13. package/{agentRunControl-SNUKXN6J.js → agentRunControl-AKBN2366.js} +13 -1
  14. package/{agentRuntimeLocal-PC5RRRPT.js → agentRuntimeLocal-7TMDJD4S.js} +50 -31
  15. package/{agentSlice-C5OYLNBT.js → agentSlice-6IQRQZX3.js} +13 -14
  16. package/{appDeleteCommands-ZXODZ5AD.js → appDeleteCommands-UUDIWLNE.js} +55 -36
  17. package/{appDeployCommands-AWC6JPZH.js → appDeployCommands-CO6SZ7YP.js} +55 -36
  18. package/{appDeployStatusCommands-74NXMDAI.js → appDeployStatusCommands-QEVKVECJ.js} +55 -36
  19. package/{appGetCommands-6YGIAP5L.js → appGetCommands-3YSCCLK4.js} +55 -36
  20. package/{appListCommands-DZWBHMNK.js → appListCommands-FBJAFZKK.js} +55 -36
  21. package/{authCommand-XMQHBK5L.js → authCommand-3ADNCFKD.js} +16 -16
  22. package/{authCommands-JSOG2H4E.js → authCommands-CXJ6PI2O.js} +7 -7
  23. package/{chunk-TOGGHWHI.js → chunk-2CYGIPJH.js} +3 -3
  24. package/{chunk-HRJEPMZY.js → chunk-2HQ4OG6N.js} +2 -2
  25. package/{chunk-XMLRJUU5.js → chunk-2IJAKBK2.js} +12 -10
  26. package/{chunk-OLWMGSW2.js → chunk-2SOQY5L6.js} +41 -39
  27. package/{chunk-7H3UTGPM.js → chunk-3AUWC6EM.js} +82 -3
  28. package/{chunk-6HTWA77J.js → chunk-43EPBPZ2.js} +1 -1
  29. package/{chunk-RJBTU7AS.js → chunk-4F77PJBR.js} +302 -14
  30. package/{chunk-RZNYL4LW.js → chunk-4SAV7BD7.js} +65 -1
  31. package/{chunk-R5V5G73M.js → chunk-5RDLGLAP.js} +0 -1
  32. package/{chunk-VKBTAQWT.js → chunk-6JH2DF7J.js} +6 -6
  33. package/{chunk-DZ3XJVET.js → chunk-AOS5IN2I.js} +1 -1
  34. package/{chunk-5ZXNLOAG.js → chunk-ARPAHODF.js} +17 -10
  35. package/{chunk-IC7W63RM.js → chunk-ATK5WJOA.js} +4 -4
  36. package/{chunk-OEWEE4VW.js → chunk-BIPRFBC2.js} +4 -2
  37. package/{chunk-YTA2QOEE.js → chunk-CAENRKNJ.js} +15 -0
  38. package/chunk-CYRMUTGB.js +1707 -0
  39. package/chunk-DCDL3GC4.js +171 -0
  40. package/{chunk-WX3ZOSTL.js → chunk-EBNSAABL.js} +24 -26
  41. package/{chunk-2TYLTEAH.js → chunk-EDWM6D6L.js} +1 -1
  42. package/{chunk-GT3GG2H7.js → chunk-EIQDGAAE.js} +148 -2
  43. package/chunk-F3MP7CP6.js +73 -0
  44. package/{chunk-R7LOFGRE.js → chunk-G5GVZAXF.js} +19 -15
  45. package/{chunk-KEF5OBOZ.js → chunk-GKXS4F2I.js} +33 -27
  46. package/{chunk-R3JSTDQO.js → chunk-GVPMJPCT.js} +1 -1
  47. package/{chunk-WMB7GVPN.js → chunk-IPSPETAL.js} +152 -1177
  48. package/{chunk-MQRZ5QUH.js → chunk-IXZX5CJK.js} +1 -1
  49. package/{chunk-2FX23RGA.js → chunk-J3LHGBNO.js} +5 -5
  50. package/{chunk-VHBWHNVT.js → chunk-K6QEHQZ3.js} +8 -4
  51. package/{chunk-HRPWRVBI.js → chunk-KGEVMUMI.js} +11 -11
  52. package/{chunk-L65QKSVJ.js → chunk-L3GCUVOH.js} +1 -1
  53. package/{chunk-G2BZ43DV.js → chunk-LAXMH7JY.js} +14 -14
  54. package/chunk-LEVCXTDN.js +5558 -0
  55. package/{chunk-HEXXIS77.js → chunk-N2IX3ZYK.js} +1 -1
  56. package/{chunk-32ZM6HVI.js → chunk-NZBH7FTB.js} +95 -95
  57. package/{chunk-XOIF2TNF.js → chunk-OB6FBSH3.js} +13 -0
  58. package/{chunk-PSK2RUHV.js → chunk-OIW2RJ74.js} +360 -2
  59. package/{chunk-FRN5QOKN.js → chunk-PACNSC37.js} +19 -4
  60. package/{chunk-QC6ZWDSV.js → chunk-PIC6Z7VI.js} +3 -3
  61. package/{chunk-H5S4XUGI.js → chunk-Q243PXRU.js} +185 -158
  62. package/{chunk-BBGRJB5E.js → chunk-QBOW6RZN.js} +4 -4
  63. package/{chunk-FVOSIYXM.js → chunk-R5Y4XELF.js} +43 -394
  64. package/{chunk-DF7SMWEV.js → chunk-RWJPDKPB.js} +1 -1
  65. package/{chunk-NXMJ55RU.js → chunk-S2BMRBR2.js} +3 -3
  66. package/{chunk-GC34RRTQ.js → chunk-SWYMCHM7.js} +1 -69
  67. package/chunk-T27IEBNQ.js +149 -0
  68. package/{chunk-GMJS5AYP.js → chunk-T4X4GCYT.js} +19 -179
  69. package/{chunk-4BDPDTJU.js → chunk-TXVSNFHC.js} +8 -8
  70. package/{chunk-JSB4N6NU.js → chunk-V54H24CQ.js} +3 -3
  71. package/chunk-VQ4QPCKE.js +3226 -0
  72. package/{chunk-Q5RXHXKU.js → chunk-W3UDJJMA.js} +189 -122
  73. package/{chunk-L3QFIBZG.js → chunk-WTGCTVJG.js} +1 -1
  74. package/{chunk-XS7UPVR7.js → chunk-WTPC3XD4.js} +5 -5
  75. package/{chunk-WSQLK2KR.js → chunk-XFGM5PJP.js} +6 -6
  76. package/{chunk-HALKDXKP.js → chunk-XORE26Z4.js} +8 -4
  77. package/chunk-YLC42PIE.js +7889 -0
  78. package/{chunk-SKDNBYZK.js → chunk-ZJ2WITOO.js} +2 -2
  79. package/{chunk-L6RBX4L4.js → chunk-ZJH3LKEW.js} +21 -9
  80. package/{codingSkills-EN6Z6G6U.js → codingSkills-V35TRR4Y.js} +1 -2
  81. package/{createAgentAutomationAction-BK4UZJKU.js → createAgentAutomationAction-EYNYY2LB.js} +31 -37
  82. package/{createDialogAction-MJJUI2MK.js → createDialogAction-OUIRWYZP.js} +34 -39
  83. package/{createPageAction-YMZ7K363.js → createPageAction-2I5PHJFF.js} +45 -51
  84. package/{dbSlice-6QJYQUBV.js → dbSlice-BBL3PEVW.js} +12 -12
  85. package/{deleteFile-WDZ3VM7B.js → deleteFile-RJTEPOT4.js} +6 -6
  86. package/{dialogCommands-OKH45ASS.js → dialogCommands-5CL4QYQ7.js} +55 -38
  87. package/{dialogSlice-UDOKNDHB.js → dialogSlice-EKKVFKBJ.js} +28 -35
  88. package/{docCreateCommands-MCLMR4TE.js → docCreateCommands-QHCLYGNW.js} +54 -37
  89. package/{docDeleteCommands-ONDHI7JV.js → docDeleteCommands-DS6KOU6N.js} +56 -39
  90. package/{docReadCommands-FCXBMISW.js → docReadCommands-FRI5DAKH.js} +54 -37
  91. package/{docStore-N66O4CGH.js → docStore-V7EJS4PX.js} +30 -36
  92. package/{docUpdateCommands-T3XN6XOX.js → docUpdateCommands-RQO5ZTXT.js} +57 -40
  93. package/{fetchMessages-W4IKHPCS.js → fetchMessages-VPPQDDZ4.js} +3 -3
  94. package/{getPricing-X6I23RN6.js → getPricing-67TQVKFV.js} +6 -7
  95. package/{handleSendMessageAction-KC4AYUZP.js → handleSendMessageAction-KCF7KII4.js} +30 -37
  96. package/index.js +72 -72
  97. package/{localDialogRead-UFLBS6OT.js → localDialogRead-P72W2U2R.js} +1 -1
  98. package/{machineCommands-DIMRFA3Y.js → machineCommands-IAGAKTHV.js} +78 -82
  99. package/{machineWsRunDispatch-2DYJZI6Z.js → machineWsRunDispatch-JGKC2HEK.js} +73 -77
  100. package/{models-YT32CTT5.js → models-WDUTTYFS.js} +2 -2
  101. package/{offlineMarxistsAgentCommand-5OOWZLJI.js → offlineMarxistsAgentCommand-E6LUG63A.js} +6 -2
  102. package/package.json +1 -1
  103. package/{read-C7Y6LSBM.js → read-64OQDO3I.js} +7 -7
  104. package/{readDocTool-TOHRYJHP.js → readDocTool-MXM3T6PE.js} +2 -1
  105. package/{readlineWorkspace-HUPHMLDG.js → readlineWorkspace-5AQHHIBK.js} +209 -183
  106. package/{removeDialogAgentAction-WZXPOH5S.js → removeDialogAgentAction-NEKVAMSH.js} +16 -17
  107. package/{runAgentClientLoop-5TGSUKHV.js → runAgentClientLoop-6OGPS6SI.js} +63 -67
  108. package/{setDialogExtraReferencesAction-INZY2ENI.js → setDialogExtraReferencesAction-WTOHQDIV.js} +13 -13
  109. package/{setPrimaryDialogAgentAction-WCVLPYCF.js → setPrimaryDialogAgentAction-LDJOYC4F.js} +16 -17
  110. package/{settingSlice-IDUM4LWU.js → settingSlice-4M37TN7V.js} +14 -15
  111. package/{skillDiscovery-ITA7BI7A.js → skillDiscovery-I3QRA7NE.js} +2 -2
  112. package/{spaceCommands-XSSDB3YK.js → spaceCommands-VTDNKTSF.js} +240 -41
  113. package/{spaceSlice-BXDCO6PT.js → spaceSlice-LGUZMB7Y.js} +29 -35
  114. package/{streamAgentChatTurn-HRFMVSVC.js → streamAgentChatTurn-TIGCZUNZ.js} +133 -1301
  115. package/{switchDialogAgentAction-YBFFCBOD.js → switchDialogAgentAction-XVWGKR2Z.js} +12 -12
  116. package/{tableCommands-QSZILI7I.js → tableCommands-RJZ3V4TF.js} +7 -7
  117. package/{toolApiClient-WVTUYOFM.js → toolApiClient-ARGFDJAG.js} +2 -2
  118. package/{tools-5V6FHWQU.js → tools-BQAOPYMR.js} +51 -56
  119. package/{tuiSummaryLlmCaller-GCUPULOV.js → tuiSummaryLlmCaller-YQBN5IMG.js} +12 -12
  120. package/{updateDialogTitleAction-W62C4W4K.js → updateDialogTitleAction-E6HMEDPH.js} +39 -45
  121. package/chunk-5CS33IBL.js +0 -301
  122. package/chunk-5MMAK75Q.js +0 -15
  123. package/chunk-HYSJHRWD.js +0 -669
  124. package/chunk-MRC4Q34M.js +0 -188
  125. package/chunk-SIZQB7BD.js +0 -91
  126. package/chunk-UEOPA6MV.js +0 -641
  127. package/chunk-UFL6WHHJ.js +0 -15419
  128. package/chunk-VIDPVFP3.js +0 -20
  129. package/chunk-W2LZV5GE.js +0 -231
  130. package/chunk-Y5GCAMGP.js +0 -9
  131. package/chunk-YYLHWIW6.js +0 -48
  132. package/chunk-Z54ZAZZC.js +0 -1791
  133. package/chunk-ZZ2MH7LE.js +0 -84
  134. package/{chunk-OMP5L5NF.js → chunk-44HACRCK.js} +3 -3
  135. package/{chunk-ZVZMT3EA.js → chunk-KWCLUYGQ.js} +3 -3
  136. package/{chunk-NRY4GCKJ.js → chunk-WHLVPK32.js} +3 -3
  137. package/{chunk-RQSOAMPJ.js → chunk-Z5MXSEOJ.js} +2 -2
  138. package/{runtimeDoctorCommands-HSU632DY.js → runtimeDoctorCommands-E2OUORHK.js} +3 -3
@@ -4,47 +4,75 @@ import {
4
4
  isGatewayHttpStatus,
5
5
  normalizeNonNegativeMs,
6
6
  parseRetryAfterHeaderMs
7
- } from "./chunk-RQSOAMPJ.js";
7
+ } from "./chunk-Z5MXSEOJ.js";
8
8
  import {
9
- readDocFunc,
10
- readDocFunctionSchema,
11
- readPageFunc,
12
- readPageFunctionSchema,
13
- slateToSimplifiedMarkdown
14
- } from "./chunk-GC34RRTQ.js";
9
+ TASK_PREVIEW_MAX,
10
+ buildDelegatedTaskContent,
11
+ formatListRunsCard,
12
+ formatStartRunCard,
13
+ formatStatusRunCard,
14
+ formatStopRunCard,
15
+ resolveRunLabel
16
+ } from "./chunk-KXKQO4Q6.js";
15
17
  import {
16
18
  sortSafeAgentSummaries,
17
19
  toSafeAgentSummary
18
- } from "./chunk-HRJEPMZY.js";
20
+ } from "./chunk-2HQ4OG6N.js";
19
21
  import {
20
22
  getUserDataItemTimestamp,
21
23
  mergeAndDedupUserData
22
24
  } from "./chunk-KQHGZWSV.js";
23
25
  import {
24
- markdownToSlate
25
- } from "./chunk-3LY4F7SV.js";
26
- import {
27
- isSkillSummaryMarker
28
- } from "./chunk-VF4K2QE6.js";
26
+ NOLO_WORKSPACE_TOOL_NAMES,
27
+ ToolResultError,
28
+ buildAgentRuntimeAgentLookupKeys,
29
+ buildNoloSubjectRefQueryTarget,
30
+ buildNoloTableQueryRequest,
31
+ clampNoloPositiveInteger,
32
+ clipMultilineText,
33
+ fetchAndSerializeTable,
34
+ filterNoloDialogSubjectRefEvidence,
35
+ getNoloComparableUpdatedAt,
36
+ getNoloDialogIdFromKey,
37
+ isAgentSkillDisabled,
38
+ listBuiltinSkills,
39
+ normalizeNoloExcludeDialogIds,
40
+ normalizeNoloSpaceInput,
41
+ redactAgentRecordForWorkspaceTool,
42
+ resolveBuiltinSkillByName,
43
+ resolveNoloDialogInput,
44
+ toolRunUpdated,
45
+ verifyNoloDialogSubjectRefQuery
46
+ } from "./chunk-CYRMUTGB.js";
29
47
  import {
30
48
  createDocState
31
- } from "./chunk-VKBTAQWT.js";
49
+ } from "./chunk-6JH2DF7J.js";
32
50
  import {
33
51
  setDialogExtraReferencesAction
34
- } from "./chunk-6HTWA77J.js";
52
+ } from "./chunk-43EPBPZ2.js";
35
53
  import {
36
- extractMentionsFromSlate
37
- } from "./chunk-VP4WJWKW.js";
54
+ readDocFunc,
55
+ readDocFunctionSchema,
56
+ readPageFunc,
57
+ readPageFunctionSchema
58
+ } from "./chunk-F3MP7CP6.js";
38
59
  import {
39
- slateToRenderMarkdown
40
- } from "./chunk-63W5N6P3.js";
60
+ slateToSimplifiedMarkdown
61
+ } from "./chunk-SWYMCHM7.js";
62
+ import {
63
+ ToolApiError,
64
+ buildToolRequestHeaders,
65
+ callToolApi,
66
+ getRequestConfig,
67
+ getToolBaseUrl,
68
+ getToolRequestContext
69
+ } from "./chunk-44HACRCK.js";
41
70
  import {
42
- BUILTIN_OBJECT_SKILL_IDS,
43
- buildBuiltinObjectSkillConfig,
44
- buildBuiltinObjectSkillDbKey,
45
- buildBuiltinObjectSkillPageContent,
46
71
  createDialogAction
47
- } from "./chunk-GMJS5AYP.js";
72
+ } from "./chunk-T4X4GCYT.js";
73
+ import {
74
+ markdownToSlate
75
+ } from "./chunk-3LY4F7SV.js";
48
76
  import {
49
77
  addCategory,
50
78
  addContentToSpace,
@@ -52,127 +80,75 @@ import {
52
80
  createTable,
53
81
  deleteDbKey,
54
82
  deleteSpace,
55
- fetchAndCacheTableRows,
56
83
  fetchUserData,
57
84
  i18nBaseConfig,
58
- incrementFailedSteps,
59
- incrementStepsExecuted,
60
85
  initReactI18next,
61
86
  instance,
62
87
  loadTableRows,
88
+ selectAllMemberSpaces,
89
+ selectCurrentSpaceId,
90
+ updateContentCategory,
91
+ updateContentTitle
92
+ } from "./chunk-YLC42PIE.js";
93
+ import {
94
+ buildDatabaseFileContentUrl,
95
+ incrementFailedSteps,
96
+ incrementStepsExecuted,
63
97
  normalizeAppRouteId,
64
98
  resolveDialogRuntimeAgentKey,
65
- selectAllMemberSpaces,
66
99
  selectAllMsgs,
67
100
  selectCurrentDialogConfig,
68
101
  selectCurrentDialogId,
69
- selectCurrentSpaceId,
70
- selectCurrentUserBalance,
71
102
  selectMsgById,
72
103
  setWorkflow,
73
104
  uiAskChoiceFunc,
74
105
  uiAskChoiceFunctionSchema,
75
- updateContentCategory,
76
- updateContentTitle,
77
106
  updateStep
78
- } from "./chunk-UFL6WHHJ.js";
107
+ } from "./chunk-LEVCXTDN.js";
79
108
  import {
80
109
  createAgent,
81
110
  runLlm,
82
111
  streamAgentChatTurn,
83
112
  updateAgent
84
- } from "./chunk-RJBTU7AS.js";
85
- import {
86
- CODING_SKILL_SLUGS,
87
- buildCodingSkillConfig,
88
- buildCodingSkillContentBySlug,
89
- buildCodingSkillId,
90
- buildCodingSkillPageKey
91
- } from "./chunk-7H3UTGPM.js";
92
- import {
93
- CAPABILITY_PACKS
94
- } from "./chunk-CF7S2RYZ.js";
95
- import {
96
- buildSkillDocMarkdown,
97
- normalizeSkillModalities,
98
- normalizeStringArray,
99
- parseExternalSkillMarkdown,
100
- parseSkillDocProtocol,
101
- resolvePageSkillMetadata
102
- } from "./chunk-ZWJOGMKH.js";
103
- import {
104
- NOLO_WORKSPACE_TOOL_NAMES,
105
- buildAgentRuntimeAgentLookupKeys,
106
- buildNoloSubjectRefQueryTarget,
107
- buildNoloTableQueryRequest,
108
- clampNoloPositiveInteger,
109
- filterNoloDialogSubjectRefEvidence,
110
- getNoloComparableUpdatedAt,
111
- getNoloDialogIdFromKey,
112
- normalizeNoloExcludeDialogIds,
113
- normalizeNoloSpaceInput,
114
- redactAgentRecordForWorkspaceTool,
115
- resolveNoloDialogInput,
116
- verifyNoloDialogSubjectRefQuery
117
- } from "./chunk-UEOPA6MV.js";
118
- import {
119
- buildDatabaseFileContentUrl
120
- } from "./chunk-HYSJHRWD.js";
121
- import {
122
- DEFAULT_MODEL
123
- } from "./chunk-GT3GG2H7.js";
113
+ } from "./chunk-4F77PJBR.js";
124
114
  import {
125
- canonicalizeToolName,
126
- canonicalizeToolNames
127
- } from "./chunk-ZZ2MH7LE.js";
115
+ toErrorMessage
116
+ } from "./chunk-HNMXYYJR.js";
128
117
  import {
129
- ToolApiError,
130
- buildToolRequestHeaders,
131
- callToolApi,
132
- getRequestConfig,
133
- getToolBaseUrl,
134
- getToolRequestContext
135
- } from "./chunk-OMP5L5NF.js";
118
+ compactWhitespace
119
+ } from "./chunk-DWLEOOGR.js";
136
120
  import {
137
121
  getActiveDialogKey,
138
- require_react,
139
122
  selectCurrentDialogKey,
140
123
  selectPendingRawDataByPageKey
141
124
  } from "./chunk-3ASDTTEI.js";
142
125
  import {
143
- compactWhitespace
144
- } from "./chunk-DWLEOOGR.js";
126
+ addContentAction,
127
+ createSpaceKey,
128
+ normalizeSpaceId
129
+ } from "./chunk-V54H24CQ.js";
145
130
  import {
146
- TASK_PREVIEW_MAX,
147
- buildDelegatedTaskContent,
148
- formatListRunsCard,
149
- formatStartRunCard,
150
- formatStatusRunCard,
151
- formatStopRunCard,
152
- resolveRunLabel
153
- } from "./chunk-KXKQO4Q6.js";
131
+ DEFAULT_MODEL
132
+ } from "./chunk-EIQDGAAE.js";
154
133
  import {
155
- toErrorMessage
156
- } from "./chunk-HNMXYYJR.js";
134
+ slateToRenderMarkdown
135
+ } from "./chunk-63W5N6P3.js";
136
+ import {
137
+ isSkillSummaryMarker
138
+ } from "./chunk-VF4K2QE6.js";
157
139
  import {
158
140
  shareResourceAction
159
- } from "./chunk-HRPWRVBI.js";
141
+ } from "./chunk-KGEVMUMI.js";
160
142
  import {
161
143
  AGENT_UPDATE_FIELD_NAMES,
162
- nolotusId,
163
144
  normalizeAgentUpdateFieldList,
164
145
  selectAutoApproveSelfUpdateFields,
165
146
  selectCurrentServer,
166
147
  selectSyncServers
167
- } from "./chunk-R7LOFGRE.js";
148
+ } from "./chunk-G5GVZAXF.js";
168
149
  import {
169
150
  asRecordOrEmpty
170
151
  } from "./chunk-KX6YBIHG.js";
171
- import {
172
- addContentAction,
173
- createSpaceKey,
174
- normalizeSpaceId
175
- } from "./chunk-JSB4N6NU.js";
176
152
  import {
177
153
  patch,
178
154
  read,
@@ -181,53 +157,28 @@ import {
181
157
  selectById,
182
158
  toTimestampMs,
183
159
  write
184
- } from "./chunk-G2BZ43DV.js";
185
- import {
186
- SEPARATOR,
187
- createAgentKey,
188
- dialogMessageRange,
189
- fileKey,
190
- isAgentKey,
191
- isTableMetaKey,
192
- metaKey,
193
- rowKey,
194
- toTrimmedString,
195
- ulid
196
- } from "./chunk-NRY4GCKJ.js";
197
- import {
198
- asOptionalFiniteNumber
199
- } from "./chunk-WWC7I6TA.js";
200
- import {
201
- asNonEmptyStringArray,
202
- asTrimmedNonEmptyStringArray
203
- } from "./chunk-I42VC5KR.js";
160
+ } from "./chunk-LAXMH7JY.js";
204
161
  import {
205
162
  asTrimmedLowercaseString
206
163
  } from "./chunk-QSJ3HFEF.js";
207
164
  import {
208
- DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS,
209
165
  readAction
210
- } from "./chunk-L6RBX4L4.js";
166
+ } from "./chunk-ZJH3LKEW.js";
167
+ import {
168
+ extractCustomId
169
+ } from "./chunk-TOW4E763.js";
211
170
  import {
212
171
  createAsyncThunk,
213
172
  getRuntimeServerContext,
214
173
  noloWriteRequest,
215
174
  selectIdentityToken,
175
+ selectIdentityUserBalance,
216
176
  selectIdentityUserId,
217
177
  selectRuntimeSnapshot
218
- } from "./chunk-XMLRJUU5.js";
178
+ } from "./chunk-2IJAKBK2.js";
219
179
  import {
220
180
  isAbortError
221
- } from "./chunk-R5V5G73M.js";
222
- import {
223
- asTrimmedString
224
- } from "./chunk-3EUW3WEO.js";
225
- import {
226
- extractCustomId
227
- } from "./chunk-TOW4E763.js";
228
- import {
229
- isRecord
230
- } from "./chunk-KUG52IAP.js";
181
+ } from "./chunk-5RDLGLAP.js";
231
182
  import {
232
183
  API_ENDPOINTS
233
184
  } from "./chunk-LCBAMY2M.js";
@@ -237,12 +188,52 @@ import {
237
188
  import {
238
189
  normalizeServerOrigin
239
190
  } from "./chunk-CF7PE763.js";
191
+ import {
192
+ extractMentionsFromSlate
193
+ } from "./chunk-VP4WJWKW.js";
194
+ import {
195
+ SEPARATOR,
196
+ createAgentKey,
197
+ dialogMessageRange,
198
+ fileKey,
199
+ isAgentKey,
200
+ isTableMetaKey,
201
+ metaKey,
202
+ rowKey,
203
+ toTrimmedString,
204
+ ulid
205
+ } from "./chunk-WHLVPK32.js";
206
+ import {
207
+ asOptionalFiniteNumber
208
+ } from "./chunk-WWC7I6TA.js";
209
+ import {
210
+ asTrimmedString
211
+ } from "./chunk-3EUW3WEO.js";
212
+ import {
213
+ isRecord
214
+ } from "./chunk-KUG52IAP.js";
215
+ import {
216
+ canonicalizeToolName,
217
+ canonicalizeToolNames
218
+ } from "./chunk-3AUWC6EM.js";
219
+ import {
220
+ CAPABILITY_PACKS
221
+ } from "./chunk-CF7S2RYZ.js";
222
+ import {
223
+ buildSkillDocMarkdown,
224
+ normalizeSkillModalities,
225
+ normalizeStringArray,
226
+ parseExternalSkillMarkdown,
227
+ parseSkillDocProtocol,
228
+ resolvePageSkillMetadata
229
+ } from "./chunk-ZWJOGMKH.js";
230
+ import {
231
+ asNonEmptyStringArray,
232
+ asTrimmedNonEmptyStringArray
233
+ } from "./chunk-I42VC5KR.js";
240
234
  import {
241
235
  asOptionalTrimmedString
242
236
  } from "./chunk-G3SUCT4W.js";
243
- import {
244
- __toESM
245
- } from "./chunk-4VNS5WPM.js";
246
237
 
247
238
  // packages/ai/workflow/workflowExecutor.ts
248
239
  function resolveTemplates(value, results) {
@@ -10193,7 +10184,7 @@ var appBuilder_locale_default = {
10193
10184
  }
10194
10185
  };
10195
10186
 
10196
- // packages/auth/gptProTier.ts
10187
+ // packages/core/gptProTier.ts
10197
10188
  var ADVANCED_FEATURE_MIN_BALANCE = 19;
10198
10189
  var GPT_PRO_REQUIRED_RECHARGE_AMOUNT = 199;
10199
10190
  function isGptProModel(provider, model) {
@@ -11248,7 +11239,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11248
11239
  workspace: { mode: "lease" }
11249
11240
  };
11250
11241
  var findModelConfig = async (modelName, provider) => {
11251
- const { ALL_MODELS } = await import("./models-YT32CTT5.js");
11242
+ const { ALL_MODELS } = await import("./models-WDUTTYFS.js");
11252
11243
  const name = toTrimmedString(modelName);
11253
11244
  const prov = toTrimmedString(provider ?? "");
11254
11245
  if (!name) return null;
@@ -11489,7 +11480,7 @@ var buildFormDataFromArgs = async (args) => {
11489
11480
  const trimmedModel = toTrimmedString(model);
11490
11481
  const trimmedProvider = toTrimmedString(provider);
11491
11482
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11492
- const { getModelPricing } = await import("./getPricing-X6I23RN6.js");
11483
+ const { getModelPricing } = await import("./getPricing-67TQVKFV.js");
11493
11484
  const normalizedTools = tools ?? [];
11494
11485
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11495
11486
  const formData = {
@@ -11550,7 +11541,7 @@ var findSpaceConfig = (nameOrId, allSpaces) => {
11550
11541
  async function createAgentToolFunc(args, thunkApi) {
11551
11542
  const state = thunkApi.getState();
11552
11543
  const currentUserId = selectIdentityUserId(state);
11553
- const currentBalance = selectCurrentUserBalance(state);
11544
+ const currentBalance = selectIdentityUserBalance(state);
11554
11545
  const allSpaces = selectAllMemberSpaces(state);
11555
11546
  if (!currentUserId) {
11556
11547
  throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u5F53\u524D\u672A\u767B\u5F55\u6216\u7F3A\u5C11 userId\u3002");
@@ -11642,33 +11633,6 @@ ${availableList}`
11642
11633
  }
11643
11634
  }
11644
11635
 
11645
- // packages/ai/tools/toolResultError.ts
11646
- var ToolResultError = class extends Error {
11647
- code;
11648
- rawData;
11649
- displayData;
11650
- retryable;
11651
- constructor(message, options) {
11652
- super(message);
11653
- this.name = "ToolResultError";
11654
- this.code = options?.code;
11655
- this.rawData = options?.rawData;
11656
- this.displayData = options?.displayData;
11657
- this.retryable = options?.retryable;
11658
- }
11659
- };
11660
- var getToolResultErrorData = (error) => {
11661
- if (!error || typeof error !== "object") return null;
11662
- const candidate = error;
11663
- return {
11664
- rawData: candidate.rawData,
11665
- displayData: candidate.displayData,
11666
- code: candidate.code,
11667
- retryable: candidate.retryable,
11668
- message: candidate.message
11669
- };
11670
- };
11671
-
11672
11636
  // packages/ai/tools/agent/agentUpdateShared.ts
11673
11637
  var agentUpdateFieldSchemaProperties = {
11674
11638
  name: { type: "string", description: "Agent \u7684\u65B0\u540D\u79F0\u3002" },
@@ -12637,791 +12601,6 @@ Imported from: ${url}` : ""
12637
12601
  });
12638
12602
  }
12639
12603
 
12640
- // packages/ai/skills/specialistSkills.ts
12641
- var SPECIALIST_SKILL_SLUGS = [
12642
- "feedback",
12643
- "agent-creator",
12644
- "app-builder"
12645
- ];
12646
- function deterministicId(prefix, seed) {
12647
- let h = 2166136261;
12648
- for (let i = 0; i < seed.length; i++) {
12649
- h ^= seed.charCodeAt(i);
12650
- h = h * 16777619 >>> 0;
12651
- }
12652
- const suffix = h.toString(36).toUpperCase().padStart(14, "0");
12653
- return (prefix + suffix).slice(0, 26);
12654
- }
12655
- function normalizeSkillSeed(input) {
12656
- return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
12657
- }
12658
- function buildSpecialistSkillId(slug) {
12659
- return deterministicId("01SK", normalizeSkillSeed(slug) || slug);
12660
- }
12661
- function buildSpecialistSkillPageKey(userId, slug) {
12662
- return `page-${userId}-${buildSpecialistSkillId(slug)}`;
12663
- }
12664
- var SPECIALIST_SKILL_SEEDS = [
12665
- {
12666
- slug: "feedback",
12667
- title: "feedback",
12668
- 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",
12669
- body: [
12670
- "\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",
12671
- "",
12672
- "\u4F60\u7684\u76EE\u6807\uFF1A",
12673
- "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",
12674
- "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",
12675
- "3. \u5C06\u53CD\u9988\u6574\u7406\u6210\u7ED3\u6784\u5316\u4FE1\u606F\uFF0C\u5199\u5165\u201C\u7528\u6237\u53CD\u9988\u201D\u8868\u3002",
12676
- `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`,
12677
- "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",
12678
- "6. \u56DE\u590D\u98CE\u683C\u7B80\u6D01\u3001\u81EA\u7136\u3001\u50CF\u4EA7\u54C1\u56E2\u961F\u7684\u53CD\u9988\u6536\u96C6\u5165\u53E3\u3002",
12679
- "",
12680
- "\u5DE5\u4F5C\u89C4\u5219\uFF1A",
12681
- "- \u4F18\u5148\u5224\u65AD\u53CD\u9988\u7C7B\u578B\uFF1A\u529F\u80FD\u9700\u6C42 / \u95EE\u9898\u53CD\u9988 / \u4F53\u9A8C\u5EFA\u8BAE / \u5176\u4ED6\u3002",
12682
- "- \u9ED8\u8BA4\u72B6\u6001\u5199\u4E3A\u201C\u5F85\u5904\u7406\u201D\u3002",
12683
- "- \u6839\u636E\u5185\u5BB9\u7C97\u7565\u5224\u65AD\u4F18\u5148\u7EA7\uFF1A",
12684
- " - \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",
12685
- " - \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",
12686
- " - \u4E00\u822C bug\u3001\u660E\u786E\u9700\u6C42\u3001\u5F71\u54CD\u5E38\u7528\u7F16\u8F91/\u521B\u5EFA\u6D41\u7A0B -> \u4E2D",
12687
- " - \u666E\u901A\u5EFA\u8BAE\u6216\u8F7B\u5FAE\u4F53\u9A8C\u95EE\u9898 -> \u4F4E",
12688
- "- \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",
12689
- "- \u5982\u679C\u7528\u6237\u6CA1\u6709\u63D0\u4F9B\u8054\u7CFB\u65B9\u5F0F\uFF0C\u4E0D\u8981\u5F3A\u6C42\uFF0C\u53EF\u7559\u7A7A\u3002",
12690
- "- \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",
12691
- "- \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",
12692
- "- source \u56FA\u5B9A\u5199\u201C\u53CD\u9988\u5165\u53E3\u201D\u3002",
12693
- "- createdAtNote \u5199\u201C\u7531\u53CD\u9988\u5165\u53E3\u8BB0\u5F55\u201D\u3002",
12694
- "",
12695
- "\u666E\u901A\u5199\u8868\u89C4\u5219\uFF1A",
12696
- "- \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",
12697
- `- \u4F7F\u7528 addTableRow \u5DE5\u5177\uFF0C\u628A\u53CD\u9988\u5199\u5165 dbKey \u4E3A meta-${nolotusId}-01NOLOFEEDBACKT000000000R1 \u7684\u8868\u3002`,
12698
- `- \u663E\u5F0F\u4F20\u5165 tenantId="${nolotusId}" \u548C tableId="01NOLOFEEDBACKT000000000R1"\u3002`,
12699
- "- \u5B57\u6BB5\u6620\u5C04\uFF1A",
12700
- " - content: \u7528\u6237\u53CD\u9988\u5185\u5BB9\u7684\u7B80\u6D01\u6574\u7406\u7248\uFF0C\u4FDD\u7559\u5177\u4F53\u5BF9\u8C61\u548C\u75C7\u72B6",
12701
- " - feedbackType: \u53CD\u9988\u7C7B\u578B",
12702
- " - status: \u56FA\u5B9A\u4E3A\u201C\u5F85\u5904\u7406\u201D",
12703
- " - priority: \u6309\u89C4\u5219\u5224\u65AD",
12704
- " - contact: \u7528\u6237\u4E3B\u52A8\u63D0\u4F9B\u7684\u8054\u7CFB\u65B9\u5F0F\uFF0C\u6CA1\u6709\u5C31\u7559\u7A7A",
12705
- " - source: \u56FA\u5B9A\u4E3A\u201C\u53CD\u9988\u5165\u53E3\u201D",
12706
- " - 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",
12707
- " - 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",
12708
- " - reproductionSteps: \u7528\u6237\u63CF\u8FF0\u7684\u590D\u73B0\u6B65\u9AA4\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
12709
- " - expectedResult: \u7528\u6237\u8868\u8FBE\u7684\u671F\u671B\u884C\u4E3A\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
12710
- " - actualResult: \u7528\u6237\u8868\u8FBE\u7684\u5B9E\u9645\u5F02\u5E38\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
12711
- " - userImpact: \u5BF9\u7528\u6237\u6D41\u7A0B\u7684\u5F71\u54CD\uFF1B\u6CA1\u6709\u5C31\u6839\u636E\u5185\u5BB9\u7B80\u77ED\u5F52\u7EB3",
12712
- " - createdAtNote: \u56FA\u5B9A\u4E3A\u201C\u7531\u53CD\u9988\u5165\u53E3\u8BB0\u5F55\u201D",
12713
- "",
12714
- "\u7D27\u6025\u53CD\u9988\u989D\u5916\u89C4\u5219\uFF1A",
12715
- "- \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",
12716
- `- \u4EFB\u52A1\u770B\u677F\u56FA\u5B9A\u4E3A tenantId="${nolotusId}", tableId="NOLOTASKBOARD", dbKey="meta-${nolotusId}-NOLOTASKBOARD"\u3002`,
12717
- "- \u4EFB\u52A1\u770B\u677F\u5B57\u6BB5\uFF1A",
12718
- " - title: \u7528\u201CURGENT \u53CD\u9988\uFF1A\u201D\u5F00\u5934\uFF0C\u540E\u63A5\u95EE\u9898\u4E3B\u9898",
12719
- " - status: \u201C\u5F85\u5904\u7406\u201D",
12720
- " - priority: \u201C\u7D27\u6025\u201D",
12721
- " - executionMode: \u201C\u7ACB\u5373\u6267\u884C\u201D",
12722
- " - owner: \u201Cnolo \u9879\u76EE\u7ECF\u7406\u201D",
12723
- " - source: \u201C\u53CD\u9988\u5165\u53E3\u201D",
12724
- " - 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",
12725
- " - acceptance: \u590D\u8FF0\u53EF\u9A8C\u8BC1\u7684\u4FEE\u590D\u6807\u51C6",
12726
- " - 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",
12727
- " - codeStatus: \u201C\u672A\u5F00\u59CB\u201D",
12728
- "- \u7D27\u6025\u53CD\u9988\u5199\u5165\u4EFB\u52A1\u8868\u540E\uFF0C\u8C03\u7528 notifyUser\uFF1A",
12729
- " - title: \u201C\u7D27\u6025\u53CD\u9988\u5DF2\u8FDB\u5165\u4EFB\u52A1\u8868\u201D",
12730
- " - message: \u7B80\u8981\u8BF4\u660E\u53CD\u9988\u5185\u5BB9\u548C\u4EFB\u52A1\u8868\u72B6\u6001",
12731
- " - severity: \u201Ccritical\u201D",
12732
- ` - targetUserId: "${nolotusId}"`,
12733
- "- \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",
12734
- "",
12735
- "\u4EA4\u4E92\u89C4\u5219\uFF1A",
12736
- "- \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",
12737
- "- \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",
12738
- "- \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",
12739
- "- \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",
12740
- "- \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"
12741
- ].join("\n"),
12742
- toolNames: ["addTableRow", "notifyUser"]
12743
- },
12744
- {
12745
- slug: "agent-creator",
12746
- title: "agent-creator",
12747
- 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",
12748
- body: [
12749
- "\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",
12750
- "\u6838\u5FC3\u539F\u5219\uFF1AAgent = prompt + knowledge + tools + skills/workflows + eval \u7684\u53EF\u8FD0\u884C\u5C01\u88C5\u3002",
12751
- "\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",
12752
- "\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",
12753
- "\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",
12754
- "\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",
12755
- "prepareAgentDraft \u53EA\u751F\u6210\u8349\u7A3F\uFF0C\u4E0D\u4EE3\u8868\u5DF2\u7ECF\u521B\u5EFA\u771F\u5B9E Agent\u3002",
12756
- "\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",
12757
- "\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",
12758
- "\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",
12759
- "\u53EA\u6709\u5F97\u5230\u660E\u786E\u786E\u8BA4\u540E\uFF0C\u624D\u8C03\u7528 createAgent \u521B\u5EFA\u771F\u5B9E Agent\u3002",
12760
- "\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",
12761
- "\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",
12762
- "\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",
12763
- "\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"
12764
- ].join("\n"),
12765
- toolNames: [
12766
- "prepareAgentDraft",
12767
- "createAgent",
12768
- "createSkillDoc",
12769
- "readDoc",
12770
- "updateDoc",
12771
- "updateAgent"
12772
- ]
12773
- },
12774
- {
12775
- slug: "app-builder",
12776
- title: "app-builder",
12777
- 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",
12778
- body: [
12779
- "\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",
12780
- "",
12781
- "## \u89D2\u8272",
12782
- "- \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",
12783
- "- \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u770B\u4EE3\u7801\uFF0C\u5426\u5219\u4E0D\u5C55\u793A\u5927\u6BB5\u4EE3\u7801\u3002",
12784
- "- \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",
12785
- "",
12786
- "## \u5DE5\u4F5C\u65B9\u5F0F",
12787
- "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",
12788
- "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",
12789
- "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",
12790
- "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",
12791
- "",
12792
- "## \u65B0\u5EFA\u5E94\u7528",
12793
- "- \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",
12794
- "",
12795
- "## \u6536\u5C3E",
12796
- "- \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",
12797
- "",
12798
- "## \u5DE5\u5177",
12799
- "- \u672C skill \u7684\u5DE5\u5177\uFF08app* / \u8868 / openAIGptImage \u7B49\uFF09\u7531\u300Capp-builder\u300D\u80FD\u529B\u5305\u6CE8\u5165",
12800
- " \uFF08packages/ai/tools/toolPacks.ts \u7684 CAPABILITY_PACKS\uFF09\u3002\u82E5\u5F53\u524D runtime \u672A\u542F\u7528",
12801
- " \u8BE5\u80FD\u529B\u5305\uFF0C\u5DE5\u5177\u9762\u4E0D\u4F1A\u5C55\u5F00\uFF0C\u9700\u8981\u5148\u786E\u8BA4\u8FD0\u884C\u73AF\u5883\u3002"
12802
- ].join("\n"),
12803
- toolNames: []
12804
- }
12805
- ];
12806
- function seedBySlug(slug) {
12807
- const seed = SPECIALIST_SKILL_SEEDS.find((item) => item.slug === slug);
12808
- if (!seed) {
12809
- throw new Error(`Unknown specialist skill slug: ${slug}`);
12810
- }
12811
- return seed;
12812
- }
12813
- function buildSpecialistSkillConfig(slug) {
12814
- const seed = seedBySlug(slug);
12815
- return {
12816
- version: "0.1",
12817
- kind: "skill",
12818
- id: buildSpecialistSkillId(slug),
12819
- name: seed.title,
12820
- description: seed.description,
12821
- ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
12822
- };
12823
- }
12824
- function buildSpecialistSkillContentBySlug(slug) {
12825
- const seed = seedBySlug(slug);
12826
- const skillConfig = buildSpecialistSkillConfig(slug);
12827
- return buildSkillDocMarkdown({
12828
- body: seed.body,
12829
- skillConfig
12830
- });
12831
- }
12832
-
12833
- // packages/ai/skills/codePlannerSkills.ts
12834
- var CODE_PLANNER_SKILL_SLUGS = [
12835
- "code-planning",
12836
- "search-first",
12837
- "workspace-code",
12838
- "web-research-lite",
12839
- "dispatch-executors"
12840
- ];
12841
- var CODE_PLANNER_ROOT_SKILL_SLUG = "code-planning";
12842
- function deterministicId2(prefix, seed) {
12843
- let h = 2166136261;
12844
- for (let i = 0; i < seed.length; i++) {
12845
- h ^= seed.charCodeAt(i);
12846
- h = h * 16777619 >>> 0;
12847
- }
12848
- const suffix = h.toString(36).toUpperCase().padStart(14, "0");
12849
- return (prefix + suffix).slice(0, 26);
12850
- }
12851
- function normalizeSkillSeed2(input) {
12852
- return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
12853
- }
12854
- function buildCodePlannerSkillId(slug) {
12855
- return deterministicId2("01SK", normalizeSkillSeed2(slug) || slug);
12856
- }
12857
- function buildCodePlannerSkillPageKey(userId, slug) {
12858
- return `page-${userId}-${buildCodePlannerSkillId(slug)}`;
12859
- }
12860
- var CODE_PLANNER_ROOT_SKILL_ID = buildCodePlannerSkillId(
12861
- CODE_PLANNER_ROOT_SKILL_SLUG
12862
- );
12863
- function buildDispatchExecutorsPromptPatch(candidateKeys = DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS) {
12864
- const keys = candidateKeys.map((key) => key.trim()).filter(Boolean);
12865
- if (keys.length === 0) {
12866
- throw new Error("buildDispatchExecutorsPromptPatch requires at least one candidate key");
12867
- }
12868
- return [
12869
- "\u6D3E\u53D1\u534F\u8BAE\uFF1A",
12870
- "- \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",
12871
- "- \u9ED8\u8BA4\u6267\u884C\u5019\u9009\u662F\u4E0B\u5217\u5E73\u53F0\u516C\u5F00 Agent key\uFF08\u65E0\u56FA\u5B9A\u89D2\u8272\u3001\u65E0\u6253\u5206\uFF09\uFF0C\u6309\u987A\u5E8F\u4F18\u5148\u8003\u8651\uFF1B\u65E0\u9700\u5148\u505A\u53D1\u73B0\u8C03\u7528\uFF1A",
12872
- ...keys.map((key, index) => ` ${index + 1}. ${key}`),
12873
- "- 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",
12874
- "- \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",
12875
- "- \u4E0D\u8981\u5199\u6B7B owner \u79C1\u6709 agentKey\u3002"
12876
- ].join("\n");
12877
- }
12878
- var CODE_PLANNER_SKILL_SEEDS = [
12879
- {
12880
- slug: "search-first",
12881
- title: "search-first",
12882
- description: "Search-first protocol for code work: repo before web; evaluate Adopt/Extend/Compose/Build.",
12883
- body: [
12884
- "# search-first",
12885
- "",
12886
- "Protocol-only skill. It does not grant tools by itself.",
12887
- "Use workspace and web skills for actual reads/searches."
12888
- ].join("\n"),
12889
- triggerMode: "required",
12890
- promptPatch: [
12891
- "Search-first \u534F\u8BAE\uFF1A",
12892
- "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",
12893
- "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",
12894
- "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",
12895
- "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",
12896
- "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",
12897
- "6. \u4ECE\u672A\u8C03\u7528\u7684\u6E20\u9053\u7981\u6B62\u58F0\u79F0\u5DF2\u641C\u7D22/\u5DF2\u68C0\u67E5\u3002"
12898
- ].join("\n")
12899
- },
12900
- {
12901
- slug: "workspace-code",
12902
- title: "workspace-code",
12903
- description: "Workspace read/edit/shell protocol for local bound folders and repo inspection.",
12904
- body: [
12905
- "# workspace-code",
12906
- "",
12907
- "Declares local workspace tools and the honest fallback when they are unavailable."
12908
- ].join("\n"),
12909
- triggerMode: "required",
12910
- toolNames: [
12911
- "listFiles",
12912
- "readFile",
12913
- "globFiles",
12914
- "searchFiles",
12915
- "editFile",
12916
- "execShell"
12917
- ],
12918
- promptPatch: [
12919
- "\u5DE5\u4F5C\u533A\u534F\u8BAE\uFF1A",
12920
- "- 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",
12921
- "- \u53EA\u8BFB\uFF1AlistFiles\u3001readFile\u3001globFiles\u3001searchFiles\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",
12922
- "- 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",
12923
- "- 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",
12924
- "- \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"
12925
- ].join("\n")
12926
- },
12927
- {
12928
- slug: "web-research-lite",
12929
- title: "web-research-lite",
12930
- description: "Lite web verification protocol for dependency/docs/issue lookups.",
12931
- body: [
12932
- "# web-research-lite",
12933
- "",
12934
- "Declares external search/scrape tools for verification after local search."
12935
- ].join("\n"),
12936
- triggerMode: "required",
12937
- // 刻意不声明 toolNames:联网能力是系统层能力包(web-search / web-scrape),
12938
- // 不编码的对话同样需要,不该由 Code Planner 私藏一份。这里只留协议,工具由
12939
- // 宿主按能力包挂载,用户在设置页的全局开关才能真正管住它们。
12940
- promptPatch: [
12941
- "\u5916\u90E8\u68C0\u7D22\u534F\u8BAE\uFF1A",
12942
- "- \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",
12943
- "- \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",
12944
- "- \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",
12945
- "- \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"
12946
- ].join("\n")
12947
- },
12948
- {
12949
- slug: "dispatch-executors",
12950
- title: "dispatch-executors",
12951
- description: "startAgentRun dispatch protocol for Code Planner executor candidates.",
12952
- body: [
12953
- "# dispatch-executors",
12954
- "",
12955
- "Only startAgentRun is granted. Default candidate keys are platform public agents;",
12956
- "hard allowlisting is enforced by runtimeContext.allowedChildAgentKeys when wired."
12957
- ].join("\n"),
12958
- triggerMode: "required",
12959
- toolNames: ["startAgentRun"],
12960
- // Keys come from core/builtinAgents — do not hard-code a separate list here.
12961
- promptPatch: buildDispatchExecutorsPromptPatch(
12962
- DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS
12963
- )
12964
- },
12965
- {
12966
- slug: "code-planning",
12967
- title: "code-planning",
12968
- description: "Root Code Planner skill: composes search-first, workspace, web, and dispatch skills.",
12969
- body: [
12970
- "# code-planning",
12971
- "",
12972
- "Composition-only root skill for Code Planner.",
12973
- "Attach this skill on the Agent; children load via requiredSkills.",
12974
- "Until runtimes expand skill pages, Agent seed also carries a compiled snapshot."
12975
- ].join("\n"),
12976
- triggerMode: "required",
12977
- requiredSkillSlugs: [
12978
- "search-first",
12979
- "workspace-code",
12980
- "web-research-lite",
12981
- "dispatch-executors"
12982
- ]
12983
- }
12984
- ];
12985
- function seedBySlug2(slug) {
12986
- const seed = CODE_PLANNER_SKILL_SEEDS.find((item) => item.slug === slug);
12987
- if (!seed) {
12988
- throw new Error(`Unknown Code Planner skill slug: ${slug}`);
12989
- }
12990
- return seed;
12991
- }
12992
- function collectCodePlannerReachableSkillSlugs(rootSlug = CODE_PLANNER_ROOT_SKILL_SLUG) {
12993
- const ordered = [];
12994
- const seen = /* @__PURE__ */ new Set();
12995
- const visit = (slug) => {
12996
- if (seen.has(slug)) return;
12997
- seen.add(slug);
12998
- ordered.push(slug);
12999
- for (const child of seedBySlug2(slug).requiredSkillSlugs ?? []) {
13000
- visit(child);
13001
- }
13002
- };
13003
- visit(rootSlug);
13004
- return ordered;
13005
- }
13006
- function compileCodePlannerEffectiveTools() {
13007
- const tools = [];
13008
- const seen = /* @__PURE__ */ new Set();
13009
- for (const slug of collectCodePlannerReachableSkillSlugs()) {
13010
- for (const toolName of seedBySlug2(slug).toolNames ?? []) {
13011
- if (seen.has(toolName)) continue;
13012
- seen.add(toolName);
13013
- tools.push(toolName);
13014
- }
13015
- }
13016
- return tools;
13017
- }
13018
- var CODE_PLANNER_COMPILED_EFFECTIVE_TOOLS = compileCodePlannerEffectiveTools();
13019
- function buildCodePlannerSkillConfig(slug, options) {
13020
- const seed = seedBySlug2(slug);
13021
- const requiredSkills = options?.requiredSkills ?? seed.requiredSkillSlugs?.map((childSlug) => buildCodePlannerSkillId(childSlug));
13022
- return {
13023
- version: "0.1",
13024
- kind: "skill",
13025
- id: buildCodePlannerSkillId(slug),
13026
- name: seed.title,
13027
- description: seed.description,
13028
- ...seed.triggerMode ? { triggerMode: seed.triggerMode } : {},
13029
- ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {},
13030
- ...requiredSkills?.length ? { requiredSkills: [...requiredSkills] } : {},
13031
- ...seed.promptPatch ? { promptPatch: seed.promptPatch } : {}
13032
- };
13033
- }
13034
- function buildCodePlannerSkillPageRecords(userId) {
13035
- const trimmedUserId = userId.trim();
13036
- if (!trimmedUserId) {
13037
- throw new Error("buildCodePlannerSkillPageRecords requires userId");
13038
- }
13039
- return CODE_PLANNER_SKILL_SEEDS.map((seed) => {
13040
- const skillId = buildCodePlannerSkillId(seed.slug);
13041
- const dbKey = buildCodePlannerSkillPageKey(trimmedUserId, seed.slug);
13042
- const requiredSkills = seed.requiredSkillSlugs?.map(
13043
- (childSlug) => buildCodePlannerSkillPageKey(trimmedUserId, childSlug)
13044
- );
13045
- const skillConfig = buildCodePlannerSkillConfig(seed.slug, {
13046
- requiredSkills
13047
- });
13048
- return {
13049
- slug: seed.slug,
13050
- skillId,
13051
- dbKey,
13052
- title: seed.title,
13053
- content: buildSkillDocMarkdown({
13054
- body: seed.body,
13055
- skillConfig
13056
- }),
13057
- meta: {
13058
- kind: "skill",
13059
- skillConfig
13060
- },
13061
- ...skillConfig.toolNames?.length ? { tools: [...skillConfig.toolNames] } : {}
13062
- };
13063
- });
13064
- }
13065
-
13066
- // packages/ai/skills/searchDialogSkill.ts
13067
- var SEARCH_DIALOG_SKILL_SLUGS = [
13068
- "search-dialog-messages"
13069
- ];
13070
- function deterministicId3(prefix, seed) {
13071
- let h = 2166136261;
13072
- for (let i = 0; i < seed.length; i++) {
13073
- h ^= seed.charCodeAt(i);
13074
- h = h * 16777619 >>> 0;
13075
- }
13076
- const suffix = h.toString(36).toUpperCase().padStart(14, "0");
13077
- return (prefix + suffix).slice(0, 26);
13078
- }
13079
- function normalizeSkillSeed3(input) {
13080
- return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
13081
- }
13082
- function buildSearchDialogSkillId(slug) {
13083
- return deterministicId3("01SK", normalizeSkillSeed3(slug) || slug);
13084
- }
13085
- function buildSearchDialogSkillPageKey(userId, slug) {
13086
- return `page-${userId}-${buildSearchDialogSkillId(slug)}`;
13087
- }
13088
- var SEARCH_DIALOG_SKILL_SEEDS = [
13089
- {
13090
- slug: "search-dialog-messages",
13091
- title: "\u5BF9\u8BDD\u68C0\u7D22",
13092
- 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",
13093
- body: [
13094
- "\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",
13095
- "",
13096
- "## \u4EC0\u4E48\u65F6\u5019\u7528",
13097
- "- \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",
13098
- "- \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",
13099
- "- \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",
13100
- "- \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",
13101
- "",
13102
- "## listDialogs\uFF1A\u5B9A\u4F4D\u5BF9\u8BDD",
13103
- "\u5217\u51FA\u5F53\u524D\u7528\u6237\u7684\u5BF9\u8BDD\uFF1A`listDialogs({ limit?, space?, includeScheduled? })`\u3002",
13104
- "- \u8FD4\u56DE `{ total, dialogs: [{ id, dbKey, title, status, updatedAt, createdAt, spaceId, triggerType, primaryAgentKey }] }`\uFF0C\u6309\u6700\u8FD1\u66F4\u65B0\u6392\u5E8F\u3002",
13105
- "- 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",
13106
- "- \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",
13107
- "",
13108
- "## readDialog\uFF1A\u8BFB\u53D6\u5BF9\u8BDD",
13109
- '\u8BFB\u53D6\u6307\u5B9A\u5BF9\u8BDD\u7684\u5143\u6570\u636E\u4E0E\u6700\u8FD1\u6D88\u606F\uFF1A`readDialog({ dialog: "<dialog \u7684 dbKey>" })`\u3002',
13110
- "- 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",
13111
- "- \u76EE\u6807\u5BF9\u8BDD\u4E0D\u660E\u786E\u65F6\uFF0C\u5148 listDialogs \u5B9A\u4F4D\u518D\u8BFB\u53D6\u3002",
13112
- "- limit \u63A7\u5236\u8FD4\u56DE\u6D88\u606F\u6761\u6570\uFF08\u9ED8\u8BA4 120\uFF0C\u4E0A\u9650 1000\uFF09\u3002",
13113
- "",
13114
- "## searchDialogMessages\uFF1A\u539F\u6587\u641C\u7D22",
13115
- '\u57FA\u672C\u5F62\u5F0F\uFF1A`searchDialogMessages({ dialogKey: "<dialog \u7684 dbKey>", query: "<\u8981\u641C\u7684\u6587\u672C>" })`',
13116
- "",
13117
- "\u53C2\u6570\uFF1A",
13118
- "- dialogKey\uFF1A\u76EE\u6807\u5BF9\u8BDD\u7684 dbKey\uFF08\u5F62\u5982 dialog-<userId>-01ABC...\uFF09\u3002",
13119
- "- query\uFF1A\u8981\u5728\u539F\u59CB\u6D88\u606F\u5185\u5BB9\u91CC\u641C\u7D22\u7684\u6587\u672C\u3002",
13120
- "- limit\uFF1A\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u6761\u5339\u914D\uFF08\u4E0A\u9650 10\uFF09\u3002",
13121
- "- scanLimit\uFF1A\u4ECE server \u62C9\u53D6\u65F6\u6700\u591A\u626B\u63CF\u591A\u5C11\u6761\u6D88\u606F\uFF08\u4E0A\u9650 500\uFF09\u3002",
13122
- "- contextMessages\uFF1A\u6BCF\u6761\u5339\u914D\u524D\u540E\u9644\u5E26\u591A\u5C11\u6761\u90BB\u8FD1\u6D88\u606F\uFF08\u4E0A\u9650 3\uFF09\u3002",
13123
- "- role\uFF1A\u53EF\u9009\uFF0C\u53EA\u641C\u6307\u5B9A\u89D2\u8272\uFF08user / assistant / tool / system\uFF09\u3002",
13124
- "- includeTools\uFF1A\u53EF\u9009\uFF0C\u662F\u5426\u5305\u542B tool \u6D88\u606F\u3002",
13125
- "",
13126
- "## \u8FD4\u56DE",
13127
- "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",
13128
- "\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",
13129
- "",
13130
- "## \u8FB9\u754C",
13131
- "- 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",
13132
- "- 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",
13133
- "- \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",
13134
- "- \u641C\u4E0D\u5230\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u7528\u6458\u8981\u6216\u8BB0\u5FC6\u7F16\u9020\u539F\u6587\u3002"
13135
- ].join("\n"),
13136
- toolNames: ["listDialogs", "readDialog", "searchDialogMessages"]
13137
- }
13138
- ];
13139
- function seedBySlug3(slug) {
13140
- const seed = SEARCH_DIALOG_SKILL_SEEDS.find((item) => item.slug === slug);
13141
- if (!seed) {
13142
- throw new Error(`Unknown search-dialog skill slug: ${slug}`);
13143
- }
13144
- return seed;
13145
- }
13146
- function buildSearchDialogSkillConfig(slug) {
13147
- const seed = seedBySlug3(slug);
13148
- return {
13149
- version: "0.1",
13150
- kind: "skill",
13151
- id: buildSearchDialogSkillId(slug),
13152
- name: seed.title,
13153
- description: seed.description,
13154
- ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
13155
- };
13156
- }
13157
- function buildSearchDialogSkillContentBySlug(slug) {
13158
- const seed = seedBySlug3(slug);
13159
- const skillConfig = buildSearchDialogSkillConfig(slug);
13160
- return buildSkillDocMarkdown({
13161
- body: seed.body,
13162
- skillConfig
13163
- });
13164
- }
13165
-
13166
- // packages/ai/skills/searchSpaceSkill.ts
13167
- var SEARCH_SPACE_SKILL_SLUGS = [
13168
- "search-all-spaces"
13169
- ];
13170
- function deterministicId4(prefix, seed) {
13171
- let h = 2166136261;
13172
- for (let i = 0; i < seed.length; i++) {
13173
- h ^= seed.charCodeAt(i);
13174
- h = h * 16777619 >>> 0;
13175
- }
13176
- const suffix = h.toString(36).toUpperCase().padStart(14, "0");
13177
- return (prefix + suffix).slice(0, 26);
13178
- }
13179
- function normalizeSkillSeed4(input) {
13180
- return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
13181
- }
13182
- function buildSearchSpaceSkillId(slug) {
13183
- return deterministicId4("01SK", normalizeSkillSeed4(slug) || slug);
13184
- }
13185
- function buildSearchSpaceSkillPageKey(userId, slug) {
13186
- return `page-${userId}-${buildSearchSpaceSkillId(slug)}`;
13187
- }
13188
- var SEARCH_SPACE_SKILL_SEEDS = [
13189
- {
13190
- slug: "search-all-spaces",
13191
- title: "\u5168\u7A7A\u95F4\u641C\u7D22",
13192
- 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",
13193
- body: [
13194
- "\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",
13195
- "",
13196
- "## \u4EC0\u4E48\u65F6\u5019\u7528",
13197
- "- \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",
13198
- "- \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",
13199
- "- \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",
13200
- "",
13201
- "## \u8C03\u7528\u65B9\u5F0F",
13202
- '`search_all_spaces({ query: "<\u5173\u952E\u8BCD>" })`',
13203
- "- query\uFF1A\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5339\u914D\u6807\u9898\u4E0E\u6587\u4EF6\u540D\uFF08contentKey\uFF09\u3002",
13204
- "- \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",
13205
- "",
13206
- "## \u8BED\u4E49\u4E0E\u8FB9\u754C",
13207
- "- \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",
13208
- "- \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",
13209
- "- \u6CA1\u6709\u547D\u4E2D\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u7F16\u9020\u5185\u5BB9\u6216\u7A7A\u95F4\u5F52\u5C5E\u3002",
13210
- "- \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"
13211
- ].join("\n"),
13212
- toolNames: ["search_all_spaces"]
13213
- }
13214
- ];
13215
- function seedBySlug4(slug) {
13216
- const seed = SEARCH_SPACE_SKILL_SEEDS.find((item) => item.slug === slug);
13217
- if (!seed) {
13218
- throw new Error(`Unknown search-space skill slug: ${slug}`);
13219
- }
13220
- return seed;
13221
- }
13222
- function buildSearchSpaceSkillConfig(slug) {
13223
- const seed = seedBySlug4(slug);
13224
- return {
13225
- version: "0.1",
13226
- kind: "skill",
13227
- id: buildSearchSpaceSkillId(slug),
13228
- name: seed.title,
13229
- description: seed.description,
13230
- ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
13231
- };
13232
- }
13233
- function buildSearchSpaceSkillContentBySlug(slug) {
13234
- const seed = seedBySlug4(slug);
13235
- const skillConfig = buildSearchSpaceSkillConfig(slug);
13236
- return buildSkillDocMarkdown({
13237
- body: seed.body,
13238
- skillConfig
13239
- });
13240
- }
13241
-
13242
- // packages/ai/skills/builtinSkillRegistry.ts
13243
- var codePlannerContentBySlug = /* @__PURE__ */ (() => {
13244
- const cache = /* @__PURE__ */ new Map();
13245
- return (slug) => {
13246
- if (cache.size === 0) {
13247
- for (const page of buildCodePlannerSkillPageRecords("platform-skill-owner")) {
13248
- cache.set(page.slug, page.content);
13249
- }
13250
- }
13251
- return cache.get(slug) ?? "";
13252
- };
13253
- })();
13254
- var OBJECT_SKILL_KINDS = Object.keys(
13255
- BUILTIN_OBJECT_SKILL_IDS
13256
- );
13257
- var SOURCES = [
13258
- {
13259
- slugs: OBJECT_SKILL_KINDS,
13260
- buildSkillId: (kind) => BUILTIN_OBJECT_SKILL_IDS[kind],
13261
- buildPageKey: (userId, kind) => buildBuiltinObjectSkillDbKey(kind, userId),
13262
- buildConfig: buildBuiltinObjectSkillConfig,
13263
- buildContent: buildBuiltinObjectSkillPageContent
13264
- },
13265
- {
13266
- slugs: CODING_SKILL_SLUGS,
13267
- buildSkillId: buildCodingSkillId,
13268
- buildPageKey: buildCodingSkillPageKey,
13269
- buildConfig: buildCodingSkillConfig,
13270
- buildContent: buildCodingSkillContentBySlug
13271
- },
13272
- {
13273
- slugs: SPECIALIST_SKILL_SLUGS,
13274
- buildSkillId: buildSpecialistSkillId,
13275
- buildPageKey: buildSpecialistSkillPageKey,
13276
- buildConfig: buildSpecialistSkillConfig,
13277
- buildContent: buildSpecialistSkillContentBySlug
13278
- },
13279
- {
13280
- slugs: CODE_PLANNER_SKILL_SLUGS,
13281
- buildSkillId: buildCodePlannerSkillId,
13282
- buildPageKey: buildCodePlannerSkillPageKey,
13283
- buildConfig: buildCodePlannerSkillConfig,
13284
- buildContent: codePlannerContentBySlug
13285
- },
13286
- {
13287
- slugs: SEARCH_DIALOG_SKILL_SLUGS,
13288
- buildSkillId: buildSearchDialogSkillId,
13289
- buildPageKey: buildSearchDialogSkillPageKey,
13290
- buildConfig: buildSearchDialogSkillConfig,
13291
- buildContent: buildSearchDialogSkillContentBySlug
13292
- },
13293
- {
13294
- slugs: SEARCH_SPACE_SKILL_SLUGS,
13295
- buildSkillId: buildSearchSpaceSkillId,
13296
- buildPageKey: buildSearchSpaceSkillPageKey,
13297
- buildConfig: buildSearchSpaceSkillConfig,
13298
- buildContent: buildSearchSpaceSkillContentBySlug
13299
- }
13300
- ];
13301
- var buildRegistry = () => {
13302
- const entries = [];
13303
- const seenSlugs = /* @__PURE__ */ new Set();
13304
- for (const source of SOURCES) {
13305
- for (const slug of source.slugs) {
13306
- if (seenSlugs.has(slug)) {
13307
- throw new Error(`Duplicate builtin skill slug across sources: ${slug}`);
13308
- }
13309
- seenSlugs.add(slug);
13310
- const config = source.buildConfig(slug);
13311
- entries.push({
13312
- slug,
13313
- skillId: source.buildSkillId(slug),
13314
- title: config.name || slug,
13315
- config,
13316
- content: source.buildContent(slug),
13317
- buildPageKey: (userId) => source.buildPageKey(userId, slug)
13318
- });
13319
- }
13320
- }
13321
- return entries;
13322
- };
13323
- var REGISTRY = buildRegistry();
13324
- var BY_SLUG = new Map(REGISTRY.map((entry) => [entry.slug, entry]));
13325
- var BY_SKILL_ID = new Map(REGISTRY.map((entry) => [entry.skillId, entry]));
13326
- var BY_LOWER_NAME = new Map(
13327
- REGISTRY.map((entry) => [entry.title.trim().toLowerCase(), entry])
13328
- );
13329
- var listBuiltinSkills = () => REGISTRY;
13330
- var resolveBuiltinSkillEntry = (identifier) => {
13331
- const raw = typeof identifier === "string" ? identifier.trim() : "";
13332
- if (!raw) return null;
13333
- const bySlug = BY_SLUG.get(raw);
13334
- if (bySlug) return bySlug;
13335
- const byId = BY_SKILL_ID.get(raw);
13336
- if (byId) return byId;
13337
- if (raw.startsWith("page-")) {
13338
- for (const entry of REGISTRY) {
13339
- if (raw.endsWith(`-${entry.skillId}`)) return entry;
13340
- }
13341
- }
13342
- return null;
13343
- };
13344
- var resolveBuiltinSkillByName = (identifier) => {
13345
- const raw = typeof identifier === "string" ? identifier.trim() : "";
13346
- if (!raw) return null;
13347
- return resolveBuiltinSkillEntry(raw) ?? BY_LOWER_NAME.get(raw.toLowerCase()) ?? null;
13348
- };
13349
- var resolveBuiltinSkillPage = (identifier) => {
13350
- const entry = resolveBuiltinSkillEntry(identifier);
13351
- if (!entry) return null;
13352
- const raw = typeof identifier === "string" ? identifier.trim() : entry.slug;
13353
- return {
13354
- dbKey: raw || entry.slug,
13355
- title: entry.title,
13356
- content: entry.content,
13357
- meta: { kind: "skill", skillConfig: entry.config },
13358
- ...entry.config.toolNames?.length ? { tools: [...entry.config.toolNames] } : {}
13359
- };
13360
- };
13361
- var CAPABILITIES = CAPABILITY_PACKS.map(
13362
- (pack) => ({
13363
- kind: "capability",
13364
- slug: pack.id,
13365
- title: pack.label,
13366
- description: pack.description,
13367
- toolNames: pack.tools,
13368
- ...pack.promptPatch ? { promptPatch: pack.promptPatch } : {},
13369
- icon: pack.icon,
13370
- defaultEnabled: pack.defaultEnabled
13371
- })
13372
- );
13373
- var CAPABILITY_BY_SLUG = new Map(CAPABILITIES.map((c) => [c.slug, c]));
13374
- var resolveBuiltinCapability = (slug) => {
13375
- const raw = typeof slug === "string" ? slug.trim() : "";
13376
- return raw ? CAPABILITY_BY_SLUG.get(raw) ?? null : null;
13377
- };
13378
-
13379
- // packages/ai/tools/agentSkillConfig.ts
13380
- var MODES = [
13381
- "required",
13382
- "recommended",
13383
- "disabled"
13384
- ];
13385
- var asMode = (value) => typeof value === "string" && MODES.includes(value) ? value : null;
13386
- var resolveAgentSkillConfig = (source) => {
13387
- const out = {};
13388
- const skills = source?.skills;
13389
- if (skills && typeof skills === "object" && !Array.isArray(skills)) {
13390
- for (const [rawSlug, rawMode] of Object.entries(skills)) {
13391
- const slug = typeof rawSlug === "string" ? rawSlug.trim() : "";
13392
- const mode = asMode(rawMode);
13393
- if (slug && mode) out[slug] = mode;
13394
- }
13395
- return out;
13396
- }
13397
- for (const slug of asTrimmedNonEmptyStringArray(source?.enabledPacks) ?? []) {
13398
- out[slug] = "required";
13399
- }
13400
- return out;
13401
- };
13402
- var resolveAgentRequiredPackIds = (source) => {
13403
- const config = resolveAgentSkillConfig(source);
13404
- return Object.keys(config).filter((slug) => config[slug] === "required");
13405
- };
13406
- var resolveAgentRecommendedSkillNames = (source, lookup) => {
13407
- const config = resolveAgentSkillConfig(source);
13408
- const resolve = lookup ?? defaultSkillTitleLookup;
13409
- const out = [];
13410
- for (const slug of Object.keys(config)) {
13411
- if (config[slug] !== "recommended") continue;
13412
- const title = resolve(slug)?.title;
13413
- out.push(title || slug);
13414
- }
13415
- return out;
13416
- };
13417
- var defaultSkillTitleLookup = (slug) => {
13418
- const cap = resolveBuiltinCapability(slug);
13419
- if (cap) return { title: cap.title };
13420
- const skill = resolveBuiltinSkillEntry(slug);
13421
- return skill ? { title: skill.title } : null;
13422
- };
13423
- var isAgentSkillDisabled = (source, slug) => resolveAgentSkillConfig(source)[slug] === "disabled";
13424
-
13425
12604
  // packages/ai/tools/loadSkillTool.ts
13426
12605
  var loadSkillFunctionSchema = {
13427
12606
  name: "loadSkill",
@@ -14014,39 +13193,6 @@ async function importDataFunc(args, thunkApi) {
14014
13193
  }
14015
13194
  }
14016
13195
 
14017
- // packages/render/table/utils/tableSerialization.ts
14018
- var fetchAndSerializeTable = async (tableMeta, db, options = {}) => {
14019
- const tenantId = tableMeta.tenantId;
14020
- const tableId = tableMeta.tableId;
14021
- const results = await fetchAndCacheTableRows({
14022
- db,
14023
- tenantId,
14024
- tableId,
14025
- token: options.token,
14026
- remoteServers: options.remoteServers ?? []
14027
- });
14028
- const columns = tableMeta.columns || [];
14029
- const headerRow = columns.map((c) => c.label || c.name);
14030
- const separatorRow = columns.map(() => "---");
14031
- let tableMd = "";
14032
- if (columns.length > 0) {
14033
- tableMd = `| ${headerRow.join(" | ")} |
14034
- | ${separatorRow.join(" | ")} |
14035
- `;
14036
- results.forEach((row) => {
14037
- const rowData = columns.map((col) => {
14038
- const val = row[col.name];
14039
- return val === void 0 || val === null ? "" : String(val).replace(/\|/g, "\\|");
14040
- });
14041
- tableMd += `| ${rowData.join(" | ")} |
14042
- `;
14043
- });
14044
- } else {
14045
- tableMd = "(No columns defined for this table)";
14046
- }
14047
- return { rows: results, markdown: tableMd };
14048
- };
14049
-
14050
13196
  // packages/ai/tools/readFileTool.ts
14051
13197
  var readFileFunctionSchema = {
14052
13198
  name: "readFile",
@@ -14774,7 +13920,7 @@ async function deleteDialogsFunc(args, thunkApi) {
14774
13920
  const deletedDialogIds = [];
14775
13921
  const deletedDialogKeys = [];
14776
13922
  const failures = [];
14777
- const { deleteDialog } = await import("./dialogSlice-UDOKNDHB.js");
13923
+ const { deleteDialog } = await import("./dialogSlice-EKKVFKBJ.js");
14778
13924
  for (const target of targets) {
14779
13925
  try {
14780
13926
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -15043,7 +14189,7 @@ var readSkillDocFunctionSchema = {
15043
14189
  }
15044
14190
  };
15045
14191
  async function readSkillDocFunc(args, thunkApi) {
15046
- const { buildReadDocResult } = await import("./readDocTool-TOHRYJHP.js");
14192
+ const { buildReadDocResult } = await import("./readDocTool-MXM3T6PE.js");
15047
14193
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
15048
14194
  if (typeof id !== "string" || !id.trim()) {
15049
14195
  throw new Error("readSkillDoc requires id or doc.");
@@ -17603,7 +16749,12 @@ var inlineCssUrlAssets = async (args) => {
17603
16749
  const assetUrl = new URL(rawRef, args.cssUrl).toString();
17604
16750
  if (!replacements.has(rawRef)) {
17605
16751
  const bytes = await fetchBytes(assetUrl, args.fetchImpl);
17606
- const base64 = Buffer.from(bytes).toString("base64");
16752
+ const chunkSize = 32766;
16753
+ let base64 = "";
16754
+ const u8 = new Uint8Array(bytes);
16755
+ for (let i = 0; i < u8.length; i += chunkSize) {
16756
+ base64 += btoa(String.fromCharCode(...u8.subarray(i, i + chunkSize)));
16757
+ }
17607
16758
  replacements.set(
17608
16759
  rawRef,
17609
16760
  `data:${guessMimeType(assetUrl)};base64,${base64}`
@@ -19718,7 +18869,7 @@ var cloudflareCrawlStatusFunctionSchema = {
19718
18869
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
19719
18870
  const { jobId, limit, status, cursor } = args;
19720
18871
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
19721
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-WVTUYOFM.js");
18872
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-ARGFDJAG.js");
19722
18873
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
19723
18874
  const params = new URLSearchParams();
19724
18875
  if (limit !== void 0) params.set("limit", String(limit));
@@ -20493,7 +19644,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
20493
19644
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
20494
19645
  async function addImageContentToSpace(input) {
20495
19646
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
20496
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-MPGMBJTQ.js")).addContentAction;
19647
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-NCURJ6PK.js")).addContentAction;
20497
19648
  await addContentAction2(
20498
19649
  {
20499
19650
  spaceId: input.spaceId,
@@ -24066,162 +23217,6 @@ ${resultStr}
24066
23217
  };
24067
23218
  }
24068
23219
 
24069
- // packages/ai/tools/toolRunStore.ts
24070
- var import_react = __toESM(require_react());
24071
- var createToolRunId = () => `toolrun_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
24072
- var runsById = /* @__PURE__ */ new Map();
24073
- var listeners = /* @__PURE__ */ new Set();
24074
- var version = 0;
24075
- var notify = () => {
24076
- version += 1;
24077
- for (const listener of listeners) {
24078
- try {
24079
- listener();
24080
- } catch {
24081
- }
24082
- }
24083
- };
24084
- function toolRunStarted(payload) {
24085
- const {
24086
- id,
24087
- messageId,
24088
- toolName,
24089
- behavior,
24090
- inputSummary,
24091
- startedAt,
24092
- interaction,
24093
- input
24094
- } = payload;
24095
- runsById.set(id, {
24096
- id,
24097
- messageId,
24098
- toolName,
24099
- behavior,
24100
- inputSummary,
24101
- status: "running",
24102
- startedAt: startedAt ?? Date.now(),
24103
- interaction,
24104
- input,
24105
- error: void 0,
24106
- finishedAt: void 0,
24107
- outputSummary: void 0,
24108
- steps: void 0
24109
- });
24110
- notify();
24111
- }
24112
- function toolRunSetPending(payload) {
24113
- const { id } = payload;
24114
- const run = runsById.get(id);
24115
- if (run) {
24116
- run.status = "pending";
24117
- notify();
24118
- }
24119
- }
24120
- function toolRunSucceeded(payload) {
24121
- const { id, outputSummary, steps, finishedAt } = payload;
24122
- const run = runsById.get(id);
24123
- if (run) {
24124
- run.status = "succeeded";
24125
- run.outputSummary = outputSummary;
24126
- if (steps !== void 0) {
24127
- run.steps = steps;
24128
- }
24129
- run.finishedAt = finishedAt ?? Date.now();
24130
- notify();
24131
- }
24132
- }
24133
- function toolRunUpdated(payload) {
24134
- const { id, outputSummary, steps } = payload;
24135
- const run = runsById.get(id);
24136
- if (run) {
24137
- if (outputSummary !== void 0) {
24138
- run.outputSummary = outputSummary;
24139
- }
24140
- if (steps !== void 0) {
24141
- run.steps = steps;
24142
- }
24143
- notify();
24144
- }
24145
- }
24146
- function toolRunFailed(payload) {
24147
- const { id, error, outputSummary, steps, finishedAt } = payload;
24148
- const run = runsById.get(id);
24149
- if (run) {
24150
- run.status = "failed";
24151
- run.error = error;
24152
- if (outputSummary !== void 0) {
24153
- run.outputSummary = outputSummary;
24154
- }
24155
- if (steps !== void 0) {
24156
- run.steps = steps;
24157
- }
24158
- run.finishedAt = finishedAt ?? Date.now();
24159
- notify();
24160
- }
24161
- }
24162
- function getAllToolRuns() {
24163
- return Array.from(runsById.values()).sort((a, b) => a.startedAt - b.startedAt);
24164
- }
24165
- function getToolRunById(id) {
24166
- return runsById.get(id);
24167
- }
24168
- var executeToolRun = createAsyncThunk(
24169
- "toolRun/executeToolRun",
24170
- async ({ id, inputOverride }, thunkApi) => {
24171
- const run = getToolRunById(id);
24172
- if (!run) {
24173
- throw new Error(`ToolRun not found: ${id}`);
24174
- }
24175
- const executionInput = inputOverride ?? run.input;
24176
- if (!executionInput) {
24177
- throw new Error(`ToolRun ${id} has no input to execute with.`);
24178
- }
24179
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-5V6FHWQU.js");
24180
- const { executor } = findToolExecutor2(run.toolName);
24181
- toolRunStarted({
24182
- id: run.id,
24183
- messageId: run.messageId,
24184
- toolName: run.toolName,
24185
- behavior: run.behavior,
24186
- inputSummary: run.inputSummary,
24187
- startedAt: Date.now(),
24188
- interaction: run.interaction,
24189
- input: executionInput
24190
- });
24191
- try {
24192
- const result = await executor(executionInput, thunkApi, {
24193
- parentMessageId: run.messageId
24194
- });
24195
- toolRunSucceeded({
24196
- id: run.id,
24197
- outputSummary: result?.displayData || ""
24198
- });
24199
- if (run.toolName === "deleteSpaces") {
24200
- const latestState = thunkApi.getState();
24201
- const userId = latestState.auth?.currentUser?.userId;
24202
- if (userId) {
24203
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-BXDCO6PT.js");
24204
- await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
24205
- }
24206
- }
24207
- return {
24208
- id: run.id,
24209
- rawData: result?.rawData,
24210
- displayData: result?.displayData
24211
- };
24212
- } catch (e) {
24213
- const msg = toErrorMessage(e);
24214
- const structured = getToolResultErrorData(e);
24215
- toolRunFailed({
24216
- id: run.id,
24217
- error: msg,
24218
- outputSummary: asOptionalTrimmedString(structured?.displayData)
24219
- });
24220
- throw e;
24221
- }
24222
- }
24223
- );
24224
-
24225
23220
  // packages/app/actions/syncAppRecord.ts
24226
23221
  var syncAppRecord = (appKey, appRecord, options = {}) => async (_dispatch, getState, extra) => {
24227
23222
  if (!appKey || !appRecord) return;
@@ -26364,14 +25359,6 @@ async function searchAllSpacesFunc(args, thunkApi) {
26364
25359
  };
26365
25360
  }
26366
25361
 
26367
- // packages/core/clipMultilineText.ts
26368
- function clipMultilineText(value, max) {
26369
- const trimmed = value.trim();
26370
- if (trimmed.length <= max) return trimmed;
26371
- return `${trimmed.slice(0, max)}
26372
- ...[truncated ${trimmed.length - max} chars]`;
26373
- }
26374
-
26375
25362
  // packages/ai/tools/dialogMessageSearch.ts
26376
25363
  var normalizeDialogSearchText = (value) => String(value ?? "").trim();
26377
25364
  var clampDialogSearchNumber = (value, fallback, min, max) => {
@@ -26683,7 +25670,7 @@ async function updateDocFunc(args, thunkApi) {
26683
25670
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
26684
25671
  };
26685
25672
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
26686
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-N66O4CGH.js");
25673
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-V7EJS4PX.js");
26687
25674
  if (getDocState().pageKey === id) {
26688
25675
  applyExternalDocUpdate({
26689
25676
  slateData: finalSlateData,
@@ -26708,7 +25695,7 @@ async function updateDocFunc(args, thunkApi) {
26708
25695
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
26709
25696
  async function dispatchSetSettings(thunkApi, changes) {
26710
25697
  const injectedSetSettings = thunkApi?.extra?.setSettings;
26711
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-IDUM4LWU.js")).setSettings;
25698
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-4M37TN7V.js")).setSettings;
26712
25699
  await thunkApi.dispatch(setSettings(changes)).unwrap();
26713
25700
  }
26714
25701
  var updateUserPreferenceProfileFunctionSchema = {
@@ -28956,29 +27943,17 @@ var findToolExecutor = (rawName) => {
28956
27943
  };
28957
27944
 
28958
27945
  export {
27946
+ shouldBlockForGptPro,
27947
+ i18n_default,
27948
+ formatAgentListCard,
28959
27949
  readXPostFunctionSchema,
28960
27950
  readXPostFunc,
28961
27951
  readXhsProfileFunctionSchema,
28962
27952
  readXhsProfileFunc,
28963
- setTodoListFunc,
28964
- resolveBuiltinSkillPage,
28965
- resolveAgentRequiredPackIds,
28966
- resolveAgentRecommendedSkillNames,
28967
- shouldBlockForGptPro,
28968
- i18n_default,
28969
- clipMultilineText,
28970
- fetchAndSerializeTable,
28971
- getToolResultErrorData,
28972
- createToolRunId,
28973
- toolRunStarted,
28974
- toolRunSetPending,
28975
- toolRunSucceeded,
28976
- toolRunFailed,
28977
- getAllToolRuns,
27953
+ rememberMemoryFunctionSchema,
28978
27954
  waitForAbortableDelay,
28979
27955
  createSSEParser,
28980
- formatAgentListCard,
28981
- rememberMemoryFunctionSchema,
27956
+ setTodoListFunc,
28982
27957
  TOOL_GROUP_META,
28983
27958
  toolQueryFunctionSchema,
28984
27959
  toolQueryFunc,