nolo-cli 0.32.0 → 0.33.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 (179) hide show
  1. package/README.md +6 -12
  2. package/{_executeModel-LTMSIBS4.js → _executeModel-YXWAXPWQ.js} +77 -67
  3. package/{action-HI3VRQLP.js → action-OQWPNKAH.js} +17 -15
  4. package/{addContentAction-NCURJ6PK.js → addContentAction-YVINZQTF.js} +14 -13
  5. package/{addDialogAgentAction-RCY4ECF4.js → addDialogAgentAction-6IOCIEPI.js} +14 -13
  6. package/{agentDeleteCommand-D3MYZK6E.js → agentDeleteCommand-VGHWJN5T.js} +44 -60
  7. package/{agentEmailCommands-6BXS574I.js → agentEmailCommands-ZLRF35I3.js} +91 -81
  8. package/{agentGrantCommands-E7ZZFRHK.js → agentGrantCommands-2LEZDADN.js} +2 -2
  9. package/{agentListCommands-SF3HEUTT.js → agentListCommands-OHZJ7AFP.js} +75 -79
  10. package/{agentMachineCommands-YARVXRR6.js → agentMachineCommands-62PHPGTK.js} +43 -59
  11. package/{agentPullCommand-ARSIDNVC.js → agentPullCommand-TSWAJPS2.js} +5 -5
  12. package/agentRecordCommands-CW2JWERD.js +113 -0
  13. package/agentRunCommand-O4HV7YWA.js +131 -0
  14. package/{agentRuntimeLocal-ATGJY6WC.js → agentRuntimeLocal-4PSBNUOE.js} +37 -51
  15. package/{agentSlice-4XWW344Y.js → agentSlice-OUTQ5O72.js} +16 -14
  16. package/{appDeleteCommands-63JO7RXS.js → appDeleteCommands-VTDBVHYR.js} +40 -56
  17. package/{appDeployCommands-Y7EWYUGM.js → appDeployCommands-WOUP7MDA.js} +40 -56
  18. package/{appDeployStatusCommands-ZBEY3DWB.js → appDeployStatusCommands-N2NWZKEN.js} +40 -56
  19. package/{appGetCommands-QSSOSEYL.js → appGetCommands-GYKLWWCA.js} +40 -56
  20. package/{appListCommands-PH3XWNDX.js → appListCommands-RUWBSEJK.js} +40 -56
  21. package/{authCommand-BBDHMSO6.js → authCommand-YVXVH25I.js} +21 -20
  22. package/{authCommands-4UDEKRE6.js → authCommands-WTW6MEYS.js} +10 -10
  23. package/chatQueueReduxAdapter-2QJAD4KQ.js +181 -0
  24. package/{chunk-EEF23OOK.js → chunk-266VUBLK.js} +7 -7
  25. package/{chunk-TEYN42N3.js → chunk-2IVEXF7P.js} +11 -4
  26. package/{chunk-2HXKAPH7.js → chunk-2QLAVHVK.js} +6 -6
  27. package/{chunk-WTGCTVJG.js → chunk-2QTEYCR7.js} +3 -6
  28. package/{chunk-DOISARTV.js → chunk-2UECQ7RE.js} +1 -1
  29. package/{chunk-E3APEOIM.js → chunk-3GZXL6FM.js} +4 -19
  30. package/{chunk-KGEVMUMI.js → chunk-3RUW3ONU.js} +11 -11
  31. package/{chunk-RXVX5LFR.js → chunk-3UG2IIZ3.js} +1 -1
  32. package/{chunk-O5OMJPPF.js → chunk-3WXRAHCG.js} +6 -5
  33. package/{chunk-V54H24CQ.js → chunk-4F5M2MW5.js} +3 -3
  34. package/{chunk-2ZRP5RUG.js → chunk-4OV7DXFJ.js} +12 -11
  35. package/{chunk-W367V5CH.js → chunk-54BAYVCY.js} +404 -117
  36. package/{chunk-GAF5X6B7.js → chunk-5QW3O3ET.js} +284 -310
  37. package/{chunk-DLWCWUNW.js → chunk-64OVNZXE.js} +1197 -757
  38. package/{chunk-ODS2MVMU.js → chunk-66CWPJK2.js} +19 -303
  39. package/{chunk-PTHDLIRB.js → chunk-6KOS7ZBZ.js} +1 -1
  40. package/{chunk-MXFQHRSS.js → chunk-6XIE5ZGI.js} +1 -1
  41. package/{chunk-ATK5WJOA.js → chunk-6YXDOOSH.js} +4 -4
  42. package/{chunk-SWYMCHM7.js → chunk-75U775RZ.js} +69 -1
  43. package/{chunk-UDA3ZYLW.js → chunk-7YYHKBJP.js} +31 -72
  44. package/chunk-ADLYMQB6.js +642 -0
  45. package/{chunk-ZWJOGMKH.js → chunk-AETZ7AD6.js} +1 -1
  46. package/{chunk-43EPBPZ2.js → chunk-ASDXPOJH.js} +2 -2
  47. package/{chunk-44HACRCK.js → chunk-BANYWEYY.js} +4 -4
  48. package/chunk-BFPSVRCQ.js +1799 -0
  49. package/{chunk-TOW4E763.js → chunk-BJIRLHJR.js} +2 -0
  50. package/{chunk-ZJ2WITOO.js → chunk-BQXOGBFN.js} +2 -2
  51. package/{chunk-4PNU7W7K.js → chunk-C7H5GMXT.js} +107 -125
  52. package/chunk-CPYYM4RJ.js +98 -0
  53. package/{chunk-3GZT3L6F.js → chunk-DDVIBKIB.js} +326 -481
  54. package/{chunk-2K4NDPT5.js → chunk-DFUPZE6V.js} +20 -12
  55. package/{chunk-BGTUGS3T.js → chunk-DKMOY3QI.js} +4 -30
  56. package/chunk-EGRJC4ZN.js +91 -0
  57. package/{chunk-K6QEHQZ3.js → chunk-EKLRRZIN.js} +1 -1
  58. package/{chunk-6HYVJV7B.js → chunk-ESHYE7WU.js} +2 -1
  59. package/{chunk-XFG3BAKN.js → chunk-FMEVI5TG.js} +65 -0
  60. package/{chunk-U4TRT5V4.js → chunk-GEPHJJW4.js} +1 -1
  61. package/chunk-GJXRIOLS.js +241 -0
  62. package/{chunk-VP4WJWKW.js → chunk-GM6PU7B6.js} +431 -345
  63. package/chunk-HS7MLR74.js +38 -0
  64. package/{chunk-3AUWC6EM.js → chunk-HUCT7HID.js} +5 -84
  65. package/chunk-IDAU4UFS.js +437 -0
  66. package/{chunk-Q76I4SXI.js → chunk-IHEC7VBF.js} +1 -1
  67. package/{chunk-OWHNFZNW.js → chunk-IKWTTKWG.js} +4 -4
  68. package/{chunk-3LY4F7SV.js → chunk-INZZJSQF.js} +348 -331
  69. package/{chunk-ZJH3LKEW.js → chunk-IR6W62Q6.js} +102 -15
  70. package/{chunk-RH53LMEJ.js → chunk-J44TVX2O.js} +2 -4
  71. package/{chunk-CF2WZF4N.js → chunk-J6WH4PYZ.js} +0 -8
  72. package/chunk-KHCLMKZZ.js +3062 -0
  73. package/{chunk-WHLVPK32.js → chunk-KMSZPTM6.js} +27 -3
  74. package/{chunk-L3GCUVOH.js → chunk-KSRFVP36.js} +1 -1
  75. package/{chunk-XDHHF73Q.js → chunk-LUIHOUZC.js} +95 -95
  76. package/{chunk-UOJRKY5J.js → chunk-M2YMQOLC.js} +44 -53
  77. package/chunk-M3JEW6N6.js +193 -0
  78. package/{chunk-MITD7CON.js → chunk-MDIAECHA.js} +1461 -301
  79. package/{chunk-IXZX5CJK.js → chunk-MQRZ5QUH.js} +1 -1
  80. package/{chunk-3ASDTTEI.js → chunk-MRWGHF56.js} +2 -0
  81. package/{chunk-Q3CSL43H.js → chunk-N4XRDM26.js} +1 -1
  82. package/{chunk-D34RI6NI.js → chunk-NNWHHCVP.js} +75 -1
  83. package/{chunk-CAENRKNJ.js → chunk-OR2HNLVO.js} +126 -88
  84. package/chunk-OW765XBU.js +10 -0
  85. package/{chunk-VMWR7VNI.js → chunk-PRMMCFIN.js} +13 -9
  86. package/{chunk-JZPBVBIY.js → chunk-QTZD6HBK.js} +18 -8
  87. package/chunk-RCFIB45Q.js +28 -0
  88. package/{chunk-7S54ZGF6.js → chunk-RJKIB55Y.js} +256 -12
  89. package/chunk-RPRRIFXV.js +231 -0
  90. package/chunk-RQFO3CAF.js +300 -0
  91. package/chunk-RY57GLGW.js +188 -0
  92. package/{chunk-YHGHADBQ.js → chunk-SCUETSRP.js} +4 -4
  93. package/{chunk-TA6EA2A3.js → chunk-TFK3HUNQ.js} +182 -20
  94. package/{chunk-LAXMH7JY.js → chunk-UM4H3URE.js} +18 -15
  95. package/{chunk-6YABCOFU.js → chunk-UNHKVD2N.js} +1 -1
  96. package/{chunk-G5GVZAXF.js → chunk-UNOTBWZZ.js} +15 -19
  97. package/{chunk-GE6IWA5N.js → chunk-UNZDCI3O.js} +126 -1
  98. package/chunk-URMS4XY2.js +10 -0
  99. package/{chunk-SFWZUTCI.js → chunk-VBUQYOX7.js} +2 -2
  100. package/{chunk-FXFGNOT2.js → chunk-VFVCYIRQ.js} +1 -1
  101. package/chunk-VIDPVFP3.js +20 -0
  102. package/{chunk-5RDLGLAP.js → chunk-WJSW43QZ.js} +4 -7
  103. package/{chunk-CF7S2RYZ.js → chunk-WLH5BAKX.js} +6 -6
  104. package/{chunk-VVEH6XUE.js → chunk-X2DAEZ3X.js} +1 -1
  105. package/{chunk-2IJAKBK2.js → chunk-X664KVEV.js} +426 -246
  106. package/{chunk-3FCNXC2J.js → chunk-XRO5VGQ6.js} +3735 -1394
  107. package/chunk-Y5GCAMGP.js +9 -0
  108. package/{chunk-O3JR45Q2.js → chunk-YBMI5JAH.js} +44 -44
  109. package/{chunk-V42OE5HT.js → chunk-YDTYDA5W.js} +3 -3
  110. package/chunk-YYLHWIW6.js +48 -0
  111. package/{chunk-AOS5IN2I.js → chunk-ZHYK3N56.js} +1 -1
  112. package/{chunk-PJ2DDQQM.js → chunk-ZURFOV5J.js} +2 -2
  113. package/{chunk-3UGKATZQ.js → chunk-ZWS6DUHX.js} +26 -435
  114. package/chunk-ZZ2MH7LE.js +84 -0
  115. package/{cliExecutor-BBUVQU4L.js → cliExecutor-DW3PHGEL.js} +2 -2
  116. package/{clipboardy-BVE3LVEH.js → clipboardy-MMBYVRLF.js} +166 -372
  117. package/{codingSkills-V35TRR4Y.js → codingSkills-DY5MINPG.js} +5 -4
  118. package/{createAgentAutomationAction-WLRNE7C4.js → createAgentAutomationAction-H6ZRPXBR.js} +41 -31
  119. package/createDialogAction-UJ6LFJYM.js +61 -0
  120. package/{createPageAction-7YROVZ3W.js → createPageAction-KVPT3IRK.js} +57 -47
  121. package/{db-6DPSJ6WT.js → db-3H3JECGY.js} +45 -5
  122. package/{dbSlice-BBL3PEVW.js → dbSlice-UI2VCBLG.js} +13 -12
  123. package/{deleteFile-RJTEPOT4.js → deleteFile-XQXPBFFB.js} +7 -6
  124. package/dialogCommands-6ASXJP3H.js +82 -0
  125. package/{dialogSlice-N4HPG6HM.js → dialogSlice-B7KCGHMY.js} +37 -29
  126. package/{docCreateCommands-GRA5BHSA.js → docCreateCommands-S4E4MKVC.js} +42 -56
  127. package/{docDeleteCommands-ONIJM5MD.js → docDeleteCommands-M7XLKWRM.js} +44 -58
  128. package/{docReadCommands-H55VQ2US.js → docReadCommands-LSCMW2FR.js} +42 -56
  129. package/{docStore-B5AHDNW5.js → docStore-ZYWZWIRB.js} +40 -30
  130. package/{docUpdateCommands-ZQIQVGC2.js → docUpdateCommands-OMRBAFOB.js} +45 -59
  131. package/{fetchMessages-VPPQDDZ4.js → fetchMessages-7QRCCRYK.js} +3 -3
  132. package/{getPricing-QO5TYNCK.js → getPricing-L2ENXWHV.js} +7 -6
  133. package/{handleSendMessageAction-IN5XX5U7.js → handleSendMessageAction-Y2XKODRT.js} +39 -31
  134. package/index.js +74 -74
  135. package/{lib-FYYBQIXS.js → lib-2ZTNRXR4.js} +432 -183
  136. package/{localDialogRead-3DBXVYXS.js → localDialogRead-SLMPV5SK.js} +2 -2
  137. package/{localRuntimeAuthority-NDUA2D7Y.js → localRuntimeAuthority-S77B5QVB.js} +10 -4
  138. package/{localRuntimeDb-GKYRBWLQ.js → localRuntimeDb-N3H3HQ7G.js} +1 -1
  139. package/{machineCommands-H3UMKE76.js → machineCommands-62RUZVSW.js} +95 -85
  140. package/{machineInfo-M6KB6HZN.js → machineInfo-66ZFUMLE.js} +1 -1
  141. package/machineWsRunDispatch-L3HD3FSF.js +129 -0
  142. package/{models-WDUTTYFS.js → models-OX2S5C6Q.js} +2 -2
  143. package/{offlineMarxistsAgentCommand-E6LUG63A.js → offlineMarxistsAgentCommand-GEH6SNNA.js} +1 -1
  144. package/package.json +1 -4
  145. package/{read-64OQDO3I.js → read-2VHEHCAN.js} +8 -7
  146. package/{readDocTool-MXM3T6PE.js → readDocTool-CSWD6NPC.js} +1 -2
  147. package/{readlineWorkspace-XVJZDCSC.js → readlineWorkspace-3MOJWFM7.js} +3358 -3409
  148. package/{removeDialogAgentAction-NEKVAMSH.js → removeDialogAgentAction-2T7BPM3T.js} +19 -17
  149. package/{runAgentClientLoop-H7U53QB6.js → runAgentClientLoop-Y5UW544I.js} +73 -64
  150. package/{runtimeDoctorCommands-WI2YZUSJ.js → runtimeDoctorCommands-KHGQKT3B.js} +6 -6
  151. package/{setDialogExtraReferencesAction-WTOHQDIV.js → setDialogExtraReferencesAction-GPT37HTW.js} +15 -14
  152. package/{setPrimaryDialogAgentAction-LDJOYC4F.js → setPrimaryDialogAgentAction-3746P7IW.js} +19 -17
  153. package/{settingSlice-4M37TN7V.js → settingSlice-FIFOQ6OR.js} +16 -14
  154. package/{skillDiscovery-5U6RYAHN.js → skillDiscovery-KLLKXPUO.js} +4 -4
  155. package/{slateUtils-2M7MUTWX.js → slateUtils-VO2FU36K.js} +1 -1
  156. package/{spaceCommands-7VVKJBDV.js → spaceCommands-NKSBD5G3.js} +45 -241
  157. package/{spaceSlice-T6YK6D34.js → spaceSlice-L44CI2QR.js} +39 -61
  158. package/{streamAgentChatTurn-RQ63QFQ7.js → streamAgentChatTurn-7DU4Z2VJ.js} +1262 -150
  159. package/{switchDialogAgentAction-XVWGKR2Z.js → switchDialogAgentAction-MQTUTQHL.js} +14 -13
  160. package/syncMapping-RK2MANUX.js +43 -0
  161. package/{tableCommands-RJZ3V4TF.js → tableCommands-64FZBAI3.js} +9 -8
  162. package/{toolApiClient-ARGFDJAG.js → toolApiClient-B2MFXMEG.js} +3 -3
  163. package/tools-2JI52WJP.js +99 -0
  164. package/{tuiSummaryLlmCaller-SRZ4QQUP.js → tuiSummaryLlmCaller-EAWQ3IZX.js} +25 -21
  165. package/{updateCommands-AK2RDOFR.js → updateCommands-MNDUIKN7.js} +2 -2
  166. package/{updateDialogTitleAction-BBDSWHNG.js → updateDialogTitleAction-HW33OIJI.js} +49 -38
  167. package/agentRecordCommands-JFZRQJQ4.js +0 -103
  168. package/agentRunCommand-NOX5FLKO.js +0 -121
  169. package/chunk-AYMOSAHE.js +0 -3158
  170. package/chunk-D2BPX6DQ.js +0 -1707
  171. package/chunk-DCDL3GC4.js +0 -171
  172. package/chunk-F3MP7CP6.js +0 -73
  173. package/chunk-WZSRQNQG.js +0 -2587
  174. package/createDialogAction-Y6YV64QB.js +0 -52
  175. package/dialogCommands-XLO5CAHZ.js +0 -95
  176. package/machineWsRunDispatch-HONRUK3R.js +0 -119
  177. package/tools-KYZX3BGO.js +0 -90
  178. package/{chunk-Z5MXSEOJ.js → chunk-RQSOAMPJ.js} +2 -2
  179. package/{chunk-JDSUTNYY.js → chunk-SAQQLJZ5.js} +3 -3
@@ -4,75 +4,48 @@ import {
4
4
  isGatewayHttpStatus,
5
5
  normalizeNonNegativeMs,
6
6
  parseRetryAfterHeaderMs
7
- } from "./chunk-Z5MXSEOJ.js";
8
- import {
9
- TASK_PREVIEW_MAX,
10
- buildDelegatedTaskContent,
11
- formatListRunsCard,
12
- formatStartRunCard,
13
- formatStatusRunCard,
14
- formatStopRunCard,
15
- resolveRunLabel
16
- } from "./chunk-KXKQO4Q6.js";
7
+ } from "./chunk-RQSOAMPJ.js";
17
8
  import {
9
+ isAgentUnavailableNow,
18
10
  sortSafeAgentSummaries,
19
11
  toSafeAgentSummary
20
- } from "./chunk-TEYN42N3.js";
12
+ } from "./chunk-2IVEXF7P.js";
21
13
  import {
22
14
  getUserDataItemTimestamp,
23
15
  mergeAndDedupUserData
24
16
  } from "./chunk-KQHGZWSV.js";
25
- import {
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-D2BPX6DQ.js";
47
- import {
48
- createDocState
49
- } from "./chunk-EEF23OOK.js";
50
- import {
51
- setDialogExtraReferencesAction
52
- } from "./chunk-43EPBPZ2.js";
53
17
  import {
54
18
  readDocFunc,
55
19
  readDocFunctionSchema,
56
20
  readPageFunc,
57
- readPageFunctionSchema
58
- } from "./chunk-F3MP7CP6.js";
59
- import {
21
+ readPageFunctionSchema,
60
22
  slateToSimplifiedMarkdown
61
- } from "./chunk-SWYMCHM7.js";
23
+ } from "./chunk-75U775RZ.js";
62
24
  import {
63
- ToolApiError,
64
- buildToolRequestHeaders,
65
- callToolApi,
66
- getRequestConfig,
67
- getToolBaseUrl,
68
- getToolRequestContext
69
- } from "./chunk-44HACRCK.js";
25
+ markdownToSlate
26
+ } from "./chunk-INZZJSQF.js";
70
27
  import {
71
- createDialogAction
72
- } from "./chunk-TA6EA2A3.js";
28
+ extractMentionsFromSlate
29
+ } from "./chunk-GM6PU7B6.js";
73
30
  import {
74
- markdownToSlate
75
- } from "./chunk-3LY4F7SV.js";
31
+ slateToRenderMarkdown
32
+ } from "./chunk-63W5N6P3.js";
33
+ import {
34
+ isSkillSummaryMarker
35
+ } from "./chunk-VF4K2QE6.js";
36
+ import {
37
+ createDocState
38
+ } from "./chunk-266VUBLK.js";
39
+ import {
40
+ setDialogExtraReferencesAction
41
+ } from "./chunk-ASDXPOJH.js";
42
+ import {
43
+ BUILTIN_OBJECT_SKILL_IDS,
44
+ buildBuiltinObjectSkillConfig,
45
+ buildBuiltinObjectSkillDbKey,
46
+ buildBuiltinObjectSkillPageContent,
47
+ createDialogAction
48
+ } from "./chunk-TFK3HUNQ.js";
76
49
  import {
77
50
  addCategory,
78
51
  addContentToSpace,
@@ -80,16 +53,19 @@ import {
80
53
  createTable,
81
54
  deleteDbKey,
82
55
  deleteSpace,
56
+ fetchAndCacheTableRows,
83
57
  fetchUserData,
58
+ getAllMemberSpaces,
59
+ getCurrentSpaceId,
60
+ getCurrentSpaceIdRaw,
61
+ getViewMode,
84
62
  i18nBaseConfig,
85
63
  initReactI18next,
86
64
  instance,
87
65
  loadTableRows,
88
- selectAllMemberSpaces,
89
- selectCurrentSpaceId,
90
66
  updateContentCategory,
91
67
  updateContentTitle
92
- } from "./chunk-3FCNXC2J.js";
68
+ } from "./chunk-XRO5VGQ6.js";
93
69
  import {
94
70
  incrementFailedSteps,
95
71
  incrementStepsExecuted,
@@ -103,54 +79,104 @@ import {
103
79
  uiAskChoiceFunc,
104
80
  uiAskChoiceFunctionSchema,
105
81
  updateStep
106
- } from "./chunk-3GZT3L6F.js";
107
- import {
108
- buildDatabaseFileContentUrl
109
- } from "./chunk-BGTUGS3T.js";
82
+ } from "./chunk-DDVIBKIB.js";
110
83
  import {
111
84
  createAgent,
112
85
  runLlm,
113
86
  streamAgentChatTurn,
114
87
  updateAgent
115
- } from "./chunk-ODS2MVMU.js";
88
+ } from "./chunk-66CWPJK2.js";
116
89
  import {
117
- toErrorMessage
118
- } from "./chunk-HNMXYYJR.js";
90
+ NOLO_WORKSPACE_TOOL_NAMES,
91
+ buildAgentRuntimeAgentLookupKeys,
92
+ buildNoloSubjectRefQueryTarget,
93
+ buildNoloTableQueryRequest,
94
+ clampNoloPositiveInteger,
95
+ filterNoloDialogSubjectRefEvidence,
96
+ getNoloComparableUpdatedAt,
97
+ getNoloDialogIdFromKey,
98
+ normalizeNoloExcludeDialogIds,
99
+ normalizeNoloSpaceInput,
100
+ redactAgentRecordForWorkspaceTool,
101
+ resolveNoloDialogInput,
102
+ verifyNoloDialogSubjectRefQuery
103
+ } from "./chunk-ADLYMQB6.js";
119
104
  import {
120
- compactWhitespace
121
- } from "./chunk-DWLEOOGR.js";
105
+ buildDatabaseFileContentUrl
106
+ } from "./chunk-DKMOY3QI.js";
107
+ import {
108
+ DEFAULT_MODEL
109
+ } from "./chunk-DFUPZE6V.js";
110
+ import {
111
+ CODING_SKILL_SLUGS,
112
+ buildCodingSkillConfig,
113
+ buildCodingSkillContentBySlug,
114
+ buildCodingSkillId,
115
+ buildCodingSkillPageKey
116
+ } from "./chunk-HUCT7HID.js";
117
+ import {
118
+ CAPABILITY_PACKS
119
+ } from "./chunk-WLH5BAKX.js";
120
+ import {
121
+ buildSkillDocMarkdown,
122
+ normalizeSkillModalities,
123
+ normalizeStringArray,
124
+ parseExternalSkillMarkdown,
125
+ parseSkillDocProtocol,
126
+ resolvePageSkillMetadata
127
+ } from "./chunk-AETZ7AD6.js";
128
+ import {
129
+ canonicalizeToolName,
130
+ canonicalizeToolNames
131
+ } from "./chunk-ZZ2MH7LE.js";
132
+ import {
133
+ ToolApiError,
134
+ buildToolRequestHeaders,
135
+ callToolApi,
136
+ getRequestConfig,
137
+ getToolBaseUrl,
138
+ getToolRequestContext
139
+ } from "./chunk-BANYWEYY.js";
122
140
  import {
123
141
  getActiveDialogKey,
142
+ require_react,
124
143
  selectCurrentDialogKey,
125
144
  selectPendingRawDataByPageKey
126
- } from "./chunk-3ASDTTEI.js";
145
+ } from "./chunk-MRWGHF56.js";
127
146
  import {
128
- addContentAction,
129
- createSpaceKey,
130
- normalizeSpaceId
131
- } from "./chunk-V54H24CQ.js";
132
- import {
133
- DEFAULT_MODEL
134
- } from "./chunk-2K4NDPT5.js";
147
+ compactWhitespace
148
+ } from "./chunk-DWLEOOGR.js";
135
149
  import {
136
- slateToRenderMarkdown
137
- } from "./chunk-63W5N6P3.js";
150
+ TASK_PREVIEW_MAX,
151
+ buildDelegatedTaskContent,
152
+ formatListRunsCard,
153
+ formatStartRunCard,
154
+ formatStatusRunCard,
155
+ formatStopRunCard,
156
+ resolveRunLabel
157
+ } from "./chunk-KXKQO4Q6.js";
138
158
  import {
139
- isSkillSummaryMarker
140
- } from "./chunk-VF4K2QE6.js";
159
+ toErrorMessage
160
+ } from "./chunk-HNMXYYJR.js";
141
161
  import {
142
162
  shareResourceAction
143
- } from "./chunk-KGEVMUMI.js";
163
+ } from "./chunk-3RUW3ONU.js";
144
164
  import {
145
165
  AGENT_UPDATE_FIELD_NAMES,
166
+ nolotusId,
146
167
  normalizeAgentUpdateFieldList,
147
168
  selectAutoApproveSelfUpdateFields,
148
169
  selectCurrentServer,
149
170
  selectSyncServers
150
- } from "./chunk-G5GVZAXF.js";
171
+ } from "./chunk-UNOTBWZZ.js";
151
172
  import {
152
173
  asRecordOrEmpty
153
174
  } from "./chunk-KX6YBIHG.js";
175
+ import {
176
+ addContentAction,
177
+ createSpaceKey,
178
+ normalizeSpaceId
179
+ } from "./chunk-4F5M2MW5.js";
154
180
  import {
155
181
  patch,
156
182
  read,
@@ -159,16 +185,33 @@ import {
159
185
  selectById,
160
186
  toTimestampMs,
161
187
  write
162
- } from "./chunk-LAXMH7JY.js";
188
+ } from "./chunk-UM4H3URE.js";
189
+ import {
190
+ SEPARATOR,
191
+ createAgentKey,
192
+ dialogMessageRange,
193
+ fileKey,
194
+ isAgentKey,
195
+ isTableMetaKey,
196
+ metaKey,
197
+ rowKey,
198
+ toTrimmedString,
199
+ ulid
200
+ } from "./chunk-KMSZPTM6.js";
201
+ import {
202
+ asOptionalFiniteNumber
203
+ } from "./chunk-WWC7I6TA.js";
204
+ import {
205
+ asNonEmptyStringArray,
206
+ asTrimmedNonEmptyStringArray
207
+ } from "./chunk-I42VC5KR.js";
163
208
  import {
164
209
  asTrimmedLowercaseString
165
210
  } from "./chunk-QSJ3HFEF.js";
166
211
  import {
212
+ DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS,
167
213
  readAction
168
- } from "./chunk-ZJH3LKEW.js";
169
- import {
170
- extractCustomId
171
- } from "./chunk-TOW4E763.js";
214
+ } from "./chunk-IR6W62Q6.js";
172
215
  import {
173
216
  createAsyncThunk,
174
217
  getRuntimeServerContext,
@@ -177,65 +220,34 @@ import {
177
220
  selectIdentityUserBalance,
178
221
  selectIdentityUserId,
179
222
  selectRuntimeSnapshot
180
- } from "./chunk-2IJAKBK2.js";
223
+ } from "./chunk-X664KVEV.js";
181
224
  import {
182
225
  isAbortError
183
- } from "./chunk-5RDLGLAP.js";
184
- import {
185
- API_ENDPOINTS
186
- } from "./chunk-LCBAMY2M.js";
187
- import {
188
- DEFAULT_LOCAL_API_ORIGIN
189
- } from "./chunk-4SN6J65J.js";
190
- import {
191
- normalizeServerOrigin
192
- } from "./chunk-CF7PE763.js";
193
- import {
194
- extractMentionsFromSlate
195
- } from "./chunk-VP4WJWKW.js";
196
- import {
197
- SEPARATOR,
198
- createAgentKey,
199
- dialogMessageRange,
200
- fileKey,
201
- isAgentKey,
202
- isTableMetaKey,
203
- metaKey,
204
- rowKey,
205
- toTrimmedString,
206
- ulid
207
- } from "./chunk-WHLVPK32.js";
208
- import {
209
- asOptionalFiniteNumber
210
- } from "./chunk-WWC7I6TA.js";
226
+ } from "./chunk-WJSW43QZ.js";
211
227
  import {
212
228
  asTrimmedString
213
229
  } from "./chunk-3EUW3WEO.js";
230
+ import {
231
+ extractCustomId
232
+ } from "./chunk-BJIRLHJR.js";
214
233
  import {
215
234
  isRecord
216
235
  } from "./chunk-KUG52IAP.js";
217
236
  import {
218
- canonicalizeToolName,
219
- canonicalizeToolNames
220
- } from "./chunk-3AUWC6EM.js";
221
- import {
222
- CAPABILITY_PACKS
223
- } from "./chunk-CF7S2RYZ.js";
237
+ API_ENDPOINTS
238
+ } from "./chunk-LCBAMY2M.js";
224
239
  import {
225
- buildSkillDocMarkdown,
226
- normalizeSkillModalities,
227
- normalizeStringArray,
228
- parseExternalSkillMarkdown,
229
- parseSkillDocProtocol,
230
- resolvePageSkillMetadata
231
- } from "./chunk-ZWJOGMKH.js";
240
+ DEFAULT_LOCAL_API_ORIGIN
241
+ } from "./chunk-4SN6J65J.js";
232
242
  import {
233
- asNonEmptyStringArray,
234
- asTrimmedNonEmptyStringArray
235
- } from "./chunk-I42VC5KR.js";
243
+ normalizeServerOrigin
244
+ } from "./chunk-CF7PE763.js";
236
245
  import {
237
246
  asOptionalTrimmedString
238
247
  } from "./chunk-G3SUCT4W.js";
248
+ import {
249
+ __toESM
250
+ } from "./chunk-4VNS5WPM.js";
239
251
 
240
252
  // packages/ai/workflow/workflowExecutor.ts
241
253
  function resolveTemplates(value, results) {
@@ -521,10 +533,16 @@ async function createWorkflowFunc(args, thunkApi) {
521
533
  // packages/ai/tools/modelUsageTools.ts
522
534
  var queryModelUsageFunctionSchema = {
523
535
  name: "queryModelUsage",
524
- description: "\u67E5\u8BE2\u6A21\u578B/API \u7528\u91CF\u4E0E\u8D39\u7528\u3002\u666E\u901A\u7528\u6237\u53EA\u80FD\u67E5\u81EA\u5DF1\u7684\u7528\u91CF\uFF1B\u7CFB\u7EDF\u7BA1\u7406\u5458\u53EF\u4EE5\u67E5\u6307\u5B9A\u7528\u6237\u6216\u5168\u7AD9\u3002\u8D39\u7528\u9ED8\u8BA4\u8FD4\u56DE credits\uFF0C\u4E5F\u53EF\u9644\u5E26 USD \u6362\u7B97\u3002",
536
+ description: "\u67E5\u8BE2\u6A21\u578B/API \u7528\u91CF\u4E0E\u8D39\u7528\uFF0C\u4EE5\u53CA token \u4F7F\u7528\u91CF\u7684\u5206\u6790\u89C6\u56FE\uFF08cache hit rate\u3001output/input ratio\u3001\u6309\u6A21\u578B/agent/\u5165\u53E3\u5207\u7247\u3001pricing what-if \u6A21\u62DF\u3001break-even cache hit \u8BA1\u7B97\uFF09\u3002\u666E\u901A\u7528\u6237\u53EA\u80FD\u67E5\u81EA\u5DF1\u7684\u7528\u91CF\uFF1B\u7CFB\u7EDF\u7BA1\u7406\u5458\u53EF\u4EE5\u67E5\u6307\u5B9A\u7528\u6237\u6216\u5168\u7AD9\u3002\u8D39\u7528\u9ED8\u8BA4\u8FD4\u56DE credits\uFF0C\u4E5F\u53EF\u9644\u5E26 USD \u6362\u7B97\u3002\u6570\u636E\u6765\u6E90\u662F TokenRecord \u7684\u53EA\u8BFB\u6295\u5F71\uFF0C\u4E0D\u5F71\u54CD\u8BA1\u8D39\u3002",
525
537
  parameters: {
526
538
  type: "object",
527
539
  properties: {
540
+ analysisType: {
541
+ type: "string",
542
+ enum: ["billing", "workload", "cacheBreakdown", "pricingReplay", "breakEven", "prefixChurn"],
543
+ description: "\u5206\u6790\u7C7B\u578B\u3002billing=\u7528\u91CF\u8D39\u7528\u7EDF\u8BA1\uFF08\u9ED8\u8BA4\uFF0C\u5411\u540E\u517C\u5BB9\uFF09\uFF1Bworkload=cache hit/output-input ratio \u6307\u7EB9\uFF1BcacheBreakdown=\u6309\u6A21\u578B/agent/\u5165\u53E3\u7684 cache hit \u5206\u7EC4\uFF1BpricingReplay=\u8F93\u5165\u5B9A\u4EF7\u65B9\u6848 \xD7 \u5386\u53F2 workload = counterfactual \u6210\u672C\u5BF9\u6BD4\uFF1BbreakEven=\u4E24\u4E2A\u5B9A\u4EF7\u65B9\u6848\u7684 break-even cache hit rate\uFF1BprefixChurn=stable prefix \u53D8\u66F4\u8BCA\u65AD\u3002",
544
+ default: "billing"
545
+ },
528
546
  scope: {
529
547
  type: "string",
530
548
  enum: ["user", "all", "space"],
@@ -576,6 +594,43 @@ var queryModelUsageFunctionSchema = {
576
594
  thresholdUsd: {
577
595
  type: "number",
578
596
  description: "\u53EF\u9009\u9608\u503C\uFF0C\u5355\u4F4D USD\uFF1B\u4F1A\u6309 creditsPerUsd \u6362\u7B97\uFF0C\u5E76\u8FD4\u56DE 0-100 \u7684 threshold.usedPercent\u3002"
597
+ },
598
+ groupBy: {
599
+ type: "string",
600
+ enum: ["model", "agent", "entry_path", "day"],
601
+ description: "cacheBreakdown \u7684\u5206\u7EC4\u7EF4\u5EA6\u3002\u9ED8\u8BA4 model\u3002"
602
+ },
603
+ pricingScenarios: {
604
+ type: "array",
605
+ description: "pricingReplay \u7528\u7684\u5B9A\u4EF7\u65B9\u6848\u5217\u8868\u3002\u6BCF\u4E2A\u65B9\u6848\u542B name \u548C\u4E09\u4E2A\u5355\u4EF7\u3002",
606
+ items: {
607
+ type: "object",
608
+ properties: {
609
+ name: { type: "string", description: "\u65B9\u6848\u540D\u79F0\uFF0C\u4F8B\u5982 A\u3001B\u3001C \u6216 provider \u540D" },
610
+ inputPerMillion: { type: "number", description: "miss input tokens \u6BCF\u767E\u4E07\u5355\u4EF7\uFF08USD\uFF09" },
611
+ cachedInputPerMillion: { type: "number", description: "cache hit tokens \u6BCF\u767E\u4E07\u5355\u4EF7\uFF08USD\uFF09" },
612
+ outputPerMillion: { type: "number", description: "output tokens \u6BCF\u767E\u4E07\u5355\u4EF7\uFF08USD\uFF09" }
613
+ },
614
+ required: ["name", "inputPerMillion", "cachedInputPerMillion", "outputPerMillion"]
615
+ }
616
+ },
617
+ pricingA: {
618
+ type: "object",
619
+ description: "breakEven \u5206\u6790\u7684\u65B9\u6848 A\u3002",
620
+ properties: {
621
+ inputPerMillion: { type: "number" },
622
+ cachedInputPerMillion: { type: "number" },
623
+ outputPerMillion: { type: "number" }
624
+ }
625
+ },
626
+ pricingB: {
627
+ type: "object",
628
+ description: "breakEven \u5206\u6790\u7684\u65B9\u6848 B\u3002",
629
+ properties: {
630
+ inputPerMillion: { type: "number" },
631
+ cachedInputPerMillion: { type: "number" },
632
+ outputPerMillion: { type: "number" }
633
+ }
579
634
  }
580
635
  }
581
636
  }
@@ -5093,6 +5148,53 @@ var interface_locale_default = {
5093
5148
  goToProfile: "My profile",
5094
5149
  recharge: "Recharge",
5095
5150
  usage_dashboard: "Usage statistics",
5151
+ usage_spike_tip: "Abnormal spike \xB7 {{ratio}}\xD7 daily average",
5152
+ cache_saved_title: "Cache savings",
5153
+ cache_saved_hit_rate: "Hit rate",
5154
+ cache_saved_hit_tokens: "Cache hits",
5155
+ cache_saved_write_tokens: "Cache writes",
5156
+ cache_saved_estimate: "Est. saved",
5157
+ cache_saved_empty: "No cache usage in this range",
5158
+ cache_saved_note: "Estimated from billed model prices; not the final bill",
5159
+ cache_saved_unknown: "No price data for {{models}}",
5160
+ cache_saved_billable_note: "Savings cover billed platform usage only; OAuth/CLI/own-API usage is counted but not charged",
5161
+ dialog_usage_title: "Top dialogs by usage",
5162
+ dialog_usage_empty: "No dialog usage in this range",
5163
+ dialog_usage_calls: "calls",
5164
+ dialog_usage_total: "{{count}} dialogs total",
5165
+ dialog_usage_click: "Open dialog",
5166
+ billing_detail_click: "Click for billing details",
5167
+ billing_detail_tokens: "Token",
5168
+ billing_detail_input: "Input",
5169
+ billing_detail_output: "Output",
5170
+ billing_detail_cache_read: "Cache hit",
5171
+ billing_detail_cache_write: "Cache write",
5172
+ billing_detail_miss: "miss",
5173
+ billing_detail_prices: "Price /1M",
5174
+ billing_detail_breakdown: "Split",
5175
+ billing_detail_charged: "Charged",
5176
+ billing_detail_status: "Billing",
5177
+ billing_detail_not_billed: "Not charged (OAuth/CLI/own-API)",
5178
+ billing_detail_call_ids: "Upstream call",
5179
+ billing_detail_failed: "Not charged",
5180
+ billing_detail_failed_full: "Failed \xB7 not charged",
5181
+ billing_detail_error: "Failure reason",
5182
+ budget_title: "Monthly budget",
5183
+ budget_set: "Monthly budget threshold",
5184
+ budget_placeholder: "e.g. 50",
5185
+ budget_save: "Save",
5186
+ budget_not_set: "Not set",
5187
+ budget_off: "Off",
5188
+ budget_current: "Current: {{threshold}} credits",
5189
+ budget_note: "You'll be notified when monthly spend exceeds the threshold",
5190
+ budget_zero_note: "; set 0 to disable",
5191
+ budget_saved: "Saved",
5192
+ budget_invalid: "Enter a valid budget amount",
5193
+ budget_save_failed: "Save failed, please retry",
5194
+ cache_saved_col_model: "Model",
5195
+ cache_saved_col_read: "Read",
5196
+ cache_saved_col_write: "Write",
5197
+ cache_saved_col_saved: "Saved",
5096
5198
  switchToThisAccount: "Switch to this account",
5097
5199
  showAppAssistant: "Open app AI",
5098
5200
  hideAppAssistant: "Hide app AI",
@@ -5487,18 +5589,7 @@ var interface_locale_default = {
5487
5589
  createDialogFailed: "Failed to create conversation",
5488
5590
  initDialogFailed: "Failed to initialize conversation",
5489
5591
  sendMessageFailed: "Failed to send first message",
5490
- agentSelector: {
5491
- triggerLabel: "Choose default agent for the quick chat",
5492
- popoverLabel: "Favorite agents",
5493
- hint: "Pick the default agent used by the home quick chat.",
5494
- systemDefault: "System default",
5495
- empty: "No favorite agents yet. Browse and favorite one to get started."
5496
- },
5497
5592
  placeholderAuto: "Type a message and we will pick the best model",
5498
- placeholderCode: "Describe a code goal, e.g. 'implement login and add tests'",
5499
- placeholderResearch: "Describe market, competitors, or facts to investigate",
5500
- placeholderBalanced: "Use {{name}} for deep reasoning",
5501
- placeholderQuality: "Use {{name}} for in-depth analysis",
5502
5593
  emptyPlaceholder: "Tell me your goal, e.g. 'help me organize my thoughts'",
5503
5594
  defaultAgentName: "nolo",
5504
5595
  chipBrainstorm: "Brainstorm",
@@ -5510,31 +5601,11 @@ var interface_locale_default = {
5510
5601
  chipCreateAgentPrompt: "Help me create an agent",
5511
5602
  chipCreateAppPrompt: "Help me create an app",
5512
5603
  mode: {
5513
- triggerLabel: "Choose quick chat mode",
5514
- popoverLabel: "Choose quick chat mode",
5515
- hint: "Choose quick chat mode",
5516
- auto: "Auto",
5517
- autoDesc: "Picks the best model based on your message",
5518
- code: "Code",
5519
- codeDesc: "Read the project, search first, then plan and execute",
5520
- research: "Research",
5521
- researchDesc: "Market, competitors, product, and external fact-finding",
5522
- custom: "Custom",
5523
- customDesc: "Assign an agent per scenario",
5524
- customTitle: "Custom agents",
5525
- customHint: "Choose the agent to use for each scenario",
5526
- back: "Back",
5527
- tierFlash: "Fast",
5528
- tierBalanced: "Balanced",
5529
- tierQuality: "Quality",
5530
- tierImage: "Image",
5531
- selectAgentHint: "Favorited agents",
5532
- systemDefault: "System default",
5533
- noFavorites: "No favorited agents yet"
5604
+ triggerLabel: "Choose quick chat mode"
5534
5605
  },
5535
5606
  autoAgent: {
5536
- label: "Auto-mode agent",
5537
- default: "Default",
5607
+ label: "Default model / switch agent",
5608
+ default: "Nolo's default model \u2014 text and images",
5538
5609
  empty: "No favorite agents yet"
5539
5610
  },
5540
5611
  personalization: {
@@ -5784,6 +5855,10 @@ var interface_locale_default = {
5784
5855
  community_loading: "Loading\u2026",
5785
5856
  community_loading_more: "Loading\u2026",
5786
5857
  community_load_more: "Load more",
5858
+ export_csv: "Export CSV",
5859
+ exporting: "Exporting\u2026",
5860
+ export_failed: "Export failed, please retry later",
5861
+ export_truncated: "Over 10,000 records \u2014 CSV contains only the first 10,000",
5787
5862
  community_load_error: "Failed to load community content",
5788
5863
  community_empty: "No content yet",
5789
5864
  openApp: "Open App",
@@ -6323,6 +6398,53 @@ var interface_locale_default = {
6323
6398
  goToProfile: "\u6211\u7684\u4E3B\u9875",
6324
6399
  recharge: "\u5145\u503C",
6325
6400
  usage_dashboard: "\u7528\u91CF\u7EDF\u8BA1",
6401
+ usage_spike_tip: "\u5F02\u5E38\u5C16\u5CF0 \xB7 \u9AD8\u4E8E\u65E5\u5747 {{ratio}} \u500D",
6402
+ cache_saved_title: "\u7F13\u5B58\u7701\u94B1",
6403
+ cache_saved_hit_rate: "\u547D\u4E2D\u7387",
6404
+ cache_saved_hit_tokens: "\u7F13\u5B58\u547D\u4E2D",
6405
+ cache_saved_write_tokens: "\u7F13\u5B58\u5199\u5165",
6406
+ cache_saved_estimate: "\u4F30\u7B97\u8282\u7701",
6407
+ cache_saved_empty: "\u8BE5\u533A\u95F4\u6CA1\u6709\u7F13\u5B58\u7528\u91CF",
6408
+ cache_saved_note: "\u6309\u6A21\u578B\u8BA1\u8D39\u5355\u4EF7\u4F30\u7B97\uFF0C\u975E\u6700\u7EC8\u8D26\u5355",
6409
+ cache_saved_unknown: "{{models}} \u6682\u65E0\u4EF7\u683C\u6570\u636E",
6410
+ cache_saved_billable_note: "\u8282\u7701\u4EC5\u6309\u5E73\u53F0\u8BA1\u8D39\u8BB0\u5F55\u4F30\u7B97\uFF1BOAuth/CLI/\u81EA\u6709 API \u7528\u91CF\u53EA\u7EDF\u8BA1\u4E0D\u8BA1\u8D39",
6411
+ dialog_usage_title: "\u5BF9\u8BDD\u6D88\u8017\u6392\u884C",
6412
+ dialog_usage_empty: "\u8BE5\u533A\u95F4\u6CA1\u6709\u5BF9\u8BDD\u7528\u91CF",
6413
+ dialog_usage_calls: "\u6B21\u8C03\u7528",
6414
+ dialog_usage_total: "\u5171 {{count}} \u4E2A\u5BF9\u8BDD",
6415
+ dialog_usage_click: "\u70B9\u51FB\u67E5\u770B\u5BF9\u8BDD",
6416
+ billing_detail_click: "\u70B9\u51FB\u67E5\u770B\u8BA1\u8D39\u4F9D\u636E",
6417
+ billing_detail_tokens: "Token",
6418
+ billing_detail_input: "\u8F93\u5165",
6419
+ billing_detail_output: "\u8F93\u51FA",
6420
+ billing_detail_cache_read: "\u7F13\u5B58\u547D\u4E2D",
6421
+ billing_detail_cache_write: "\u7F13\u5B58\u5199\u5165",
6422
+ billing_detail_miss: "\u672A\u547D\u4E2D",
6423
+ billing_detail_prices: "\u5355\u4EF7\uFF08/\u767E\u4E07\uFF09",
6424
+ billing_detail_breakdown: "\u62C6\u5206",
6425
+ billing_detail_charged: "\u5B9E\u9645\u6263\u8D39",
6426
+ billing_detail_status: "\u8BA1\u8D39",
6427
+ billing_detail_not_billed: "\u672A\u8BA1\u8D39\uFF08OAuth/CLI/\u81EA\u6709 API\uFF09",
6428
+ billing_detail_call_ids: "\u4E0A\u6E38\u8C03\u7528",
6429
+ billing_detail_failed: "\u672A\u8BA1\u8D39",
6430
+ billing_detail_failed_full: "\u5931\u8D25 \xB7 \u672A\u8BA1\u8D39",
6431
+ billing_detail_error: "\u5931\u8D25\u539F\u56E0",
6432
+ budget_title: "\u6708\u5EA6\u9884\u7B97",
6433
+ budget_set: "\u672C\u6708\u9884\u7B97\u9608\u503C",
6434
+ budget_placeholder: "\u5982 50",
6435
+ budget_save: "\u4FDD\u5B58",
6436
+ budget_not_set: "\u672A\u8BBE\u7F6E",
6437
+ budget_off: "\u5DF2\u5173\u95ED",
6438
+ budget_current: "\u5F53\u524D\uFF1A{{threshold}} credits",
6439
+ budget_note: "\u5F53\u6708\u5EA6\u6D88\u8017\u8D85\u8FC7\u9608\u503C\u65F6\u901A\u77E5\u4F60",
6440
+ budget_zero_note: "\uFF1B\u8BBE\u4E3A 0 \u5173\u95ED\u9884\u7B97\u63D0\u9192",
6441
+ budget_saved: "\u5DF2\u4FDD\u5B58",
6442
+ budget_invalid: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u9884\u7B97\u91D1\u989D",
6443
+ budget_save_failed: "\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
6444
+ cache_saved_col_model: "\u6A21\u578B",
6445
+ cache_saved_col_read: "\u547D\u4E2D",
6446
+ cache_saved_col_write: "\u5199\u5165",
6447
+ cache_saved_col_saved: "\u8282\u7701",
6326
6448
  switchToThisAccount: "\u5207\u6362\u5230\u8BE5\u8D26\u53F7",
6327
6449
  showAppAssistant: "\u6253\u5F00\u5E94\u7528 AI",
6328
6450
  hideAppAssistant: "\u9690\u85CF\u5E94\u7528 AI",
@@ -6717,18 +6839,7 @@ var interface_locale_default = {
6717
6839
  createDialogFailed: "\u521B\u5EFA\u5BF9\u8BDD\u5931\u8D25",
6718
6840
  initDialogFailed: "\u521D\u59CB\u5316\u5BF9\u8BDD\u5931\u8D25",
6719
6841
  sendMessageFailed: "\u53D1\u9001\u9996\u6761\u6D88\u606F\u5931\u8D25",
6720
- agentSelector: {
6721
- triggerLabel: "\u9009\u62E9\u9996\u9875\u9ED8\u8BA4\u667A\u80FD\u4F53",
6722
- popoverLabel: "\u6536\u85CF\u7684\u667A\u80FD\u4F53",
6723
- hint: "\u9009\u62E9\u9996\u9875\u5FEB\u6377\u5BF9\u8BDD\u9ED8\u8BA4\u4F7F\u7528\u7684\u667A\u80FD\u4F53\u3002",
6724
- systemDefault: "\u7CFB\u7EDF\u9ED8\u8BA4",
6725
- empty: "\u8FD8\u6CA1\u6709\u6536\u85CF\u7684\u667A\u80FD\u4F53\uFF0C\u53BB\u901B\u901B\u6536\u85CF\u4E00\u4E2A\u5427\u3002"
6726
- },
6727
6842
  placeholderAuto: "\u8F93\u5165\u6D88\u606F\uFF0C\u81EA\u52A8\u5339\u914D\u6700\u4F18\u6A21\u578B",
6728
- placeholderCode: "\u63CF\u8FF0\u4EE3\u7801\u76EE\u6807\uFF0C\u4F8B\u5982\u300C\u5B9E\u73B0\u767B\u5F55\u63A5\u53E3\u5E76\u8865\u6D4B\u8BD5\u300D",
6729
- placeholderResearch: "\u63CF\u8FF0\u8981\u8C03\u67E5\u7684\u5E02\u573A\u3001\u7ADE\u54C1\u6216\u4E8B\u5B9E\uFF0C\u4F8B\u5982\u300C\u5BF9\u6BD4\u4E09\u5BB6\u7ADE\u54C1\u5B9A\u4EF7\u300D",
6730
- placeholderBalanced: "\u7528 {{name}} \u6DF1\u5EA6\u63A8\u7406",
6731
- placeholderQuality: "\u7528 {{name}} \u6DF1\u5165\u5206\u6790",
6732
6843
  emptyPlaceholder: "\u76F4\u63A5\u8BF4\u4F60\u7684\u76EE\u6807\uFF0C\u6BD4\u5982\u300C\u5E2E\u6211\u6574\u7406\u4E00\u4E0B\u601D\u8DEF\u300D",
6733
6844
  defaultAgentName: "nolo",
6734
6845
  chipBrainstorm: "\u5934\u8111\u98CE\u66B4",
@@ -6740,31 +6851,11 @@ var interface_locale_default = {
6740
6851
  chipCreateAgentPrompt: "\u5E2E\u6211\u521B\u5EFA\u4E00\u4E2AAgent",
6741
6852
  chipCreateAppPrompt: "\u5E2E\u6211\u521B\u5EFA\u4E00\u4E2A\u5E94\u7528",
6742
6853
  mode: {
6743
- triggerLabel: "\u9009\u62E9\u5BF9\u8BDD\u6A21\u5F0F",
6744
- popoverLabel: "\u9009\u62E9\u5BF9\u8BDD\u6A21\u5F0F",
6745
- hint: "\u9009\u62E9\u5BF9\u8BDD\u6A21\u5F0F",
6746
- auto: "\u81EA\u52A8",
6747
- autoDesc: "\u6839\u636E\u6D88\u606F\u81EA\u52A8\u5207\u6362\u6700\u4F18\u6A21\u578B",
6748
- code: "\u4EE3\u7801",
6749
- codeDesc: "\u8BFB\u53D6\u9879\u76EE\u3001\u5148\u641C\u7D22\u518D\u89C4\u5212\u6267\u884C",
6750
- research: "\u8C03\u7814",
6751
- researchDesc: "\u5E02\u573A\u3001\u7ADE\u54C1\u3001\u4EA7\u54C1\u4E0E\u5916\u90E8\u4E8B\u5B9E\u8C03\u67E5",
6752
- custom: "\u5B9A\u5236",
6753
- customDesc: "\u4E3A\u6BCF\u79CD\u573A\u666F\u6307\u5B9A\u667A\u80FD\u4F53",
6754
- customTitle: "\u5B9A\u5236\u667A\u80FD\u4F53",
6755
- customHint: "\u4E3A\u6BCF\u79CD\u573A\u666F\u9009\u62E9\u8981\u4F7F\u7528\u7684\u667A\u80FD\u4F53",
6756
- back: "\u8FD4\u56DE",
6757
- tierFlash: "\u5FEB\u901F",
6758
- tierBalanced: "\u5E73\u8861",
6759
- tierQuality: "\u8D28\u91CF",
6760
- tierImage: "\u56FE\u7247",
6761
- selectAgentHint: "\u6536\u85CF\u7684\u667A\u80FD\u4F53",
6762
- systemDefault: "\u7CFB\u7EDF\u9ED8\u8BA4",
6763
- noFavorites: "\u6682\u65E0\u6536\u85CF\u7684\u667A\u80FD\u4F53"
6854
+ triggerLabel: "\u9009\u62E9\u5BF9\u8BDD\u6A21\u5F0F"
6764
6855
  },
6765
6856
  autoAgent: {
6766
- label: "\u81EA\u52A8\u6A21\u5F0F Agent",
6767
- default: "\u9ED8\u8BA4",
6857
+ label: "\u9ED8\u8BA4\u6A21\u578B / \u5207\u6362 Agent",
6858
+ default: "Nolo \u9ED8\u8BA4\u6A21\u578B\uFF0C\u56FE\u6587\u90FD\u80FD\u804A",
6768
6859
  empty: "\u6682\u65E0\u6536\u85CF\u7684 Agent"
6769
6860
  },
6770
6861
  personalization: {
@@ -7014,6 +7105,10 @@ var interface_locale_default = {
7014
7105
  community_loading: "\u52A0\u8F7D\u4E2D\u2026",
7015
7106
  community_loading_more: "\u52A0\u8F7D\u4E2D\u2026",
7016
7107
  community_load_more: "\u52A0\u8F7D\u66F4\u591A",
7108
+ export_csv: "\u5BFC\u51FA CSV",
7109
+ exporting: "\u5BFC\u51FA\u4E2D\u2026",
7110
+ export_failed: "\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
7111
+ export_truncated: "\u660E\u7EC6\u8D85\u8FC7 1 \u4E07\u6761\uFF0CCSV \u4EC5\u542B\u524D 1 \u4E07\u6761",
7017
7112
  community_load_error: "\u52A0\u8F7D\u793E\u533A\u5185\u5BB9\u5931\u8D25",
7018
7113
  community_empty: "\u6682\u65E0\u5185\u5BB9",
7019
7114
  openApp: "\u6253\u5F00\u5E94\u7528",
@@ -7553,6 +7648,53 @@ var interface_locale_default = {
7553
7648
  goToProfile: "\u6211\u7684\u4E3B\u9801",
7554
7649
  recharge: "\u5145\u503C",
7555
7650
  usage_dashboard: "\u7528\u91CF\u7D71\u8A08",
7651
+ usage_spike_tip: "\u7570\u5E38\u5C16\u5CF0 \xB7 \u9AD8\u65BC\u65E5\u5747 {{ratio}} \u500D",
7652
+ cache_saved_title: "\u7DE9\u5B58\u7701\u9322",
7653
+ cache_saved_hit_rate: "\u547D\u4E2D\u7387",
7654
+ cache_saved_hit_tokens: "\u7DE9\u5B58\u547D\u4E2D",
7655
+ cache_saved_write_tokens: "\u7DE9\u5B58\u5BEB\u5165",
7656
+ cache_saved_estimate: "\u4F30\u7B97\u7BC0\u7701",
7657
+ cache_saved_empty: "\u8A72\u5340\u9593\u6C92\u6709\u7DE9\u5B58\u7528\u91CF",
7658
+ cache_saved_note: "\u6309\u6A21\u578B\u8A08\u8CBB\u55AE\u50F9\u4F30\u7B97\uFF0C\u975E\u6700\u7D42\u5E33\u55AE",
7659
+ cache_saved_unknown: "{{models}} \u66AB\u7121\u50F9\u683C\u6578\u64DA",
7660
+ cache_saved_billable_note: "\u7BC0\u7701\u50C5\u6309\u5E73\u53F0\u8A08\u8CBB\u8A18\u9304\u4F30\u7B97\uFF1BOAuth/CLI/\u81EA\u6709 API \u7528\u91CF\u50C5\u7D71\u8A08\u4E0D\u8A08\u8CBB",
7661
+ dialog_usage_title: "\u5C0D\u8A71\u6D88\u8017\u6392\u884C",
7662
+ dialog_usage_empty: "\u8A72\u5340\u9593\u6C92\u6709\u5C0D\u8A71\u7528\u91CF",
7663
+ dialog_usage_calls: "\u6B21\u8ABF\u7528",
7664
+ dialog_usage_total: "\u5171 {{count}} \u500B\u5C0D\u8A71",
7665
+ dialog_usage_click: "\u9EDE\u64CA\u67E5\u770B\u5C0D\u8A71",
7666
+ billing_detail_click: "\u9EDE\u64CA\u67E5\u770B\u8A08\u8CBB\u4F9D\u64DA",
7667
+ billing_detail_tokens: "Token",
7668
+ billing_detail_input: "\u8F38\u5165",
7669
+ billing_detail_output: "\u8F38\u51FA",
7670
+ billing_detail_cache_read: "\u7DE9\u5B58\u547D\u4E2D",
7671
+ billing_detail_cache_write: "\u7DE9\u5B58\u5BEB\u5165",
7672
+ billing_detail_miss: "\u672A\u547D\u4E2D",
7673
+ billing_detail_prices: "\u55AE\u50F9\uFF08/\u767E\u842C\uFF09",
7674
+ billing_detail_breakdown: "\u62C6\u5206",
7675
+ billing_detail_charged: "\u5BE6\u969B\u6263\u8CBB",
7676
+ billing_detail_status: "\u8A08\u8CBB",
7677
+ billing_detail_not_billed: "\u672A\u8A08\u8CBB\uFF08OAuth/CLI/\u81EA\u6709 API\uFF09",
7678
+ billing_detail_call_ids: "\u4E0A\u6E38\u8ABF\u7528",
7679
+ billing_detail_failed: "\u672A\u8A08\u8CBB",
7680
+ billing_detail_failed_full: "\u5931\u6557 \xB7 \u672A\u8A08\u8CBB",
7681
+ billing_detail_error: "\u5931\u6557\u539F\u56E0",
7682
+ budget_title: "\u6708\u5EA6\u9810\u7B97",
7683
+ budget_set: "\u672C\u6708\u9810\u7B97\u95BE\u503C",
7684
+ budget_placeholder: "\u5982 50",
7685
+ budget_save: "\u5132\u5B58",
7686
+ budget_not_set: "\u672A\u8A2D\u5B9A",
7687
+ budget_off: "\u5DF2\u95DC\u9589",
7688
+ budget_current: "\u76EE\u524D\uFF1A{{threshold}} credits",
7689
+ budget_note: "\u7576\u6708\u5EA6\u6D88\u8017\u8D85\u904E\u95BE\u503C\u6642\u901A\u77E5\u4F60",
7690
+ budget_zero_note: "\uFF1B\u8A2D\u70BA 0 \u95DC\u9589\u9810\u7B97\u63D0\u9192",
7691
+ budget_saved: "\u5DF2\u5132\u5B58",
7692
+ budget_invalid: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u9810\u7B97\u91D1\u984D",
7693
+ budget_save_failed: "\u5132\u5B58\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66",
7694
+ cache_saved_col_model: "\u6A21\u578B",
7695
+ cache_saved_col_read: "\u547D\u4E2D",
7696
+ cache_saved_col_write: "\u5BEB\u5165",
7697
+ cache_saved_col_saved: "\u7BC0\u7701",
7556
7698
  switchToThisAccount: "\u5207\u63DB\u5230\u8A72\u5E33\u865F",
7557
7699
  showAppAssistant: "\u6253\u958B\u61C9\u7528 AI",
7558
7700
  hideAppAssistant: "\u96B1\u85CF\u61C9\u7528 AI",
@@ -7947,18 +8089,7 @@ var interface_locale_default = {
7947
8089
  createDialogFailed: "\u5EFA\u7ACB\u5C0D\u8A71\u5931\u6557",
7948
8090
  initDialogFailed: "\u521D\u59CB\u5316\u5C0D\u8A71\u5931\u6557",
7949
8091
  sendMessageFailed: "\u767C\u9001\u9996\u689D\u8A0A\u606F\u5931\u6557",
7950
- agentSelector: {
7951
- triggerLabel: "\u9078\u64C7\u9996\u9801\u9810\u8A2D\u667A\u6167\u9AD4",
7952
- popoverLabel: "\u6536\u85CF\u7684\u667A\u6167\u9AD4",
7953
- hint: "\u9078\u64C7\u9996\u9801\u5FEB\u6377\u5C0D\u8A71\u9810\u8A2D\u4F7F\u7528\u7684\u667A\u6167\u9AD4\u3002",
7954
- systemDefault: "\u7CFB\u7D71\u9810\u8A2D",
7955
- empty: "\u9084\u6C92\u6709\u6536\u85CF\u7684\u667A\u6167\u9AD4\uFF0C\u53BB\u901B\u901B\u6536\u85CF\u4E00\u500B\u5427\u3002"
7956
- },
7957
8092
  placeholderAuto: "\u8F38\u5165\u8A0A\u606F\uFF0C\u81EA\u52D5\u5339\u914D\u6700\u512A\u6A21\u578B",
7958
- placeholderCode: "\u63CF\u8FF0\u7A0B\u5F0F\u76EE\u6A19\uFF0C\u4F8B\u5982\u300C\u5BE6\u4F5C\u767B\u5165\u4ECB\u9762\u4E26\u88DC\u6E2C\u8A66\u300D",
7959
- placeholderResearch: "\u63CF\u8FF0\u8981\u8ABF\u67E5\u7684\u5E02\u5834\u3001\u7AF6\u54C1\u6216\u4E8B\u5BE6\uFF0C\u4F8B\u5982\u300C\u5C0D\u6BD4\u4E09\u5BB6\u7AF6\u54C1\u5B9A\u50F9\u300D",
7960
- placeholderBalanced: "\u7528 {{name}} \u6DF1\u5EA6\u63A8\u7406",
7961
- placeholderQuality: "\u7528 {{name}} \u6DF1\u5165\u5206\u6790",
7962
8093
  emptyPlaceholder: "\u76F4\u63A5\u8AAA\u4F60\u7684\u76EE\u6A19\uFF0C\u4F8B\u5982\u300C\u5E6B\u6211\u6574\u7406\u4E00\u4E0B\u601D\u8DEF\u300D",
7963
8094
  defaultAgentName: "nolo",
7964
8095
  chipBrainstorm: "\u8166\u529B\u6FC0\u76EA",
@@ -7970,31 +8101,11 @@ var interface_locale_default = {
7970
8101
  chipCreateAgentPrompt: "\u5E6B\u6211\u5275\u5EFA\u4E00\u500BAgent",
7971
8102
  chipCreateAppPrompt: "\u5E6B\u6211\u5275\u5EFA\u4E00\u500B\u61C9\u7528",
7972
8103
  mode: {
7973
- triggerLabel: "\u9078\u64C7\u5C0D\u8A71\u6A21\u5F0F",
7974
- popoverLabel: "\u9078\u64C7\u5C0D\u8A71\u6A21\u5F0F",
7975
- hint: "\u9078\u64C7\u5C0D\u8A71\u6A21\u5F0F",
7976
- auto: "\u81EA\u52D5",
7977
- autoDesc: "\u4F9D\u8A0A\u606F\u81EA\u52D5\u5207\u63DB\u6700\u5408\u9069\u7684\u6A21\u578B",
7978
- code: "\u7A0B\u5F0F",
7979
- codeDesc: "\u8B80\u53D6\u5C08\u6848\u3001\u5148\u641C\u5C0B\u518D\u898F\u5283\u57F7\u884C",
7980
- research: "\u8ABF\u7814",
7981
- researchDesc: "\u5E02\u5834\u3001\u7AF6\u54C1\u3001\u7522\u54C1\u8207\u5916\u90E8\u4E8B\u5BE6\u8ABF\u67E5",
7982
- custom: "\u81EA\u8A02",
7983
- customDesc: "\u70BA\u6BCF\u7A2E\u60C5\u5883\u6307\u5B9A\u667A\u6167\u9AD4",
7984
- customTitle: "\u81EA\u8A02\u667A\u6167\u9AD4",
7985
- customHint: "\u70BA\u6BCF\u7A2E\u60C5\u5883\u9078\u64C7\u8981\u4F7F\u7528\u7684\u667A\u6167\u9AD4",
7986
- back: "\u8FD4\u56DE",
7987
- tierFlash: "\u5FEB\u901F",
7988
- tierBalanced: "\u5E73\u8861",
7989
- tierQuality: "\u54C1\u8CEA",
7990
- tierImage: "\u5716\u7247",
7991
- selectAgentHint: "\u6536\u85CF\u7684\u667A\u6167\u9AD4",
7992
- systemDefault: "\u7CFB\u7D71\u9810\u8A2D",
7993
- noFavorites: "\u5C1A\u7121\u6536\u85CF\u7684\u667A\u6167\u9AD4"
8104
+ triggerLabel: "\u9078\u64C7\u5C0D\u8A71\u6A21\u5F0F"
7994
8105
  },
7995
8106
  autoAgent: {
7996
- label: "\u81EA\u52D5\u6A21\u5F0F Agent",
7997
- default: "\u9810\u8A2D",
8107
+ label: "\u9810\u8A2D\u6A21\u578B / \u5207\u63DB Agent",
8108
+ default: "Nolo \u9810\u8A2D\u6A21\u578B\uFF0C\u5716\u6587\u90FD\u80FD\u804A",
7998
8109
  empty: "\u66AB\u7121\u6536\u85CF\u7684 Agent"
7999
8110
  },
8000
8111
  personalization: {
@@ -8240,6 +8351,10 @@ var interface_locale_default = {
8240
8351
  community_loading: "\u8F09\u5165\u4E2D\u2026",
8241
8352
  community_loading_more: "\u8F09\u5165\u4E2D\u2026",
8242
8353
  community_load_more: "\u8F09\u5165\u66F4\u591A",
8354
+ export_csv: "\u532F\u51FA CSV",
8355
+ exporting: "\u532F\u51FA\u4E2D\u2026",
8356
+ export_failed: "\u532F\u51FA\u5931\u6557\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",
8357
+ export_truncated: "\u660E\u7D30\u8D85\u904E 1 \u842C\u7B46\uFF0CCSV \u50C5\u542B\u524D 1 \u842C\u7B46",
8243
8358
  community_load_error: "\u8F09\u5165\u793E\u7FA4\u5167\u5BB9\u5931\u6557",
8244
8359
  community_empty: "\u5C1A\u7121\u5167\u5BB9",
8245
8360
  openApp: "\u958B\u555F\u61C9\u7528",
@@ -8705,6 +8820,53 @@ var interface_locale_default = {
8705
8820
  goToProfile: "\u30DE\u30A4\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB",
8706
8821
  recharge: "\u30C1\u30E3\u30FC\u30B8",
8707
8822
  usage_dashboard: "\u5229\u7528\u7D71\u8A08",
8823
+ usage_spike_tip: "\u7570\u5E38\u306A\u30B9\u30D1\u30A4\u30AF \xB7 \u65E5\u5E73\u5747\u306E{{ratio}}\u500D",
8824
+ cache_saved_title: "\u30AD\u30E3\u30C3\u30B7\u30E5\u7BC0\u7D04",
8825
+ cache_saved_hit_rate: "\u30D2\u30C3\u30C8\u7387",
8826
+ cache_saved_hit_tokens: "\u30AD\u30E3\u30C3\u30B7\u30E5\u30D2\u30C3\u30C8",
8827
+ cache_saved_write_tokens: "\u30AD\u30E3\u30C3\u30B7\u30E5\u66F8\u304D\u8FBC\u307F",
8828
+ cache_saved_estimate: "\u7BC0\u7D04\u898B\u8FBC\u307F",
8829
+ cache_saved_empty: "\u3053\u306E\u671F\u9593\u306B\u30AD\u30E3\u30C3\u30B7\u30E5\u5229\u7528\u306F\u3042\u308A\u307E\u305B\u3093",
8830
+ cache_saved_note: "\u30E2\u30C7\u30EB\u306E\u8ACB\u6C42\u5358\u4FA1\u306B\u3088\u308B\u6982\u7B97\u3067\u3059\u3002\u6700\u7D42\u8ACB\u6C42\u3067\u306F\u3042\u308A\u307E\u305B\u3093",
8831
+ cache_saved_unknown: "{{models}} \u306E\u4FA1\u683C\u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093",
8832
+ cache_saved_billable_note: "\u7BC0\u7D04\u306F\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u8ACB\u6C42\u8A18\u9332\u306E\u307F\u3067\u7B97\u51FA\u3002OAuth/CLI/\u81EA\u524DAPI\u306E\u5229\u7528\u306F\u7D71\u8A08\u306E\u307F\u3067\u8AB2\u91D1\u3055\u308C\u307E\u305B\u3093",
8833
+ dialog_usage_title: "\u4F1A\u8A71\u3054\u3068\u306E\u5229\u7528\u30E9\u30F3\u30AD\u30F3\u30B0",
8834
+ dialog_usage_empty: "\u3053\u306E\u671F\u9593\u306E\u4F1A\u8A71\u5229\u7528\u306F\u3042\u308A\u307E\u305B\u3093",
8835
+ dialog_usage_calls: "\u56DE",
8836
+ dialog_usage_total: "\u5408\u8A08 {{count}} \u4EF6\u306E\u4F1A\u8A71",
8837
+ dialog_usage_click: "\u4F1A\u8A71\u3092\u958B\u304F",
8838
+ billing_detail_click: "\u30AF\u30EA\u30C3\u30AF\u3067\u8ACB\u6C42\u660E\u7D30",
8839
+ billing_detail_tokens: "Token",
8840
+ billing_detail_input: "\u5165\u529B",
8841
+ billing_detail_output: "\u51FA\u529B",
8842
+ billing_detail_cache_read: "\u30AD\u30E3\u30C3\u30B7\u30E5\u30D2\u30C3\u30C8",
8843
+ billing_detail_cache_write: "\u30AD\u30E3\u30C3\u30B7\u30E5\u66F8\u304D\u8FBC\u307F",
8844
+ billing_detail_miss: "\u672A\u30D2\u30C3\u30C8",
8845
+ billing_detail_prices: "\u5358\u4FA1\uFF08/\u767E\u4E07\uFF09",
8846
+ billing_detail_breakdown: "\u5185\u8A33",
8847
+ billing_detail_charged: "\u5B9F\u969B\u306E\u8ACB\u6C42",
8848
+ billing_detail_status: "\u8ACB\u6C42",
8849
+ billing_detail_not_billed: "\u8AB2\u91D1\u306A\u3057\uFF08OAuth/CLI/\u81EA\u524DAPI\uFF09",
8850
+ billing_detail_call_ids: "\u4E0A\u6D41\u547C\u3073\u51FA\u3057",
8851
+ billing_detail_failed: "\u8AB2\u91D1\u306A\u3057",
8852
+ billing_detail_failed_full: "\u5931\u6557 \xB7 \u8AB2\u91D1\u306A\u3057",
8853
+ billing_detail_error: "\u5931\u6557\u7406\u7531",
8854
+ budget_title: "\u6708\u9593\u4E88\u7B97",
8855
+ budget_set: "\u6708\u9593\u4E88\u7B97\u306E\u95BE\u5024",
8856
+ budget_placeholder: "\u4F8B\uFF1A50",
8857
+ budget_save: "\u4FDD\u5B58",
8858
+ budget_not_set: "\u672A\u8A2D\u5B9A",
8859
+ budget_off: "\u30AA\u30D5",
8860
+ budget_current: "\u73FE\u5728\uFF1A{{threshold}} credits",
8861
+ budget_note: "\u6708\u9593\u6D88\u8CBB\u304C\u95BE\u5024\u3092\u8D85\u3048\u308B\u3068\u901A\u77E5\u3057\u307E\u3059",
8862
+ budget_zero_note: "\uFF1B0 \u3067\u4E88\u7B97\u901A\u77E5\u3092\u7121\u52B9\u5316",
8863
+ budget_saved: "\u4FDD\u5B58\u3057\u307E\u3057\u305F",
8864
+ budget_invalid: "\u6709\u52B9\u306A\u4E88\u7B97\u984D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
8865
+ budget_save_failed: "\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044",
8866
+ cache_saved_col_model: "\u30E2\u30C7\u30EB",
8867
+ cache_saved_col_read: "\u30D2\u30C3\u30C8",
8868
+ cache_saved_col_write: "\u66F8\u304D\u8FBC\u307F",
8869
+ cache_saved_col_saved: "\u7BC0\u7D04",
8708
8870
  switchToThisAccount: "\u3053\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u5207\u308A\u66FF\u3048",
8709
8871
  showAppAssistant: "\u30A2\u30D7\u30EA AI \u3092\u958B\u304F",
8710
8872
  hideAppAssistant: "\u30A2\u30D7\u30EA AI \u3092\u96A0\u3059",
@@ -9096,18 +9258,7 @@ var interface_locale_default = {
9096
9258
  createDialogFailed: "\u4F1A\u8A71\u306E\u4F5C\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
9097
9259
  initDialogFailed: "\u4F1A\u8A71\u306E\u521D\u671F\u5316\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
9098
9260
  sendMessageFailed: "\u6700\u521D\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u9001\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
9099
- agentSelector: {
9100
- triggerLabel: "\u30DB\u30FC\u30E0\u306E\u30AF\u30A4\u30C3\u30AF\u30C1\u30E3\u30C3\u30C8\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u9078\u629E",
9101
- popoverLabel: "\u304A\u6C17\u306B\u5165\u308A\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
9102
- hint: "\u30DB\u30FC\u30E0\u306E\u30AF\u30A4\u30C3\u30AF\u30C1\u30E3\u30C3\u30C8\u3067\u4F7F\u3046\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u9078\u629E\u3057\u307E\u3059\u3002",
9103
- systemDefault: "\u30B7\u30B9\u30C6\u30E0\u65E2\u5B9A",
9104
- empty: "\u307E\u3060\u304A\u6C17\u306B\u5165\u308A\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u3042\u308A\u307E\u305B\u3093\u3002"
9105
- },
9106
9261
  placeholderAuto: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3059\u308C\u3070\u3001\u6700\u9069\u306A\u30E2\u30C7\u30EB\u3092\u81EA\u52D5\u3067\u9078\u3073\u307E\u3059",
9107
- placeholderCode: "\u30B3\u30FC\u30C9\u306E\u76EE\u6A19\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B\uFF1A\u30ED\u30B0\u30A4\u30F3\u5B9F\u88C5\u3068\u30C6\u30B9\u30C8\u8FFD\u52A0\uFF09",
9108
- placeholderResearch: "\u8ABF\u67FB\u3057\u305F\u3044\u5E02\u5834\u30FB\u7AF6\u5408\u30FB\u4E8B\u5B9F\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044",
9109
- placeholderBalanced: "{{name}} \u3067\u6DF1\u304F\u63A8\u8AD6",
9110
- placeholderQuality: "{{name}} \u3067\u6DF1\u304F\u5206\u6790",
9111
9262
  emptyPlaceholder: "\u76EE\u6A19\u3092\u76F4\u63A5\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B\uFF1A\u300C\u8003\u3048\u3092\u6574\u7406\u3059\u308B\u306E\u3092\u624B\u4F1D\u3063\u3066\u300D\uFF09",
9112
9263
  defaultAgentName: "nolo",
9113
9264
  chipBrainstorm: "\u30D6\u30EC\u30A4\u30F3\u30B9\u30C8\u30FC\u30DF\u30F3\u30B0",
@@ -9119,31 +9270,11 @@ var interface_locale_default = {
9119
9270
  chipCreateAgentPrompt: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u4F5C\u308B\u306E\u3092\u624B\u4F1D\u3063\u3066",
9120
9271
  chipCreateAppPrompt: "\u30A2\u30D7\u30EA\u3092\u4F5C\u308B\u306E\u3092\u624B\u4F1D\u3063\u3066",
9121
9272
  mode: {
9122
- triggerLabel: "\u30AF\u30A4\u30C3\u30AF\u30C1\u30E3\u30C3\u30C8\u306E\u30E2\u30FC\u30C9\u3092\u9078\u629E",
9123
- popoverLabel: "\u30AF\u30A4\u30C3\u30AF\u30C1\u30E3\u30C3\u30C8\u306E\u30E2\u30FC\u30C9\u3092\u9078\u629E",
9124
- hint: "\u30AF\u30A4\u30C3\u30AF\u30C1\u30E3\u30C3\u30C8\u306E\u30E2\u30FC\u30C9\u3092\u9078\u629E",
9125
- auto: "\u81EA\u52D5",
9126
- autoDesc: "\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u5FDC\u3058\u3066\u6700\u9069\u306A\u30E2\u30C7\u30EB\u3092\u9078\u3076",
9127
- code: "\u30B3\u30FC\u30C9",
9128
- codeDesc: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u8AAD\u307F\u3001\u691C\u7D22\u3057\u3066\u304B\u3089\u8A08\u753B\u30FB\u5B9F\u884C",
9129
- research: "\u30EA\u30B5\u30FC\u30C1",
9130
- researchDesc: "\u5E02\u5834\u30FB\u7AF6\u5408\u30FB\u88FD\u54C1\u3068\u5916\u90E8\u4E8B\u5B9F\u306E\u8ABF\u67FB",
9131
- custom: "\u30AB\u30B9\u30BF\u30E0",
9132
- customDesc: "\u30B7\u30FC\u30F3\u3054\u3068\u306B\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u6307\u5B9A",
9133
- customTitle: "\u30AB\u30B9\u30BF\u30E0\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
9134
- customHint: "\u30B7\u30FC\u30F3\u3054\u3068\u306B\u4F7F\u3046\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3092\u9078\u629E",
9135
- back: "\u623B\u308B",
9136
- tierFlash: "\u9AD8\u901F",
9137
- tierBalanced: "\u30D0\u30E9\u30F3\u30B9",
9138
- tierQuality: "\u9AD8\u54C1\u8CEA",
9139
- tierImage: "\u753B\u50CF",
9140
- selectAgentHint: "\u304A\u6C17\u306B\u5165\u308A\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8",
9141
- systemDefault: "\u30B7\u30B9\u30C6\u30E0\u65E2\u5B9A",
9142
- noFavorites: "\u304A\u6C17\u306B\u5165\u308A\u306E\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093"
9273
+ triggerLabel: "\u30AF\u30A4\u30C3\u30AF\u30C1\u30E3\u30C3\u30C8\u306E\u30E2\u30FC\u30C9\u3092\u9078\u629E"
9143
9274
  },
9144
9275
  autoAgent: {
9145
- label: "\u81EA\u52D5\u30E2\u30FC\u30C9 Agent",
9146
- default: "\u30C7\u30D5\u30A9\u30EB\u30C8",
9276
+ label: "\u65E2\u5B9A\u30E2\u30C7\u30EB / Agent \u5207\u308A\u66FF\u3048",
9277
+ default: "Nolo \u306E\u65E2\u5B9A\u30E2\u30C7\u30EB\uFF08\u30C6\u30AD\u30B9\u30C8\u3068\u753B\u50CF\uFF09",
9147
9278
  empty: "\u304A\u6C17\u306B\u5165\u308A\u306E Agent \u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093"
9148
9279
  },
9149
9280
  personalization: {
@@ -9389,6 +9520,10 @@ var interface_locale_default = {
9389
9520
  community_loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026",
9390
9521
  community_loading_more: "\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026",
9391
9522
  community_load_more: "\u3055\u3089\u306B\u8AAD\u307F\u8FBC\u3080",
9523
+ export_csv: "CSV \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8",
9524
+ exporting: "\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u4E2D\u2026",
9525
+ export_failed: "\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u5F8C\u3067\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
9526
+ export_truncated: "\u660E\u7D30\u304C 1 \u4E07\u4EF6\u3092\u8D85\u3048\u3066\u3044\u307E\u3059\u3002CSV \u306F\u5148\u982D 1 \u4E07\u4EF6\u306E\u307F\u542B\u307F\u307E\u3059",
9392
9527
  community_load_error: "\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
9393
9528
  community_empty: "\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u3042\u308A\u307E\u305B\u3093",
9394
9529
  openApp: "\u30A2\u30D7\u30EA\u3092\u958B\u304F",
@@ -11248,7 +11383,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11248
11383
  workspace: { mode: "lease" }
11249
11384
  };
11250
11385
  var findModelConfig = async (modelName, provider) => {
11251
- const { ALL_MODELS } = await import("./models-WDUTTYFS.js");
11386
+ const { ALL_MODELS } = await import("./models-OX2S5C6Q.js");
11252
11387
  const name = toTrimmedString(modelName);
11253
11388
  const prov = toTrimmedString(provider ?? "");
11254
11389
  if (!name) return null;
@@ -11489,7 +11624,7 @@ var buildFormDataFromArgs = async (args) => {
11489
11624
  const trimmedModel = toTrimmedString(model);
11490
11625
  const trimmedProvider = toTrimmedString(provider);
11491
11626
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11492
- const { getModelPricing } = await import("./getPricing-QO5TYNCK.js");
11627
+ const { getModelPricing } = await import("./getPricing-L2ENXWHV.js");
11493
11628
  const normalizedTools = tools ?? [];
11494
11629
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11495
11630
  const formData = {
@@ -11551,7 +11686,7 @@ async function createAgentToolFunc(args, thunkApi) {
11551
11686
  const state = thunkApi.getState();
11552
11687
  const currentUserId = selectIdentityUserId(state);
11553
11688
  const currentBalance = selectIdentityUserBalance(state);
11554
- const allSpaces = selectAllMemberSpaces(state);
11689
+ const allSpaces = getAllMemberSpaces();
11555
11690
  if (!currentUserId) {
11556
11691
  throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u5F53\u524D\u672A\u767B\u5F55\u6216\u7F3A\u5C11 userId\u3002");
11557
11692
  }
@@ -11642,6 +11777,33 @@ ${availableList}`
11642
11777
  }
11643
11778
  }
11644
11779
 
11780
+ // packages/ai/tools/toolResultError.ts
11781
+ var ToolResultError = class extends Error {
11782
+ code;
11783
+ rawData;
11784
+ displayData;
11785
+ retryable;
11786
+ constructor(message, options) {
11787
+ super(message);
11788
+ this.name = "ToolResultError";
11789
+ this.code = options?.code;
11790
+ this.rawData = options?.rawData;
11791
+ this.displayData = options?.displayData;
11792
+ this.retryable = options?.retryable;
11793
+ }
11794
+ };
11795
+ var getToolResultErrorData = (error) => {
11796
+ if (!error || typeof error !== "object") return null;
11797
+ const candidate = error;
11798
+ return {
11799
+ rawData: candidate.rawData,
11800
+ displayData: candidate.displayData,
11801
+ code: candidate.code,
11802
+ retryable: candidate.retryable,
11803
+ message: candidate.message
11804
+ };
11805
+ };
11806
+
11645
11807
  // packages/ai/tools/agent/agentUpdateShared.ts
11646
11808
  var agentUpdateFieldSchemaProperties = {
11647
11809
  name: { type: "string", description: "Agent \u7684\u65B0\u540D\u79F0\u3002" },
@@ -11973,7 +12135,7 @@ async function createDocFunc(args, thunkApi) {
11973
12135
  const rawCategoryId = (args.categoryId ?? "").trim();
11974
12136
  const categoryId = rawCategoryId || void 0;
11975
12137
  const explicitSpaceId = (args.spaceId ?? "").trim() || void 0;
11976
- const currentSpaceId = selectCurrentSpaceId(state) || void 0;
12138
+ const currentSpaceId = getCurrentSpaceId() || void 0;
11977
12139
  const spaceId = explicitSpaceId ?? currentSpaceId;
11978
12140
  const rawContent = (args.content ?? "").trim();
11979
12141
  const content = rawContent || void 0;
@@ -12202,7 +12364,7 @@ async function createSkillDocFunc(args, thunkApi) {
12202
12364
  const state = getState();
12203
12365
  const { title, content, skillConfig, evalConfig } = buildSkillDocFromArgs(args);
12204
12366
  const explicitSpaceId = (args.spaceId ?? "").trim() || void 0;
12205
- const currentSpaceId = selectCurrentSpaceId(state) || void 0;
12367
+ const currentSpaceId = getCurrentSpaceId() || void 0;
12206
12368
  const spaceId = explicitSpaceId ?? currentSpaceId;
12207
12369
  const categoryId = (args.categoryId ?? "").trim() || void 0;
12208
12370
  const id = await createDocState(
@@ -12587,7 +12749,7 @@ Imported from: ${url}` : ""
12587
12749
  skillConfig
12588
12750
  });
12589
12751
  const explicitSpaceId = (args.spaceId ?? "").trim() || void 0;
12590
- const currentSpaceId = selectCurrentSpaceId(state) || void 0;
12752
+ const currentSpaceId = getCurrentSpaceId() || void 0;
12591
12753
  const spaceId = explicitSpaceId ?? currentSpaceId;
12592
12754
  const categoryId = (args.categoryId ?? "").trim() || void 0;
12593
12755
  const id = await createDocState(
@@ -12610,6 +12772,789 @@ Imported from: ${url}` : ""
12610
12772
  });
12611
12773
  }
12612
12774
 
12775
+ // packages/ai/skills/specialistSkills.ts
12776
+ var SPECIALIST_SKILL_SLUGS = [
12777
+ "feedback",
12778
+ "agent-creator",
12779
+ "app-builder"
12780
+ ];
12781
+ function deterministicId(prefix, seed) {
12782
+ let h = 2166136261;
12783
+ for (let i = 0; i < seed.length; i++) {
12784
+ h ^= seed.charCodeAt(i);
12785
+ h = h * 16777619 >>> 0;
12786
+ }
12787
+ const suffix = h.toString(36).toUpperCase().padStart(14, "0");
12788
+ return (prefix + suffix).slice(0, 26);
12789
+ }
12790
+ function normalizeSkillSeed(input) {
12791
+ return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
12792
+ }
12793
+ function buildSpecialistSkillId(slug) {
12794
+ return deterministicId("01SK", normalizeSkillSeed(slug) || slug);
12795
+ }
12796
+ function buildSpecialistSkillPageKey(userId, slug) {
12797
+ return `page-${userId}-${buildSpecialistSkillId(slug)}`;
12798
+ }
12799
+ var SPECIALIST_SKILL_SEEDS = [
12800
+ {
12801
+ slug: "feedback",
12802
+ title: "feedback",
12803
+ 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",
12804
+ body: [
12805
+ "\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",
12806
+ "",
12807
+ "\u4F60\u7684\u76EE\u6807\uFF1A",
12808
+ "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",
12809
+ "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",
12810
+ "3. \u5C06\u53CD\u9988\u6574\u7406\u6210\u7ED3\u6784\u5316\u4FE1\u606F\uFF0C\u5199\u5165\u201C\u7528\u6237\u53CD\u9988\u201D\u8868\u3002",
12811
+ `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`,
12812
+ "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",
12813
+ "6. \u56DE\u590D\u98CE\u683C\u7B80\u6D01\u3001\u81EA\u7136\u3001\u50CF\u4EA7\u54C1\u56E2\u961F\u7684\u53CD\u9988\u6536\u96C6\u5165\u53E3\u3002",
12814
+ "",
12815
+ "\u5DE5\u4F5C\u89C4\u5219\uFF1A",
12816
+ "- \u4F18\u5148\u5224\u65AD\u53CD\u9988\u7C7B\u578B\uFF1A\u529F\u80FD\u9700\u6C42 / \u95EE\u9898\u53CD\u9988 / \u4F53\u9A8C\u5EFA\u8BAE / \u5176\u4ED6\u3002",
12817
+ "- \u9ED8\u8BA4\u72B6\u6001\u5199\u4E3A\u201C\u5F85\u5904\u7406\u201D\u3002",
12818
+ "- \u6839\u636E\u5185\u5BB9\u7C97\u7565\u5224\u65AD\u4F18\u5148\u7EA7\uFF1A",
12819
+ " - \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",
12820
+ " - \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",
12821
+ " - \u4E00\u822C bug\u3001\u660E\u786E\u9700\u6C42\u3001\u5F71\u54CD\u5E38\u7528\u7F16\u8F91/\u521B\u5EFA\u6D41\u7A0B -> \u4E2D",
12822
+ " - \u666E\u901A\u5EFA\u8BAE\u6216\u8F7B\u5FAE\u4F53\u9A8C\u95EE\u9898 -> \u4F4E",
12823
+ "- \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",
12824
+ "- \u5982\u679C\u7528\u6237\u6CA1\u6709\u63D0\u4F9B\u8054\u7CFB\u65B9\u5F0F\uFF0C\u4E0D\u8981\u5F3A\u6C42\uFF0C\u53EF\u7559\u7A7A\u3002",
12825
+ "- \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",
12826
+ "- \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",
12827
+ "- source \u56FA\u5B9A\u5199\u201C\u53CD\u9988\u5165\u53E3\u201D\u3002",
12828
+ "- createdAtNote \u5199\u201C\u7531\u53CD\u9988\u5165\u53E3\u8BB0\u5F55\u201D\u3002",
12829
+ "",
12830
+ "\u666E\u901A\u5199\u8868\u89C4\u5219\uFF1A",
12831
+ "- \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",
12832
+ `- \u4F7F\u7528 addTableRow \u5DE5\u5177\uFF0C\u628A\u53CD\u9988\u5199\u5165 dbKey \u4E3A meta-${nolotusId}-01NOLOFEEDBACKT000000000R1 \u7684\u8868\u3002`,
12833
+ `- \u663E\u5F0F\u4F20\u5165 tenantId="${nolotusId}" \u548C tableId="01NOLOFEEDBACKT000000000R1"\u3002`,
12834
+ "- \u5B57\u6BB5\u6620\u5C04\uFF1A",
12835
+ " - content: \u7528\u6237\u53CD\u9988\u5185\u5BB9\u7684\u7B80\u6D01\u6574\u7406\u7248\uFF0C\u4FDD\u7559\u5177\u4F53\u5BF9\u8C61\u548C\u75C7\u72B6",
12836
+ " - feedbackType: \u53CD\u9988\u7C7B\u578B",
12837
+ " - status: \u56FA\u5B9A\u4E3A\u201C\u5F85\u5904\u7406\u201D",
12838
+ " - priority: \u6309\u89C4\u5219\u5224\u65AD",
12839
+ " - contact: \u7528\u6237\u4E3B\u52A8\u63D0\u4F9B\u7684\u8054\u7CFB\u65B9\u5F0F\uFF0C\u6CA1\u6709\u5C31\u7559\u7A7A",
12840
+ " - source: \u56FA\u5B9A\u4E3A\u201C\u53CD\u9988\u5165\u53E3\u201D",
12841
+ " - 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",
12842
+ " - 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",
12843
+ " - reproductionSteps: \u7528\u6237\u63CF\u8FF0\u7684\u590D\u73B0\u6B65\u9AA4\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
12844
+ " - expectedResult: \u7528\u6237\u8868\u8FBE\u7684\u671F\u671B\u884C\u4E3A\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
12845
+ " - actualResult: \u7528\u6237\u8868\u8FBE\u7684\u5B9E\u9645\u5F02\u5E38\uFF1B\u6CA1\u6709\u5C31\u7559\u7A7A",
12846
+ " - userImpact: \u5BF9\u7528\u6237\u6D41\u7A0B\u7684\u5F71\u54CD\uFF1B\u6CA1\u6709\u5C31\u6839\u636E\u5185\u5BB9\u7B80\u77ED\u5F52\u7EB3",
12847
+ " - createdAtNote: \u56FA\u5B9A\u4E3A\u201C\u7531\u53CD\u9988\u5165\u53E3\u8BB0\u5F55\u201D",
12848
+ "",
12849
+ "\u7D27\u6025\u53CD\u9988\u989D\u5916\u89C4\u5219\uFF1A",
12850
+ "- \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",
12851
+ `- \u4EFB\u52A1\u770B\u677F\u56FA\u5B9A\u4E3A tenantId="${nolotusId}", tableId="NOLOTASKBOARD", dbKey="meta-${nolotusId}-NOLOTASKBOARD"\u3002`,
12852
+ "- \u4EFB\u52A1\u770B\u677F\u5B57\u6BB5\uFF1A",
12853
+ " - title: \u7528\u201CURGENT \u53CD\u9988\uFF1A\u201D\u5F00\u5934\uFF0C\u540E\u63A5\u95EE\u9898\u4E3B\u9898",
12854
+ " - status: \u201C\u5F85\u5904\u7406\u201D",
12855
+ " - priority: \u201C\u7D27\u6025\u201D",
12856
+ " - executionMode: \u201C\u7ACB\u5373\u6267\u884C\u201D",
12857
+ " - owner: \u201Cnolo \u9879\u76EE\u7ECF\u7406\u201D",
12858
+ " - source: \u201C\u53CD\u9988\u5165\u53E3\u201D",
12859
+ " - 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",
12860
+ " - acceptance: \u590D\u8FF0\u53EF\u9A8C\u8BC1\u7684\u4FEE\u590D\u6807\u51C6",
12861
+ " - 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",
12862
+ " - codeStatus: \u201C\u672A\u5F00\u59CB\u201D",
12863
+ "- \u7D27\u6025\u53CD\u9988\u5199\u5165\u4EFB\u52A1\u8868\u540E\uFF0C\u8C03\u7528 notifyUser\uFF1A",
12864
+ " - title: \u201C\u7D27\u6025\u53CD\u9988\u5DF2\u8FDB\u5165\u4EFB\u52A1\u8868\u201D",
12865
+ " - message: \u7B80\u8981\u8BF4\u660E\u53CD\u9988\u5185\u5BB9\u548C\u4EFB\u52A1\u8868\u72B6\u6001",
12866
+ " - severity: \u201Ccritical\u201D",
12867
+ ` - targetUserId: "${nolotusId}"`,
12868
+ "- \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",
12869
+ "",
12870
+ "\u4EA4\u4E92\u89C4\u5219\uFF1A",
12871
+ "- \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",
12872
+ "- \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",
12873
+ "- \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",
12874
+ "- \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",
12875
+ "- \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"
12876
+ ].join("\n"),
12877
+ toolNames: ["addTableRow", "notifyUser"]
12878
+ },
12879
+ {
12880
+ slug: "agent-creator",
12881
+ title: "agent-creator",
12882
+ 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",
12883
+ body: [
12884
+ "\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",
12885
+ "\u6838\u5FC3\u539F\u5219\uFF1AAgent = prompt + knowledge + tools + skills/workflows + eval \u7684\u53EF\u8FD0\u884C\u5C01\u88C5\u3002",
12886
+ "\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",
12887
+ "\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",
12888
+ "\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",
12889
+ "\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",
12890
+ "prepareAgentDraft \u53EA\u751F\u6210\u8349\u7A3F\uFF0C\u4E0D\u4EE3\u8868\u5DF2\u7ECF\u521B\u5EFA\u771F\u5B9E Agent\u3002",
12891
+ "\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",
12892
+ "\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",
12893
+ "\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",
12894
+ "\u53EA\u6709\u5F97\u5230\u660E\u786E\u786E\u8BA4\u540E\uFF0C\u624D\u8C03\u7528 createAgent \u521B\u5EFA\u771F\u5B9E Agent\u3002",
12895
+ "\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",
12896
+ "\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",
12897
+ "\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",
12898
+ "\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"
12899
+ ].join("\n"),
12900
+ toolNames: [
12901
+ "prepareAgentDraft",
12902
+ "createAgent",
12903
+ "createSkillDoc",
12904
+ "readDoc",
12905
+ "updateDoc",
12906
+ "updateAgent"
12907
+ ]
12908
+ },
12909
+ {
12910
+ slug: "app-builder",
12911
+ title: "app-builder",
12912
+ 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",
12913
+ body: [
12914
+ "\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",
12915
+ "",
12916
+ "## \u89D2\u8272",
12917
+ "- \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",
12918
+ "- \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u770B\u4EE3\u7801\uFF0C\u5426\u5219\u4E0D\u5C55\u793A\u5927\u6BB5\u4EE3\u7801\u3002",
12919
+ "- \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",
12920
+ "",
12921
+ "## \u5DE5\u4F5C\u65B9\u5F0F",
12922
+ "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",
12923
+ "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",
12924
+ "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",
12925
+ "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",
12926
+ "",
12927
+ "## \u65B0\u5EFA\u5E94\u7528",
12928
+ "- \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",
12929
+ "",
12930
+ "## \u6536\u5C3E",
12931
+ "- \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",
12932
+ "",
12933
+ "## \u5DE5\u5177",
12934
+ "- \u672C skill \u7684\u5DE5\u5177\uFF08app* / \u8868 / openAIGptImage \u7B49\uFF09\u7531\u300Capp-builder\u300D\u80FD\u529B\u5305\u6CE8\u5165",
12935
+ " \uFF08packages/ai/tools/toolPacks.ts \u7684 CAPABILITY_PACKS\uFF09\u3002\u82E5\u5F53\u524D runtime \u672A\u542F\u7528",
12936
+ " \u8BE5\u80FD\u529B\u5305\uFF0C\u5DE5\u5177\u9762\u4E0D\u4F1A\u5C55\u5F00\uFF0C\u9700\u8981\u5148\u786E\u8BA4\u8FD0\u884C\u73AF\u5883\u3002"
12937
+ ].join("\n"),
12938
+ toolNames: []
12939
+ }
12940
+ ];
12941
+ function seedBySlug(slug) {
12942
+ const seed = SPECIALIST_SKILL_SEEDS.find((item) => item.slug === slug);
12943
+ if (!seed) {
12944
+ throw new Error(`Unknown specialist skill slug: ${slug}`);
12945
+ }
12946
+ return seed;
12947
+ }
12948
+ function buildSpecialistSkillConfig(slug) {
12949
+ const seed = seedBySlug(slug);
12950
+ return {
12951
+ version: "0.1",
12952
+ kind: "skill",
12953
+ id: buildSpecialistSkillId(slug),
12954
+ name: seed.title,
12955
+ description: seed.description,
12956
+ ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
12957
+ };
12958
+ }
12959
+ function buildSpecialistSkillContentBySlug(slug) {
12960
+ const seed = seedBySlug(slug);
12961
+ const skillConfig = buildSpecialistSkillConfig(slug);
12962
+ return buildSkillDocMarkdown({
12963
+ body: seed.body,
12964
+ skillConfig
12965
+ });
12966
+ }
12967
+
12968
+ // packages/ai/skills/codePlannerSkills.ts
12969
+ var CODE_PLANNER_SKILL_SLUGS = [
12970
+ "code-planning",
12971
+ "search-first",
12972
+ "workspace-code",
12973
+ "web-research-lite",
12974
+ "dispatch-executors"
12975
+ ];
12976
+ var CODE_PLANNER_ROOT_SKILL_SLUG = "code-planning";
12977
+ function deterministicId2(prefix, seed) {
12978
+ let h = 2166136261;
12979
+ for (let i = 0; i < seed.length; i++) {
12980
+ h ^= seed.charCodeAt(i);
12981
+ h = h * 16777619 >>> 0;
12982
+ }
12983
+ const suffix = h.toString(36).toUpperCase().padStart(14, "0");
12984
+ return (prefix + suffix).slice(0, 26);
12985
+ }
12986
+ function normalizeSkillSeed2(input) {
12987
+ return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
12988
+ }
12989
+ function buildCodePlannerSkillId(slug) {
12990
+ return deterministicId2("01SK", normalizeSkillSeed2(slug) || slug);
12991
+ }
12992
+ function buildCodePlannerSkillPageKey(userId, slug) {
12993
+ return `page-${userId}-${buildCodePlannerSkillId(slug)}`;
12994
+ }
12995
+ var CODE_PLANNER_ROOT_SKILL_ID = buildCodePlannerSkillId(
12996
+ CODE_PLANNER_ROOT_SKILL_SLUG
12997
+ );
12998
+ function buildDispatchExecutorsPromptPatch(candidateKeys = DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS) {
12999
+ const keys = candidateKeys.map((key) => key.trim()).filter(Boolean);
13000
+ if (keys.length === 0) {
13001
+ throw new Error("buildDispatchExecutorsPromptPatch requires at least one candidate key");
13002
+ }
13003
+ return [
13004
+ "\u6D3E\u53D1\u534F\u8BAE\uFF1A",
13005
+ "- \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",
13006
+ "- \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",
13007
+ ...keys.map((key, index) => ` ${index + 1}. ${key}`),
13008
+ "- 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",
13009
+ "- \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",
13010
+ "- \u4E0D\u8981\u5199\u6B7B owner \u79C1\u6709 agentKey\u3002"
13011
+ ].join("\n");
13012
+ }
13013
+ var CODE_PLANNER_SKILL_SEEDS = [
13014
+ {
13015
+ slug: "search-first",
13016
+ title: "search-first",
13017
+ description: "Search-first protocol for code work: repo before web; evaluate Adopt/Extend/Compose/Build.",
13018
+ body: [
13019
+ "# search-first",
13020
+ "",
13021
+ "Protocol-only skill. It does not grant tools by itself.",
13022
+ "Use workspace and web skills for actual reads/searches."
13023
+ ].join("\n"),
13024
+ triggerMode: "required",
13025
+ promptPatch: [
13026
+ "Search-first \u534F\u8BAE\uFF1A",
13027
+ "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",
13028
+ "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",
13029
+ "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",
13030
+ "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",
13031
+ "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",
13032
+ "6. \u4ECE\u672A\u8C03\u7528\u7684\u6E20\u9053\u7981\u6B62\u58F0\u79F0\u5DF2\u641C\u7D22/\u5DF2\u68C0\u67E5\u3002"
13033
+ ].join("\n")
13034
+ },
13035
+ {
13036
+ slug: "workspace-code",
13037
+ title: "workspace-code",
13038
+ description: "Workspace read/edit/shell protocol for local bound folders and repo inspection.",
13039
+ body: [
13040
+ "# workspace-code",
13041
+ "",
13042
+ "Declares local workspace tools and the honest fallback when they are unavailable."
13043
+ ].join("\n"),
13044
+ triggerMode: "required",
13045
+ toolNames: [
13046
+ "readFile",
13047
+ "globFiles",
13048
+ "editFile",
13049
+ "execShell"
13050
+ ],
13051
+ promptPatch: [
13052
+ "\u5DE5\u4F5C\u533A\u534F\u8BAE\uFF1A",
13053
+ "- 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",
13054
+ "- \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",
13055
+ "- 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",
13056
+ "- 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",
13057
+ "- \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"
13058
+ ].join("\n")
13059
+ },
13060
+ {
13061
+ slug: "web-research-lite",
13062
+ title: "web-research-lite",
13063
+ description: "Lite web verification protocol for dependency/docs/issue lookups.",
13064
+ body: [
13065
+ "# web-research-lite",
13066
+ "",
13067
+ "Declares external search/scrape tools for verification after local search."
13068
+ ].join("\n"),
13069
+ triggerMode: "required",
13070
+ // 刻意不声明 toolNames:联网能力是系统层能力包(web-search / web-scrape),
13071
+ // 不编码的对话同样需要,不该由 Code Planner 私藏一份。这里只留协议,工具由
13072
+ // 宿主按能力包挂载,用户在设置页的全局开关才能真正管住它们。
13073
+ promptPatch: [
13074
+ "\u5916\u90E8\u68C0\u7D22\u534F\u8BAE\uFF1A",
13075
+ "- \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",
13076
+ "- \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",
13077
+ "- \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",
13078
+ "- \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"
13079
+ ].join("\n")
13080
+ },
13081
+ {
13082
+ slug: "dispatch-executors",
13083
+ title: "dispatch-executors",
13084
+ description: "startAgentRun dispatch protocol for Code Planner executor candidates.",
13085
+ body: [
13086
+ "# dispatch-executors",
13087
+ "",
13088
+ "Only startAgentRun is granted. Default candidate keys are platform public agents;",
13089
+ "hard allowlisting is enforced by runtimeContext.allowedChildAgentKeys when wired."
13090
+ ].join("\n"),
13091
+ triggerMode: "required",
13092
+ toolNames: ["startAgentRun"],
13093
+ // Keys come from core/builtinAgents — do not hard-code a separate list here.
13094
+ promptPatch: buildDispatchExecutorsPromptPatch(
13095
+ DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS
13096
+ )
13097
+ },
13098
+ {
13099
+ slug: "code-planning",
13100
+ title: "code-planning",
13101
+ description: "Root Code Planner skill: composes search-first, workspace, web, and dispatch skills.",
13102
+ body: [
13103
+ "# code-planning",
13104
+ "",
13105
+ "Composition-only root skill for Code Planner.",
13106
+ "Attach this skill on the Agent; children load via requiredSkills.",
13107
+ "Until runtimes expand skill pages, Agent seed also carries a compiled snapshot."
13108
+ ].join("\n"),
13109
+ triggerMode: "required",
13110
+ requiredSkillSlugs: [
13111
+ "search-first",
13112
+ "workspace-code",
13113
+ "web-research-lite",
13114
+ "dispatch-executors"
13115
+ ]
13116
+ }
13117
+ ];
13118
+ function seedBySlug2(slug) {
13119
+ const seed = CODE_PLANNER_SKILL_SEEDS.find((item) => item.slug === slug);
13120
+ if (!seed) {
13121
+ throw new Error(`Unknown Code Planner skill slug: ${slug}`);
13122
+ }
13123
+ return seed;
13124
+ }
13125
+ function collectCodePlannerReachableSkillSlugs(rootSlug = CODE_PLANNER_ROOT_SKILL_SLUG) {
13126
+ const ordered = [];
13127
+ const seen = /* @__PURE__ */ new Set();
13128
+ const visit = (slug) => {
13129
+ if (seen.has(slug)) return;
13130
+ seen.add(slug);
13131
+ ordered.push(slug);
13132
+ for (const child of seedBySlug2(slug).requiredSkillSlugs ?? []) {
13133
+ visit(child);
13134
+ }
13135
+ };
13136
+ visit(rootSlug);
13137
+ return ordered;
13138
+ }
13139
+ function compileCodePlannerEffectiveTools() {
13140
+ const tools = [];
13141
+ const seen = /* @__PURE__ */ new Set();
13142
+ for (const slug of collectCodePlannerReachableSkillSlugs()) {
13143
+ for (const toolName of seedBySlug2(slug).toolNames ?? []) {
13144
+ if (seen.has(toolName)) continue;
13145
+ seen.add(toolName);
13146
+ tools.push(toolName);
13147
+ }
13148
+ }
13149
+ return tools;
13150
+ }
13151
+ var CODE_PLANNER_COMPILED_EFFECTIVE_TOOLS = compileCodePlannerEffectiveTools();
13152
+ function buildCodePlannerSkillConfig(slug, options) {
13153
+ const seed = seedBySlug2(slug);
13154
+ const requiredSkills = options?.requiredSkills ?? seed.requiredSkillSlugs?.map((childSlug) => buildCodePlannerSkillId(childSlug));
13155
+ return {
13156
+ version: "0.1",
13157
+ kind: "skill",
13158
+ id: buildCodePlannerSkillId(slug),
13159
+ name: seed.title,
13160
+ description: seed.description,
13161
+ ...seed.triggerMode ? { triggerMode: seed.triggerMode } : {},
13162
+ ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {},
13163
+ ...requiredSkills?.length ? { requiredSkills: [...requiredSkills] } : {},
13164
+ ...seed.promptPatch ? { promptPatch: seed.promptPatch } : {}
13165
+ };
13166
+ }
13167
+ function buildCodePlannerSkillPageRecords(userId) {
13168
+ const trimmedUserId = userId.trim();
13169
+ if (!trimmedUserId) {
13170
+ throw new Error("buildCodePlannerSkillPageRecords requires userId");
13171
+ }
13172
+ return CODE_PLANNER_SKILL_SEEDS.map((seed) => {
13173
+ const skillId = buildCodePlannerSkillId(seed.slug);
13174
+ const dbKey = buildCodePlannerSkillPageKey(trimmedUserId, seed.slug);
13175
+ const requiredSkills = seed.requiredSkillSlugs?.map(
13176
+ (childSlug) => buildCodePlannerSkillPageKey(trimmedUserId, childSlug)
13177
+ );
13178
+ const skillConfig = buildCodePlannerSkillConfig(seed.slug, {
13179
+ requiredSkills
13180
+ });
13181
+ return {
13182
+ slug: seed.slug,
13183
+ skillId,
13184
+ dbKey,
13185
+ title: seed.title,
13186
+ content: buildSkillDocMarkdown({
13187
+ body: seed.body,
13188
+ skillConfig
13189
+ }),
13190
+ meta: {
13191
+ kind: "skill",
13192
+ skillConfig
13193
+ },
13194
+ ...skillConfig.toolNames?.length ? { tools: [...skillConfig.toolNames] } : {}
13195
+ };
13196
+ });
13197
+ }
13198
+
13199
+ // packages/ai/skills/searchDialogSkill.ts
13200
+ var SEARCH_DIALOG_SKILL_SLUGS = [
13201
+ "search-dialog-messages"
13202
+ ];
13203
+ function deterministicId3(prefix, seed) {
13204
+ let h = 2166136261;
13205
+ for (let i = 0; i < seed.length; i++) {
13206
+ h ^= seed.charCodeAt(i);
13207
+ h = h * 16777619 >>> 0;
13208
+ }
13209
+ const suffix = h.toString(36).toUpperCase().padStart(14, "0");
13210
+ return (prefix + suffix).slice(0, 26);
13211
+ }
13212
+ function normalizeSkillSeed3(input) {
13213
+ return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
13214
+ }
13215
+ function buildSearchDialogSkillId(slug) {
13216
+ return deterministicId3("01SK", normalizeSkillSeed3(slug) || slug);
13217
+ }
13218
+ function buildSearchDialogSkillPageKey(userId, slug) {
13219
+ return `page-${userId}-${buildSearchDialogSkillId(slug)}`;
13220
+ }
13221
+ var SEARCH_DIALOG_SKILL_SEEDS = [
13222
+ {
13223
+ slug: "search-dialog-messages",
13224
+ title: "\u5BF9\u8BDD\u68C0\u7D22",
13225
+ 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",
13226
+ body: [
13227
+ "\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",
13228
+ "",
13229
+ "## \u4EC0\u4E48\u65F6\u5019\u7528",
13230
+ "- \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",
13231
+ "- \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",
13232
+ "- \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",
13233
+ "- \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",
13234
+ "",
13235
+ "## listDialogs\uFF1A\u5B9A\u4F4D\u5BF9\u8BDD",
13236
+ "\u5217\u51FA\u5F53\u524D\u7528\u6237\u7684\u5BF9\u8BDD\uFF1A`listDialogs({ limit?, space?, includeScheduled? })`\u3002",
13237
+ "- \u8FD4\u56DE `{ total, dialogs: [{ id, dbKey, title, status, updatedAt, createdAt, spaceId, triggerType, primaryAgentKey }] }`\uFF0C\u6309\u6700\u8FD1\u66F4\u65B0\u6392\u5E8F\u3002",
13238
+ "- 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",
13239
+ "- \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",
13240
+ "",
13241
+ "## readDialog\uFF1A\u8BFB\u53D6\u5BF9\u8BDD",
13242
+ '\u8BFB\u53D6\u6307\u5B9A\u5BF9\u8BDD\u7684\u5143\u6570\u636E\u4E0E\u6700\u8FD1\u6D88\u606F\uFF1A`readDialog({ dialog: "<dialog \u7684 dbKey>" })`\u3002',
13243
+ "- 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",
13244
+ "- \u76EE\u6807\u5BF9\u8BDD\u4E0D\u660E\u786E\u65F6\uFF0C\u5148 listDialogs \u5B9A\u4F4D\u518D\u8BFB\u53D6\u3002",
13245
+ "- limit \u63A7\u5236\u8FD4\u56DE\u6D88\u606F\u6761\u6570\uFF08\u9ED8\u8BA4 120\uFF0C\u4E0A\u9650 1000\uFF09\u3002",
13246
+ "",
13247
+ "## searchDialogMessages\uFF1A\u539F\u6587\u641C\u7D22",
13248
+ '\u57FA\u672C\u5F62\u5F0F\uFF1A`searchDialogMessages({ dialogKey: "<dialog \u7684 dbKey>", query: "<\u8981\u641C\u7684\u6587\u672C>" })`',
13249
+ "",
13250
+ "\u53C2\u6570\uFF1A",
13251
+ "- dialogKey\uFF1A\u76EE\u6807\u5BF9\u8BDD\u7684 dbKey\uFF08\u5F62\u5982 dialog-<userId>-01ABC...\uFF09\u3002",
13252
+ "- query\uFF1A\u8981\u5728\u539F\u59CB\u6D88\u606F\u5185\u5BB9\u91CC\u641C\u7D22\u7684\u6587\u672C\u3002",
13253
+ "- limit\uFF1A\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u6761\u5339\u914D\uFF08\u4E0A\u9650 10\uFF09\u3002",
13254
+ "- scanLimit\uFF1A\u4ECE server \u62C9\u53D6\u65F6\u6700\u591A\u626B\u63CF\u591A\u5C11\u6761\u6D88\u606F\uFF08\u4E0A\u9650 500\uFF09\u3002",
13255
+ "- contextMessages\uFF1A\u6BCF\u6761\u5339\u914D\u524D\u540E\u9644\u5E26\u591A\u5C11\u6761\u90BB\u8FD1\u6D88\u606F\uFF08\u4E0A\u9650 3\uFF09\u3002",
13256
+ "- role\uFF1A\u53EF\u9009\uFF0C\u53EA\u641C\u6307\u5B9A\u89D2\u8272\uFF08user / assistant / tool / system\uFF09\u3002",
13257
+ "- includeTools\uFF1A\u53EF\u9009\uFF0C\u662F\u5426\u5305\u542B tool \u6D88\u606F\u3002",
13258
+ "",
13259
+ "## \u8FD4\u56DE",
13260
+ "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",
13261
+ "\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",
13262
+ "",
13263
+ "## \u8FB9\u754C",
13264
+ "- 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",
13265
+ "- 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",
13266
+ "- \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",
13267
+ "- \u641C\u4E0D\u5230\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u7528\u6458\u8981\u6216\u8BB0\u5FC6\u7F16\u9020\u539F\u6587\u3002"
13268
+ ].join("\n"),
13269
+ toolNames: ["listDialogs", "readDialog", "searchDialogMessages"]
13270
+ }
13271
+ ];
13272
+ function seedBySlug3(slug) {
13273
+ const seed = SEARCH_DIALOG_SKILL_SEEDS.find((item) => item.slug === slug);
13274
+ if (!seed) {
13275
+ throw new Error(`Unknown search-dialog skill slug: ${slug}`);
13276
+ }
13277
+ return seed;
13278
+ }
13279
+ function buildSearchDialogSkillConfig(slug) {
13280
+ const seed = seedBySlug3(slug);
13281
+ return {
13282
+ version: "0.1",
13283
+ kind: "skill",
13284
+ id: buildSearchDialogSkillId(slug),
13285
+ name: seed.title,
13286
+ description: seed.description,
13287
+ ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
13288
+ };
13289
+ }
13290
+ function buildSearchDialogSkillContentBySlug(slug) {
13291
+ const seed = seedBySlug3(slug);
13292
+ const skillConfig = buildSearchDialogSkillConfig(slug);
13293
+ return buildSkillDocMarkdown({
13294
+ body: seed.body,
13295
+ skillConfig
13296
+ });
13297
+ }
13298
+
13299
+ // packages/ai/skills/searchSpaceSkill.ts
13300
+ var SEARCH_SPACE_SKILL_SLUGS = [
13301
+ "search-all-spaces"
13302
+ ];
13303
+ function deterministicId4(prefix, seed) {
13304
+ let h = 2166136261;
13305
+ for (let i = 0; i < seed.length; i++) {
13306
+ h ^= seed.charCodeAt(i);
13307
+ h = h * 16777619 >>> 0;
13308
+ }
13309
+ const suffix = h.toString(36).toUpperCase().padStart(14, "0");
13310
+ return (prefix + suffix).slice(0, 26);
13311
+ }
13312
+ function normalizeSkillSeed4(input) {
13313
+ return input.trim().toLowerCase().replace(/[^a-z0-9\u4e00-\u9fa5]+/g, "-").replace(/^-+|-+$/g, "");
13314
+ }
13315
+ function buildSearchSpaceSkillId(slug) {
13316
+ return deterministicId4("01SK", normalizeSkillSeed4(slug) || slug);
13317
+ }
13318
+ function buildSearchSpaceSkillPageKey(userId, slug) {
13319
+ return `page-${userId}-${buildSearchSpaceSkillId(slug)}`;
13320
+ }
13321
+ var SEARCH_SPACE_SKILL_SEEDS = [
13322
+ {
13323
+ slug: "search-all-spaces",
13324
+ title: "\u5168\u7A7A\u95F4\u641C\u7D22",
13325
+ 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",
13326
+ body: [
13327
+ "\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",
13328
+ "",
13329
+ "## \u4EC0\u4E48\u65F6\u5019\u7528",
13330
+ "- \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",
13331
+ "- \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",
13332
+ "- \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",
13333
+ "",
13334
+ "## \u8C03\u7528\u65B9\u5F0F",
13335
+ '`search_all_spaces({ query: "<\u5173\u952E\u8BCD>" })`',
13336
+ "- query\uFF1A\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5339\u914D\u6807\u9898\u4E0E\u6587\u4EF6\u540D\uFF08contentKey\uFF09\u3002",
13337
+ "- \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",
13338
+ "",
13339
+ "## \u8BED\u4E49\u4E0E\u8FB9\u754C",
13340
+ "- \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",
13341
+ "- \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",
13342
+ "- \u6CA1\u6709\u547D\u4E2D\u65F6\u5982\u5B9E\u8BF4\u660E\uFF0C\u4E0D\u8981\u7F16\u9020\u5185\u5BB9\u6216\u7A7A\u95F4\u5F52\u5C5E\u3002",
13343
+ "- \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"
13344
+ ].join("\n"),
13345
+ toolNames: ["search_all_spaces"]
13346
+ }
13347
+ ];
13348
+ function seedBySlug4(slug) {
13349
+ const seed = SEARCH_SPACE_SKILL_SEEDS.find((item) => item.slug === slug);
13350
+ if (!seed) {
13351
+ throw new Error(`Unknown search-space skill slug: ${slug}`);
13352
+ }
13353
+ return seed;
13354
+ }
13355
+ function buildSearchSpaceSkillConfig(slug) {
13356
+ const seed = seedBySlug4(slug);
13357
+ return {
13358
+ version: "0.1",
13359
+ kind: "skill",
13360
+ id: buildSearchSpaceSkillId(slug),
13361
+ name: seed.title,
13362
+ description: seed.description,
13363
+ ...seed.toolNames?.length ? { toolNames: [...seed.toolNames] } : {}
13364
+ };
13365
+ }
13366
+ function buildSearchSpaceSkillContentBySlug(slug) {
13367
+ const seed = seedBySlug4(slug);
13368
+ const skillConfig = buildSearchSpaceSkillConfig(slug);
13369
+ return buildSkillDocMarkdown({
13370
+ body: seed.body,
13371
+ skillConfig
13372
+ });
13373
+ }
13374
+
13375
+ // packages/ai/skills/builtinSkillRegistry.ts
13376
+ var codePlannerContentBySlug = /* @__PURE__ */ (() => {
13377
+ const cache = /* @__PURE__ */ new Map();
13378
+ return (slug) => {
13379
+ if (cache.size === 0) {
13380
+ for (const page of buildCodePlannerSkillPageRecords("platform-skill-owner")) {
13381
+ cache.set(page.slug, page.content);
13382
+ }
13383
+ }
13384
+ return cache.get(slug) ?? "";
13385
+ };
13386
+ })();
13387
+ var OBJECT_SKILL_KINDS = Object.keys(
13388
+ BUILTIN_OBJECT_SKILL_IDS
13389
+ );
13390
+ var SOURCES = [
13391
+ {
13392
+ slugs: OBJECT_SKILL_KINDS,
13393
+ buildSkillId: (kind) => BUILTIN_OBJECT_SKILL_IDS[kind],
13394
+ buildPageKey: (userId, kind) => buildBuiltinObjectSkillDbKey(kind, userId),
13395
+ buildConfig: buildBuiltinObjectSkillConfig,
13396
+ buildContent: buildBuiltinObjectSkillPageContent
13397
+ },
13398
+ {
13399
+ slugs: CODING_SKILL_SLUGS,
13400
+ buildSkillId: buildCodingSkillId,
13401
+ buildPageKey: buildCodingSkillPageKey,
13402
+ buildConfig: buildCodingSkillConfig,
13403
+ buildContent: buildCodingSkillContentBySlug
13404
+ },
13405
+ {
13406
+ slugs: SPECIALIST_SKILL_SLUGS,
13407
+ buildSkillId: buildSpecialistSkillId,
13408
+ buildPageKey: buildSpecialistSkillPageKey,
13409
+ buildConfig: buildSpecialistSkillConfig,
13410
+ buildContent: buildSpecialistSkillContentBySlug
13411
+ },
13412
+ {
13413
+ slugs: CODE_PLANNER_SKILL_SLUGS,
13414
+ buildSkillId: buildCodePlannerSkillId,
13415
+ buildPageKey: buildCodePlannerSkillPageKey,
13416
+ buildConfig: buildCodePlannerSkillConfig,
13417
+ buildContent: codePlannerContentBySlug
13418
+ },
13419
+ {
13420
+ slugs: SEARCH_DIALOG_SKILL_SLUGS,
13421
+ buildSkillId: buildSearchDialogSkillId,
13422
+ buildPageKey: buildSearchDialogSkillPageKey,
13423
+ buildConfig: buildSearchDialogSkillConfig,
13424
+ buildContent: buildSearchDialogSkillContentBySlug
13425
+ },
13426
+ {
13427
+ slugs: SEARCH_SPACE_SKILL_SLUGS,
13428
+ buildSkillId: buildSearchSpaceSkillId,
13429
+ buildPageKey: buildSearchSpaceSkillPageKey,
13430
+ buildConfig: buildSearchSpaceSkillConfig,
13431
+ buildContent: buildSearchSpaceSkillContentBySlug
13432
+ }
13433
+ ];
13434
+ var buildRegistry = () => {
13435
+ const entries = [];
13436
+ const seenSlugs = /* @__PURE__ */ new Set();
13437
+ for (const source of SOURCES) {
13438
+ for (const slug of source.slugs) {
13439
+ if (seenSlugs.has(slug)) {
13440
+ throw new Error(`Duplicate builtin skill slug across sources: ${slug}`);
13441
+ }
13442
+ seenSlugs.add(slug);
13443
+ const config = source.buildConfig(slug);
13444
+ entries.push({
13445
+ slug,
13446
+ skillId: source.buildSkillId(slug),
13447
+ title: config.name || slug,
13448
+ config,
13449
+ content: source.buildContent(slug),
13450
+ buildPageKey: (userId) => source.buildPageKey(userId, slug)
13451
+ });
13452
+ }
13453
+ }
13454
+ return entries;
13455
+ };
13456
+ var REGISTRY = buildRegistry();
13457
+ var BY_SLUG = new Map(REGISTRY.map((entry) => [entry.slug, entry]));
13458
+ var BY_SKILL_ID = new Map(REGISTRY.map((entry) => [entry.skillId, entry]));
13459
+ var BY_LOWER_NAME = new Map(
13460
+ REGISTRY.map((entry) => [entry.title.trim().toLowerCase(), entry])
13461
+ );
13462
+ var listBuiltinSkills = () => REGISTRY;
13463
+ var resolveBuiltinSkillEntry = (identifier) => {
13464
+ const raw = typeof identifier === "string" ? identifier.trim() : "";
13465
+ if (!raw) return null;
13466
+ const bySlug = BY_SLUG.get(raw);
13467
+ if (bySlug) return bySlug;
13468
+ const byId = BY_SKILL_ID.get(raw);
13469
+ if (byId) return byId;
13470
+ if (raw.startsWith("page-")) {
13471
+ for (const entry of REGISTRY) {
13472
+ if (raw.endsWith(`-${entry.skillId}`)) return entry;
13473
+ }
13474
+ }
13475
+ return null;
13476
+ };
13477
+ var resolveBuiltinSkillByName = (identifier) => {
13478
+ const raw = typeof identifier === "string" ? identifier.trim() : "";
13479
+ if (!raw) return null;
13480
+ return resolveBuiltinSkillEntry(raw) ?? BY_LOWER_NAME.get(raw.toLowerCase()) ?? null;
13481
+ };
13482
+ var resolveBuiltinSkillPage = (identifier) => {
13483
+ const entry = resolveBuiltinSkillEntry(identifier);
13484
+ if (!entry) return null;
13485
+ const raw = typeof identifier === "string" ? identifier.trim() : entry.slug;
13486
+ return {
13487
+ dbKey: raw || entry.slug,
13488
+ title: entry.title,
13489
+ content: entry.content,
13490
+ meta: { kind: "skill", skillConfig: entry.config },
13491
+ ...entry.config.toolNames?.length ? { tools: [...entry.config.toolNames] } : {}
13492
+ };
13493
+ };
13494
+ var CAPABILITIES = CAPABILITY_PACKS.map(
13495
+ (pack) => ({
13496
+ kind: "capability",
13497
+ slug: pack.id,
13498
+ title: pack.label,
13499
+ description: pack.description,
13500
+ toolNames: pack.tools,
13501
+ ...pack.promptPatch ? { promptPatch: pack.promptPatch } : {},
13502
+ icon: pack.icon,
13503
+ defaultEnabled: pack.defaultEnabled
13504
+ })
13505
+ );
13506
+ var CAPABILITY_BY_SLUG = new Map(CAPABILITIES.map((c) => [c.slug, c]));
13507
+ var resolveBuiltinCapability = (slug) => {
13508
+ const raw = typeof slug === "string" ? slug.trim() : "";
13509
+ return raw ? CAPABILITY_BY_SLUG.get(raw) ?? null : null;
13510
+ };
13511
+
13512
+ // packages/ai/tools/agentSkillConfig.ts
13513
+ var MODES = [
13514
+ "required",
13515
+ "recommended",
13516
+ "disabled"
13517
+ ];
13518
+ var asMode = (value) => typeof value === "string" && MODES.includes(value) ? value : null;
13519
+ var resolveAgentSkillConfig = (source) => {
13520
+ const out = {};
13521
+ const skills = source?.skills;
13522
+ if (skills && typeof skills === "object" && !Array.isArray(skills)) {
13523
+ for (const [rawSlug, rawMode] of Object.entries(skills)) {
13524
+ const slug = typeof rawSlug === "string" ? rawSlug.trim() : "";
13525
+ const mode = asMode(rawMode);
13526
+ if (slug && mode) out[slug] = mode;
13527
+ }
13528
+ return out;
13529
+ }
13530
+ for (const slug of asTrimmedNonEmptyStringArray(source?.enabledPacks) ?? []) {
13531
+ out[slug] = "required";
13532
+ }
13533
+ return out;
13534
+ };
13535
+ var resolveAgentRequiredPackIds = (source) => {
13536
+ const config = resolveAgentSkillConfig(source);
13537
+ return Object.keys(config).filter((slug) => config[slug] === "required");
13538
+ };
13539
+ var resolveAgentRecommendedSkillNames = (source, lookup) => {
13540
+ const config = resolveAgentSkillConfig(source);
13541
+ const resolve = lookup ?? defaultSkillTitleLookup;
13542
+ const out = [];
13543
+ for (const slug of Object.keys(config)) {
13544
+ if (config[slug] !== "recommended") continue;
13545
+ const title = resolve(slug)?.title;
13546
+ out.push(title || slug);
13547
+ }
13548
+ return out;
13549
+ };
13550
+ var defaultSkillTitleLookup = (slug) => {
13551
+ const cap = resolveBuiltinCapability(slug);
13552
+ if (cap) return { title: cap.title };
13553
+ const skill = resolveBuiltinSkillEntry(slug);
13554
+ return skill ? { title: skill.title } : null;
13555
+ };
13556
+ var isAgentSkillDisabled = (source, slug) => resolveAgentSkillConfig(source)[slug] === "disabled";
13557
+
12613
13558
  // packages/ai/tools/loadSkillTool.ts
12614
13559
  var loadSkillFunctionSchema = {
12615
13560
  name: "loadSkill",
@@ -12860,7 +13805,7 @@ async function createCategoryFunc(args, thunkApi) {
12860
13805
  const { getState } = thunkApi;
12861
13806
  const dispatch = thunkApi.dispatch.bind(thunkApi);
12862
13807
  const state = getState();
12863
- const spaceId = selectCurrentSpaceId(state);
13808
+ const spaceId = getCurrentSpaceId();
12864
13809
  if (!spaceId) {
12865
13810
  throw new Error("\u65E0\u6CD5\u521B\u5EFA\u5206\u7C7B\uFF0C\u56E0\u4E3A\u5F53\u524D\u7A7A\u95F4\u672A\u8BBE\u5B9A\u3002");
12866
13811
  }
@@ -12904,7 +13849,7 @@ async function updateContentCategoryFunc(args, thunkApi) {
12904
13849
  const { getState } = thunkApi;
12905
13850
  const dispatch = thunkApi.dispatch.bind(thunkApi);
12906
13851
  const state = getState();
12907
- const spaceId = selectCurrentSpaceId(state);
13852
+ const spaceId = getCurrentSpaceId();
12908
13853
  if (!spaceId) {
12909
13854
  throw new Error("\u65E0\u6CD5\u66F4\u65B0\u5206\u7C7B\uFF0C\u56E0\u4E3A\u5F53\u524D\u7A7A\u95F4\u672A\u8BBE\u5B9A\u3002");
12910
13855
  }
@@ -12950,7 +13895,7 @@ var queryContentsByCategoryFunctionSchema = {
12950
13895
  async function queryContentsByCategoryFunc(args, thunkApi) {
12951
13896
  const { getState } = thunkApi;
12952
13897
  const state = getState();
12953
- const spaceId = selectCurrentSpaceId(state);
13898
+ const spaceId = getCurrentSpaceId();
12954
13899
  if (!spaceId) {
12955
13900
  throw new Error("\u65E0\u6CD5\u67E5\u8BE2\u5185\u5BB9\uFF0C\u56E0\u4E3A\u5F53\u524D\u7A7A\u95F4\u672A\u8BBE\u5B9A\u3002");
12956
13901
  }
@@ -13202,6 +14147,39 @@ async function importDataFunc(args, thunkApi) {
13202
14147
  }
13203
14148
  }
13204
14149
 
14150
+ // packages/render/table/utils/tableSerialization.ts
14151
+ var fetchAndSerializeTable = async (tableMeta, db, options = {}) => {
14152
+ const tenantId = tableMeta.tenantId;
14153
+ const tableId = tableMeta.tableId;
14154
+ const results = await fetchAndCacheTableRows({
14155
+ db,
14156
+ tenantId,
14157
+ tableId,
14158
+ token: options.token,
14159
+ remoteServers: options.remoteServers ?? []
14160
+ });
14161
+ const columns = tableMeta.columns || [];
14162
+ const headerRow = columns.map((c) => c.label || c.name);
14163
+ const separatorRow = columns.map(() => "---");
14164
+ let tableMd = "";
14165
+ if (columns.length > 0) {
14166
+ tableMd = `| ${headerRow.join(" | ")} |
14167
+ | ${separatorRow.join(" | ")} |
14168
+ `;
14169
+ results.forEach((row) => {
14170
+ const rowData = columns.map((col) => {
14171
+ const val = row[col.name];
14172
+ return val === void 0 || val === null ? "" : String(val).replace(/\|/g, "\\|");
14173
+ });
14174
+ tableMd += `| ${rowData.join(" | ")} |
14175
+ `;
14176
+ });
14177
+ } else {
14178
+ tableMd = "(No columns defined for this table)";
14179
+ }
14180
+ return { rows: results, markdown: tableMd };
14181
+ };
14182
+
13205
14183
  // packages/ai/tools/readFileTool.ts
13206
14184
  var readFileFunctionSchema = {
13207
14185
  name: "readFile",
@@ -13491,7 +14469,7 @@ async function listUserSpacesFunc(args, thunkApi, context) {
13491
14469
  try {
13492
14470
  const { getState } = thunkApi;
13493
14471
  const state = getState();
13494
- let memberSpaces = selectAllMemberSpaces(state);
14472
+ let memberSpaces = getAllMemberSpaces();
13495
14473
  if (ownedOnly) {
13496
14474
  memberSpaces = memberSpaces.filter((ms) => ms.role === "owner");
13497
14475
  }
@@ -13929,7 +14907,7 @@ async function deleteDialogsFunc(args, thunkApi) {
13929
14907
  const deletedDialogIds = [];
13930
14908
  const deletedDialogKeys = [];
13931
14909
  const failures = [];
13932
- const { deleteDialog } = await import("./dialogSlice-N4HPG6HM.js");
14910
+ const { deleteDialog } = await import("./dialogSlice-B7KCGHMY.js");
13933
14911
  for (const target of targets) {
13934
14912
  try {
13935
14913
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -14009,12 +14987,13 @@ function formatAgentListCard(agents, maxDisplay = 8) {
14009
14987
  }
14010
14988
  var listAgentsFunctionSchema = {
14011
14989
  name: "listAgents",
14012
- description: "List the current user's Nolo agents as safe summaries. The `agents` array in the JSON result carries each agent's runnable `agentKey` (agent-<userId>-<id> for owned, agent-pub-<id> for public) plus model, apiSource, tools, prices, isOwned, isOAuth, nextAvailableAt (epoch ms when temporarily unavailable), isFavorite. Copy `agentKey` verbatim into startAgentRun. Results prioritize favorites; within that, user OAuth/custom agents first, then other owned agents, then public agents.",
14990
+ description: "List the current user's Nolo agents as safe summaries. The `agents` array in the JSON result carries each agent's runnable `agentKey` (agent-<userId>-<id> for owned, agent-pub-<id> for public) plus model, apiSource, tools, prices, isOwned, isOAuth, nextAvailableAt (epoch ms when temporarily unavailable), isFavorite. Copy `agentKey` verbatim into startAgentRun. Results prioritize favorites; within that, user OAuth/custom agents first, then other owned agents, then public agents. Agents currently rate-limited (429, nextAvailableAt in the future) are hidden by default so a caller won't pick one that can't run right now; set `showUnavailable: true` to include them. The response carries an `unavailableCount` for the number of hidden rate-limited agents.",
14013
14991
  parameters: {
14014
14992
  type: "object",
14015
14993
  properties: {
14016
14994
  limit: { type: "integer", description: "Maximum agents to return. Default 100, max 500." },
14017
- publicOnly: { type: "boolean", description: "Only show public agents." }
14995
+ publicOnly: { type: "boolean", description: "Only show public agents." },
14996
+ showUnavailable: { type: "boolean", description: "Include agents currently rate-limited (429). Default false." }
14018
14997
  }
14019
14998
  }
14020
14999
  };
@@ -14047,12 +15026,17 @@ async function listAgentsFunc(args, thunkApi) {
14047
15026
  userId
14048
15027
  })
14049
15028
  );
15029
+ const now = Date.now();
14050
15030
  if (args?.publicOnly === true) {
14051
15031
  agents = agents.filter((agent) => agent.isPublic);
14052
15032
  }
15033
+ const unavailableCount = agents.filter((a) => isAgentUnavailableNow(a, now)).length;
15034
+ if (args?.showUnavailable !== true) {
15035
+ agents = agents.filter((a) => !isAgentUnavailableNow(a, now));
15036
+ }
14053
15037
  agents = sortSafeAgentSummaries(agents);
14054
15038
  return {
14055
- rawData: { success: true, total: agents.length, agents },
15039
+ rawData: { success: true, total: agents.length, unavailableCount, agents },
14056
15040
  displayData: formatAgentListCard(agents)
14057
15041
  };
14058
15042
  }
@@ -14198,7 +15182,7 @@ var readSkillDocFunctionSchema = {
14198
15182
  }
14199
15183
  };
14200
15184
  async function readSkillDocFunc(args, thunkApi) {
14201
- const { buildReadDocResult } = await import("./readDocTool-MXM3T6PE.js");
15185
+ const { buildReadDocResult } = await import("./readDocTool-CSWD6NPC.js");
14202
15186
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
14203
15187
  if (typeof id !== "string" || !id.trim()) {
14204
15188
  throw new Error("readSkillDoc requires id or doc.");
@@ -14357,7 +15341,7 @@ var deleteSpacesFunctionSchema = {
14357
15341
  };
14358
15342
  var defaultDeps = {
14359
15343
  selectCurrentUserId: selectIdentityUserId,
14360
- selectMemberSpaces: (state) => selectAllMemberSpaces(state),
15344
+ selectMemberSpaces: (state) => getAllMemberSpaces(),
14361
15345
  readSpaceRecord: async (thunkApi, spaceId) => {
14362
15346
  try {
14363
15347
  const record = await thunkApi.dispatch(
@@ -18878,7 +19862,7 @@ var cloudflareCrawlStatusFunctionSchema = {
18878
19862
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
18879
19863
  const { jobId, limit, status, cursor } = args;
18880
19864
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
18881
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-ARGFDJAG.js");
19865
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-B2MFXMEG.js");
18882
19866
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
18883
19867
  const params = new URLSearchParams();
18884
19868
  if (limit !== void 0) params.set("limit", String(limit));
@@ -19653,7 +20637,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19653
20637
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19654
20638
  async function addImageContentToSpace(input) {
19655
20639
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19656
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-NCURJ6PK.js")).addContentAction;
20640
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-YVINZQTF.js")).addContentAction;
19657
20641
  await addContentAction2(
19658
20642
  {
19659
20643
  spaceId: input.spaceId,
@@ -20120,7 +21104,7 @@ var runOpenAIImageTool = async (args, thunkApi, model) => {
20120
21104
  },
20121
21105
  { withAuth: true }
20122
21106
  );
20123
- const spaceId = selectCurrentSpaceId(state);
21107
+ const spaceId = getCurrentSpaceId();
20124
21108
  const userId = selectIdentityUserId(state);
20125
21109
  const currentServer = selectCurrentServer(state);
20126
21110
  if (spaceId && userId && result?.files?.length) {
@@ -20239,7 +21223,7 @@ var chatgptWebImageGenerateFunc = async (args, thunkApi) => {
20239
21223
  },
20240
21224
  { withAuth: true, agentKey }
20241
21225
  );
20242
- const spaceId = selectCurrentSpaceId(state);
21226
+ const spaceId = getCurrentSpaceId();
20243
21227
  const userId = selectIdentityUserId(state);
20244
21228
  const currentServer = selectCurrentServer(state);
20245
21229
  if (spaceId && userId && result?.files?.length) {
@@ -20345,7 +21329,7 @@ var remotionRenderVideoFunc = async (args, thunkApi) => {
20345
21329
  );
20346
21330
  const state = thunkApi.getState();
20347
21331
  const userId = selectIdentityUserId(state);
20348
- const spaceId = selectCurrentSpaceId(state);
21332
+ const spaceId = getCurrentSpaceId();
20349
21333
  const currentServer = selectCurrentServer(state);
20350
21334
  const fileId = result?.fileId;
20351
21335
  const metadata = result?.metadata || {};
@@ -20445,7 +21429,7 @@ var rememberMemoryFunctionSchema = {
20445
21429
  // packages/ai/tools/rememberMemoryTool.ts
20446
21430
  async function rememberMemoryFunc(args, thunkApi) {
20447
21431
  const state = thunkApi.getState();
20448
- const spaceId = selectCurrentSpaceId(state) || void 0;
21432
+ const spaceId = getCurrentSpaceId() || void 0;
20449
21433
  const content = String(args.content ?? "").trim();
20450
21434
  const scope = args.scope ?? "auto";
20451
21435
  const kind = args.kind ?? "episodic";
@@ -20507,7 +21491,7 @@ async function queryMemoryFunc(args, thunkApi) {
20507
21491
  {
20508
21492
  agentKey: resolveDialogRuntimeAgentKey(dialog),
20509
21493
  userInput: query,
20510
- ...selectCurrentSpaceId(state) ? { spaceId: selectCurrentSpaceId(state) } : {}
21494
+ ...getCurrentSpaceId() ? { spaceId: getCurrentSpaceId() } : {}
20511
21495
  },
20512
21496
  { withAuth: true }
20513
21497
  );
@@ -23231,6 +24215,162 @@ ${resultStr}
23231
24215
  };
23232
24216
  }
23233
24217
 
24218
+ // packages/ai/tools/toolRunStore.ts
24219
+ var import_react = __toESM(require_react());
24220
+ var createToolRunId = () => `toolrun_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
24221
+ var runsById = /* @__PURE__ */ new Map();
24222
+ var listeners = /* @__PURE__ */ new Set();
24223
+ var version = 0;
24224
+ var notify = () => {
24225
+ version += 1;
24226
+ for (const listener of listeners) {
24227
+ try {
24228
+ listener();
24229
+ } catch {
24230
+ }
24231
+ }
24232
+ };
24233
+ function toolRunStarted(payload) {
24234
+ const {
24235
+ id,
24236
+ messageId,
24237
+ toolName,
24238
+ behavior,
24239
+ inputSummary,
24240
+ startedAt,
24241
+ interaction,
24242
+ input
24243
+ } = payload;
24244
+ runsById.set(id, {
24245
+ id,
24246
+ messageId,
24247
+ toolName,
24248
+ behavior,
24249
+ inputSummary,
24250
+ status: "running",
24251
+ startedAt: startedAt ?? Date.now(),
24252
+ interaction,
24253
+ input,
24254
+ error: void 0,
24255
+ finishedAt: void 0,
24256
+ outputSummary: void 0,
24257
+ steps: void 0
24258
+ });
24259
+ notify();
24260
+ }
24261
+ function toolRunSetPending(payload) {
24262
+ const { id } = payload;
24263
+ const run = runsById.get(id);
24264
+ if (run) {
24265
+ run.status = "pending";
24266
+ notify();
24267
+ }
24268
+ }
24269
+ function toolRunSucceeded(payload) {
24270
+ const { id, outputSummary, steps, finishedAt } = payload;
24271
+ const run = runsById.get(id);
24272
+ if (run) {
24273
+ run.status = "succeeded";
24274
+ run.outputSummary = outputSummary;
24275
+ if (steps !== void 0) {
24276
+ run.steps = steps;
24277
+ }
24278
+ run.finishedAt = finishedAt ?? Date.now();
24279
+ notify();
24280
+ }
24281
+ }
24282
+ function toolRunUpdated(payload) {
24283
+ const { id, outputSummary, steps } = payload;
24284
+ const run = runsById.get(id);
24285
+ if (run) {
24286
+ if (outputSummary !== void 0) {
24287
+ run.outputSummary = outputSummary;
24288
+ }
24289
+ if (steps !== void 0) {
24290
+ run.steps = steps;
24291
+ }
24292
+ notify();
24293
+ }
24294
+ }
24295
+ function toolRunFailed(payload) {
24296
+ const { id, error, outputSummary, steps, finishedAt } = payload;
24297
+ const run = runsById.get(id);
24298
+ if (run) {
24299
+ run.status = "failed";
24300
+ run.error = error;
24301
+ if (outputSummary !== void 0) {
24302
+ run.outputSummary = outputSummary;
24303
+ }
24304
+ if (steps !== void 0) {
24305
+ run.steps = steps;
24306
+ }
24307
+ run.finishedAt = finishedAt ?? Date.now();
24308
+ notify();
24309
+ }
24310
+ }
24311
+ function getAllToolRuns() {
24312
+ return Array.from(runsById.values()).sort((a, b) => a.startedAt - b.startedAt);
24313
+ }
24314
+ function getToolRunById(id) {
24315
+ return runsById.get(id);
24316
+ }
24317
+ var executeToolRun = createAsyncThunk(
24318
+ "toolRun/executeToolRun",
24319
+ async ({ id, inputOverride }, thunkApi) => {
24320
+ const run = getToolRunById(id);
24321
+ if (!run) {
24322
+ throw new Error(`ToolRun not found: ${id}`);
24323
+ }
24324
+ const executionInput = inputOverride ?? run.input;
24325
+ if (!executionInput) {
24326
+ throw new Error(`ToolRun ${id} has no input to execute with.`);
24327
+ }
24328
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-2JI52WJP.js");
24329
+ const { executor } = findToolExecutor2(run.toolName);
24330
+ toolRunStarted({
24331
+ id: run.id,
24332
+ messageId: run.messageId,
24333
+ toolName: run.toolName,
24334
+ behavior: run.behavior,
24335
+ inputSummary: run.inputSummary,
24336
+ startedAt: Date.now(),
24337
+ interaction: run.interaction,
24338
+ input: executionInput
24339
+ });
24340
+ try {
24341
+ const result = await executor(executionInput, thunkApi, {
24342
+ parentMessageId: run.messageId
24343
+ });
24344
+ toolRunSucceeded({
24345
+ id: run.id,
24346
+ outputSummary: result?.displayData || ""
24347
+ });
24348
+ if (run.toolName === "deleteSpaces") {
24349
+ const latestState = thunkApi.getState();
24350
+ const userId = latestState.auth?.currentUser?.userId;
24351
+ if (userId) {
24352
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-L44CI2QR.js");
24353
+ await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
24354
+ }
24355
+ }
24356
+ return {
24357
+ id: run.id,
24358
+ rawData: result?.rawData,
24359
+ displayData: result?.displayData
24360
+ };
24361
+ } catch (e) {
24362
+ const msg = toErrorMessage(e);
24363
+ const structured = getToolResultErrorData(e);
24364
+ toolRunFailed({
24365
+ id: run.id,
24366
+ error: msg,
24367
+ outputSummary: asOptionalTrimmedString(structured?.displayData)
24368
+ });
24369
+ throw e;
24370
+ }
24371
+ }
24372
+ );
24373
+
23234
24374
  // packages/app/actions/syncAppRecord.ts
23235
24375
  var syncAppRecord = (appKey, appRecord, options = {}) => async (_dispatch, getState, extra) => {
23236
24376
  if (!appKey || !appRecord) return;
@@ -23640,7 +24780,7 @@ function decideAppDeploySpaceId(params) {
23640
24780
  }
23641
24781
  async function resolveAppDeploySpaceId(args, thunkApi) {
23642
24782
  const state = thunkApi?.getState?.();
23643
- const rawSpaceId = state?.space?.viewMode === "all" ? null : state?.space?.currentSpaceId;
24783
+ const rawSpaceId = getViewMode() === "all" ? null : getCurrentSpaceIdRaw();
23644
24784
  const currentSpaceId = asOptionalTrimmedString(rawSpaceId);
23645
24785
  if (!args.appId) {
23646
24786
  return decideAppDeploySpaceId({
@@ -25041,7 +26181,7 @@ var updateContentTitleTool = {
25041
26181
  var updateContentTitleFunc = async (args, thunkApi) => {
25042
26182
  const { dispatch, getState } = thunkApi;
25043
26183
  const state = getState();
25044
- const spaceId = selectCurrentSpaceId(state);
26184
+ const spaceId = getCurrentSpaceId();
25045
26185
  const { contentId, title } = args;
25046
26186
  console.log(
25047
26187
  `[updateContentTitleFunc] spaceId: ${spaceId}, contentId: ${contentId}, title: ${title}`
@@ -25246,7 +26386,7 @@ function buildMyContentItemsFromUserData(records, currentServer, spaceNameById,
25246
26386
  var selectCurrentSpaceIdFromState2 = (state) => state.space.currentSpaceId;
25247
26387
  var selectCurrentSpaceFromState = (state) => state.space.currentSpace;
25248
26388
  var selectAllMemberSpacesFromState = (state) => {
25249
- const memberSpaces = state.space.memberSpaces ?? [];
26389
+ const memberSpaces = getAllMemberSpaces();
25250
26390
  return [...memberSpaces].sort((a, b) => {
25251
26391
  const aUpdatedAt = a.spaceUpdatedAt ?? a.memberUpdatedAt ?? a.updatedAt ?? a.createdAt ?? a.joinedAt ?? 0;
25252
26392
  const bUpdatedAt = b.spaceUpdatedAt ?? b.memberUpdatedAt ?? b.updatedAt ?? b.createdAt ?? b.joinedAt ?? 0;
@@ -25373,6 +26513,14 @@ async function searchAllSpacesFunc(args, thunkApi) {
25373
26513
  };
25374
26514
  }
25375
26515
 
26516
+ // packages/core/clipMultilineText.ts
26517
+ function clipMultilineText(value, max) {
26518
+ const trimmed = value.trim();
26519
+ if (trimmed.length <= max) return trimmed;
26520
+ return `${trimmed.slice(0, max)}
26521
+ ...[truncated ${trimmed.length - max} chars]`;
26522
+ }
26523
+
25376
26524
  // packages/ai/tools/dialogMessageSearch.ts
25377
26525
  var normalizeDialogSearchText = (value) => String(value ?? "").trim();
25378
26526
  var clampDialogSearchNumber = (value, fallback, min, max) => {
@@ -25684,7 +26832,7 @@ async function updateDocFunc(args, thunkApi) {
25684
26832
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
25685
26833
  };
25686
26834
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
25687
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-B5AHDNW5.js");
26835
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-ZYWZWIRB.js");
25688
26836
  if (getDocState().pageKey === id) {
25689
26837
  applyExternalDocUpdate({
25690
26838
  slateData: finalSlateData,
@@ -25709,7 +26857,7 @@ async function updateDocFunc(args, thunkApi) {
25709
26857
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
25710
26858
  async function dispatchSetSettings(thunkApi, changes) {
25711
26859
  const injectedSetSettings = thunkApi?.extra?.setSettings;
25712
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-4M37TN7V.js")).setSettings;
26860
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-FIFOQ6OR.js")).setSettings;
25713
26861
  await thunkApi.dispatch(setSettings(changes)).unwrap();
25714
26862
  }
25715
26863
  var updateUserPreferenceProfileFunctionSchema = {
@@ -26078,7 +27226,7 @@ async function runZiweiChart(input) {
26078
27226
  const gender = normalizeGender(input.gender);
26079
27227
  const fixLeap = input.fixLeap !== false;
26080
27228
  const isLeapMonth = input.isLeapMonth === true;
26081
- const { astro } = await import("./lib-FYYBQIXS.js");
27229
+ const { astro } = await import("./lib-2ZTNRXR4.js");
26082
27230
  const rawChart = calendarType === "lunar" ? astro.byLunar(dateStr, timeIndex, gender, isLeapMonth, fixLeap, language) : astro.bySolar(dateStr, timeIndex, gender, fixLeap, language);
26083
27231
  const palaces = rawChart.palaces.map((palace) => ({
26084
27232
  index: palace.index,
@@ -27957,17 +29105,29 @@ var findToolExecutor = (rawName) => {
27957
29105
  };
27958
29106
 
27959
29107
  export {
27960
- shouldBlockForGptPro,
27961
- i18n_default,
27962
- formatAgentListCard,
27963
29108
  readXPostFunctionSchema,
27964
29109
  readXPostFunc,
27965
29110
  readXhsProfileFunctionSchema,
27966
29111
  readXhsProfileFunc,
27967
- rememberMemoryFunctionSchema,
29112
+ setTodoListFunc,
29113
+ resolveBuiltinSkillPage,
29114
+ resolveAgentRequiredPackIds,
29115
+ resolveAgentRecommendedSkillNames,
29116
+ shouldBlockForGptPro,
29117
+ i18n_default,
29118
+ clipMultilineText,
29119
+ fetchAndSerializeTable,
29120
+ getToolResultErrorData,
29121
+ createToolRunId,
29122
+ toolRunStarted,
29123
+ toolRunSetPending,
29124
+ toolRunSucceeded,
29125
+ toolRunFailed,
29126
+ getAllToolRuns,
27968
29127
  waitForAbortableDelay,
27969
29128
  createSSEParser,
27970
- setTodoListFunc,
29129
+ formatAgentListCard,
29130
+ rememberMemoryFunctionSchema,
27971
29131
  TOOL_GROUP_META,
27972
29132
  toolQueryFunctionSchema,
27973
29133
  toolQueryFunc,