nolo-cli 0.99.0-alpha.1 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/README.md +1 -1
  2. package/{_executeModel-CJP7VSJB.js → _executeModel-F324DLT6.js} +74 -67
  3. package/action-PNPQLJHG.js +20 -0
  4. package/{addContentAction-O7R66HEX.js → addContentAction-RBOUD7SJ.js} +12 -11
  5. package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-IODCR6TB.js} +18 -19
  6. package/{agentDeleteCommand-2YAHAZFJ.js → agentDeleteCommand-EFWZSSZA.js} +47 -42
  7. package/{agentEmailCommands-UH7KTTCN.js → agentEmailCommands-3TQXT2DZ.js} +97 -87
  8. package/agentListCommands-EDV4RJ4D.js +742 -0
  9. package/{agentMachineCommands-6NVUXZGQ.js → agentMachineCommands-HCHRMJRJ.js} +48 -43
  10. package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-IRNZXVGE.js} +1 -1
  11. package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-B4T2DJ5H.js} +1 -1
  12. package/agentRecordCommands-YX7CN2PH.js +138 -0
  13. package/agentRunCommand-BT5U3G5Q.js +167 -0
  14. package/{agentRunControl-AVJR4JW4.js → agentRunControl-3HWA2LLQ.js} +2 -2
  15. package/{agentRuntimeLocal-VXZSDIGT.js → agentRuntimeLocal-SXYAKX3A.js} +48 -39
  16. package/{agentSlice-OU6TZKQP.js → agentSlice-TFZX3W5R.js} +14 -13
  17. package/{appDeleteCommands-32MHLR4L.js → appDeleteCommands-GTTBG53T.js} +46 -41
  18. package/{appDeployCommands-WCQOUSOB.js → appDeployCommands-ZZCHUJAT.js} +46 -41
  19. package/{appDeployStatusCommands-6QKB7DYN.js → appDeployStatusCommands-GZLLGY7Z.js} +46 -41
  20. package/{appGetCommands-SFAPP5PB.js → appGetCommands-ZRLWHJ3C.js} +46 -41
  21. package/{appListCommands-EKUBDRUO.js → appListCommands-OHARWLIL.js} +46 -41
  22. package/{authCommand-F4EFRRX6.js → authCommand-NHDLY3IB.js} +118 -24
  23. package/{authCommands-RGOGCPP6.js → authCommands-UDBJVSZU.js} +7 -5
  24. package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-MAR5LPAC.js} +10 -8
  25. package/{chromeCommands-FZYAU75D.js → chromeCommands-K27J4OVZ.js} +124 -28
  26. package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-IXRLN57H.js} +4 -3
  27. package/{chunk-6OZ36FXI.js → chunk-27ONFIEY.js} +22 -4
  28. package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
  29. package/{chunk-53HEEOTT.js → chunk-2WJ57RJA.js} +83 -16
  30. package/chunk-36XI7AVG.js +7881 -0
  31. package/{chunk-CSSGXQJ3.js → chunk-3AD37QCF.js} +551 -516
  32. package/{chunk-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
  33. package/{chunk-ABQYVJBJ.js → chunk-46Y5D2BZ.js} +5 -5
  34. package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
  35. package/{chunk-H62HCIUP.js → chunk-4FFUDT6D.js} +24 -21
  36. package/chunk-4LCOCOR5.js +50 -0
  37. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  38. package/{chunk-IIVGDG4I.js → chunk-4YSOUKUR.js} +13 -7
  39. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  40. package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
  41. package/chunk-5J3PYNUP.js +255 -0
  42. package/chunk-5MMAK75Q.js +15 -0
  43. package/{chunk-JPGCXHNM.js → chunk-5OA5HMTL.js} +1 -1
  44. package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
  45. package/{chunk-3BMYXEUW.js → chunk-6O4IK4V2.js} +1 -1
  46. package/{chunk-GQBOR3G6.js → chunk-7KVZ5LDQ.js} +2 -2
  47. package/{chunk-DNCEALKX.js → chunk-7MMSLEPA.js} +22 -29
  48. package/{chunk-L5UXH3B2.js → chunk-7TKWCTSY.js} +22 -6
  49. package/chunk-7UEMHIFV.js +13536 -0
  50. package/chunk-A4SQRTZ6.js +15 -0
  51. package/{chunk-7S4YWN7P.js → chunk-ADBZWMFB.js} +4 -4
  52. package/chunk-AGIM7IMJ.js +147 -0
  53. package/{chunk-5UTFL4QJ.js → chunk-AOTBKDRK.js} +7 -0
  54. package/{chunk-Q554LLSI.js → chunk-AUDNYVRC.js} +1 -1
  55. package/{chunk-53SXIJK6.js → chunk-AW2UF3FF.js} +19 -17
  56. package/chunk-BMQ2MJUK.js +153 -0
  57. package/{chunk-6YTOJY35.js → chunk-BZ7NPA6G.js} +35 -2
  58. package/chunk-CHOZJMJS.js +78 -0
  59. package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
  60. package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
  61. package/chunk-DZ7R5V3Y.js +164 -0
  62. package/{chunk-3VNWWVKB.js → chunk-E3YWHWCR.js} +50 -18
  63. package/{chunk-V4MJDUSR.js → chunk-E73ON47R.js} +2 -2
  64. package/{chunk-BA63USCV.js → chunk-ED7UD6EF.js} +1 -1
  65. package/{chunk-KQ4ONNQD.js → chunk-EKPKW6RM.js} +155 -8
  66. package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
  67. package/{chunk-HJUYAD4A.js → chunk-FJ5BGMNM.js} +5 -5
  68. package/{chunk-2F7RJC6L.js → chunk-FOXQ7BAB.js} +1 -1
  69. package/{chunk-6IG4XSS6.js → chunk-FY7DCYW7.js} +88 -17
  70. package/{chunk-6VFARHZW.js → chunk-G53AA7RW.js} +934 -1091
  71. package/{chunk-J4MOO56S.js → chunk-GARACBQB.js} +10 -2
  72. package/chunk-GMZLP5DV.js +82 -0
  73. package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
  74. package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
  75. package/{chunk-QOKAKDPE.js → chunk-HIM3FCLF.js} +0 -1
  76. package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
  77. package/{chunk-VLTIYV3X.js → chunk-HP57OUJO.js} +4 -4
  78. package/{chunk-WCI7KQ4F.js → chunk-HPATMUWW.js} +24 -77
  79. package/{chunk-WP7SWVOM.js → chunk-I5L5CBSE.js} +20 -11
  80. package/{chunk-7KBQIEEW.js → chunk-J6ZXSIBA.js} +11 -9
  81. package/{chunk-GPCZ7UXG.js → chunk-K6U4NKFJ.js} +1 -1
  82. package/{chunk-FXRSQVU4.js → chunk-L6VWRPBW.js} +24 -5
  83. package/{chunk-4OEFYTWL.js → chunk-LKERWYPX.js} +67 -48
  84. package/{chunk-OEVAY4J6.js → chunk-LNVJHIGA.js} +18 -20
  85. package/{chunk-LS2ZANRJ.js → chunk-LOCNXNOU.js} +1 -1
  86. package/{chunk-PUOC4YRO.js → chunk-M7VLQGQP.js} +11 -0
  87. package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
  88. package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
  89. package/chunk-NWENLDMM.js +42 -0
  90. package/{chunk-AEOE4Z6Q.js → chunk-NZWAO6LH.js} +13 -15
  91. package/chunk-OCZKATRC.js +129 -0
  92. package/chunk-OW4APERY.js +870 -0
  93. package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
  94. package/{chunk-KIOVECFO.js → chunk-OYA47B3D.js} +873 -227
  95. package/{chunk-TOP2VXOR.js → chunk-PCF3QU5Q.js} +5 -5
  96. package/{chunk-WV42OMV7.js → chunk-PTDYOADJ.js} +8 -8
  97. package/{chunk-5H7KJX7J.js → chunk-SEB5HAUU.js} +5 -5
  98. package/{chunk-6D6VBVEW.js → chunk-SNMQMOD2.js} +80 -14
  99. package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
  100. package/{chunk-Z77CRGTW.js → chunk-TVCAR26G.js} +1 -1
  101. package/{chunk-ICLAW6SN.js → chunk-TWYWQFJR.js} +10 -10
  102. package/chunk-TY3TIUJK.js +89 -0
  103. package/{chunk-I3TQJXQ7.js → chunk-U3C3IA32.js} +9 -2
  104. package/{chunk-RG6JBBX5.js → chunk-U7XXEI5R.js} +166 -13
  105. package/{chunk-UZGQNTVW.js → chunk-UA324D4O.js} +8 -6
  106. package/chunk-UJXNKP5V.js +760 -0
  107. package/{chunk-UKZDAFYT.js → chunk-UM4PH574.js} +6 -10
  108. package/{chunk-GEPUP7OO.js → chunk-UVKDJUTL.js} +3 -3
  109. package/{chunk-S2YPVYRY.js → chunk-UW4JVRYR.js} +67 -45
  110. package/{chunk-ZCYXJSTU.js → chunk-V5OWQOJZ.js} +19 -88
  111. package/{chunk-NA35QHCF.js → chunk-V7Y6KRAH.js} +1 -1
  112. package/{chunk-3DII57IT.js → chunk-VCAQFMVN.js} +1 -1
  113. package/{chunk-JRQFUXY7.js → chunk-VEYL5MO5.js} +99 -22
  114. package/chunk-VIWDGTDA.js +8 -0
  115. package/chunk-VJVNU77E.js +83 -0
  116. package/{chunk-VA2M2T36.js → chunk-VNR63IV3.js} +23 -28
  117. package/{chunk-UKWGR5SS.js → chunk-VY6VFGKR.js} +194 -1144
  118. package/{chunk-BP4XNZRM.js → chunk-W72ISAKC.js} +4 -4
  119. package/{chunk-DHDMC6FO.js → chunk-WCGC6S77.js} +14 -9
  120. package/{chunk-ZDXFQMB4.js → chunk-WHZ67DFH.js} +47 -67
  121. package/{chunk-QDSINZM3.js → chunk-WJ3B6FX6.js} +1 -14
  122. package/{chunk-HVURBGF3.js → chunk-XFUBXRVI.js} +6 -6
  123. package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
  124. package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
  125. package/{chunk-ETI2NYVF.js → chunk-YPOPJAKN.js} +4 -4
  126. package/{chunk-SH43IESU.js → chunk-YUNJN43V.js} +44 -9
  127. package/chunk-YV25TM3R.js +780 -0
  128. package/chunk-ZRAU6T47.js +56 -0
  129. package/commandRegistry-MODC2W5M.js +833 -0
  130. package/{contentThunks-I3AWWOK4.js → contentThunks-636N2NA7.js} +36 -34
  131. package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
  132. package/{createAgentAutomationAction-QNNIWYI3.js → createAgentAutomationAction-2ZGYUIT4.js} +38 -36
  133. package/createDialogAction-DOZD7XW7.js +69 -0
  134. package/{createPageAction-G2ASSMFZ.js → createPageAction-FJQVAHIK.js} +45 -42
  135. package/{chunk-Q6NAY3XN.js → cursorProvider-YGGNMVWX.js} +2496 -9897
  136. package/{dbSlice-XVWBAGYN.js → dbSlice-Q25STFGJ.js} +11 -10
  137. package/{deleteFile-YG6QMJLU.js → deleteFile-AJ2EZMHT.js} +7 -6
  138. package/{dialogCommands-5J56DFWN.js → dialogCommands-LF7PLYAD.js} +49 -45
  139. package/{dialogSlice-HQLYBDH7.js → dialogSlice-FOWUVVPW.js} +40 -33
  140. package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
  141. package/{docCreateCommands-KYI2DC2U.js → docCreateCommands-NQR3S7A4.js} +48 -43
  142. package/{docDeleteCommands-67REUSRY.js → docDeleteCommands-V3IAQ2HT.js} +49 -44
  143. package/{docReadCommands-HOSVSBDJ.js → docReadCommands-GDX4CLSU.js} +47 -42
  144. package/{docStore-5LMRNCZG.js → docStore-F645L3JQ.js} +16 -12
  145. package/{docUpdateCommands-EMGCSMXY.js → docUpdateCommands-QMYXWQOU.js} +48 -43
  146. package/{fetchMessages-EIU7UFFK.js → fetchMessages-I5ICDDHM.js} +5 -5
  147. package/{getPricing-LUSEABA6.js → getPricing-NMMFT3YI.js} +4 -4
  148. package/{handleSendMessageAction-DMWWDWN5.js → handleSendMessageAction-6DCDAY6A.js} +110 -86
  149. package/index.js +87 -884
  150. package/{lib-FRRS27KN.js → lib-PU2G2MSO.js} +523 -191
  151. package/{localDialogRead-BTFJ4V2I.js → localDialogRead-ZHZ3KXDM.js} +2 -2
  152. package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-TU6OBC76.js} +9 -6
  153. package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-VKWVOPPI.js} +1 -1
  154. package/{machineCommands-T4T4AUNA.js → machineCommands-465OUHT4.js} +91 -81
  155. package/machineWsRunDispatch-M3FUGFP4.js +154 -0
  156. package/{memberThunks-QGFLFVCI.js → memberThunks-R75S3RWP.js} +20 -18
  157. package/{models-T3SG6MJ5.js → models-ZPU5EDF4.js} +2 -2
  158. package/oauthTokenStore-ITEB663N.js +23 -0
  159. package/package.json +1 -1
  160. package/pdf-U6KSUEZZ.js +26435 -0
  161. package/processSpawn-SOAV3FEV.js +11 -0
  162. package/profileConfig-ZGOFORWV.js +43 -0
  163. package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-TEBH7FDX.js} +7 -7
  164. package/{providerRegistry-757OWH3O.js → providerRegistry-CBJLNCET.js} +11 -7
  165. package/{read-COE3ZYR6.js → read-SRQMNO26.js} +7 -6
  166. package/{readDocTool-5USN4A6V.js → readDocTool-RC3JUNJ2.js} +5 -3
  167. package/{readlineWorkspace-LN2D7OGW.js → readlineWorkspace-LFCVKGAB.js} +2704 -2060
  168. package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-46XQV5Q7.js} +21 -25
  169. package/{runAgentClientLoop-I773V27D.js → runAgentClientLoop-KBRADH67.js} +75 -69
  170. package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-PIVSBZRZ.js} +4 -4
  171. package/runtimeModeArgs-2Y7BALTO.js +31 -0
  172. package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-J4V5ADQF.js} +15 -13
  173. package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-UHHV2QZW.js} +22 -26
  174. package/{chunk-AFUORTY4.js → settingThunks-PPZZZOWN.js} +226 -940
  175. package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
  176. package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
  177. package/{spaceCommands-NKJVJCQQ.js → spaceCommands-2P2X37MC.js} +51 -46
  178. package/{streamAgentChatTurn-PSF5RYKO.js → streamAgentChatTurn-CCOW4CUC.js} +199 -104
  179. package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-A2TMVGAE.js} +18 -19
  180. package/{tableCommands-O6NWHFKV.js → tableCommands-6U4BMLRR.js} +10 -10
  181. package/{toolApiClient-QVJ6HDNN.js → toolApiClient-EJT6TMFG.js} +3 -3
  182. package/tools-QNXUF3LE.js +116 -0
  183. package/{tuiSummaryLlmCaller-WFRWERGK.js → tuiSummaryLlmCaller-Q65IBDGO.js} +24 -21
  184. package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
  185. package/{updateDialogTitleAction-QBT5WOLY.js → updateDialogTitleAction-ZLUQE6XC.js} +82 -44
  186. package/action-YVYQEAAV.js +0 -31
  187. package/agentListCommands-KMS675GZ.js +0 -406
  188. package/agentRecordCommands-A7AIQPNG.js +0 -128
  189. package/agentRunCommand-KO5UM7O6.js +0 -155
  190. package/browser-image-compression-MFDTD7K6.js +0 -1763
  191. package/chatQueueReduxAdapter-JS633LXU.js +0 -186
  192. package/chunk-M76ECQRD.js +0 -13658
  193. package/chunk-MEYIRKDN.js +0 -8967
  194. package/chunk-Q5FJJ6XI.js +0 -103
  195. package/chunk-S7Z2HMCN.js +0 -25
  196. package/chunk-Y5GCAMGP.js +0 -9
  197. package/chunk-YHYPCMKI.js +0 -19005
  198. package/chunk-YPREESF4.js +0 -225
  199. package/createDialogAction-STKILXXW.js +0 -65
  200. package/machineWsRunDispatch-F6XWVLKA.js +0 -144
  201. package/settingSlice-ZQZVUPKK.js +0 -204
  202. package/syncMapping-N6RGXGBW.js +0 -437
  203. package/tools-2ZTTVIGF.js +0 -110
  204. package/{chunk-VMFTFOWF.js → chunk-3AH7LNUB.js} +7 -7
  205. package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
  206. package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-AFUORTY4.js";
4
+ } from "./chunk-NWENLDMM.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -10,14 +10,14 @@ import {
10
10
  sanitizeShareData,
11
11
  shareKey,
12
12
  toNonEmptyString
13
- } from "./chunk-VMFTFOWF.js";
13
+ } from "./chunk-3AH7LNUB.js";
14
14
  import {
15
15
  noloDeleteRequest,
16
16
  noloWriteRequest
17
- } from "./chunk-UKWGR5SS.js";
17
+ } from "./chunk-VY6VFGKR.js";
18
18
  import {
19
19
  normalizeTimeFields
20
- } from "./chunk-QOKAKDPE.js";
20
+ } from "./chunk-HIM3FCLF.js";
21
21
  import {
22
22
  selectIdentityUser,
23
23
  selectIdentityUserId
@@ -1,13 +1,16 @@
1
- import {
2
- buildSkillDocMarkdown
3
- } from "./chunk-Q554LLSI.js";
4
1
  import {
5
2
  SYSTEM_AGENT_CAPABILITIES,
6
3
  SYSTEM_AGENT_CAPABILITY_IDS
7
- } from "./chunk-QDSINZM3.js";
4
+ } from "./chunk-WJ3B6FX6.js";
5
+ import {
6
+ buildSkillDocMarkdown
7
+ } from "./chunk-AUDNYVRC.js";
8
+ import {
9
+ CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES
10
+ } from "./chunk-5J3PYNUP.js";
8
11
  import {
9
12
  createKey
10
- } from "./chunk-VMFTFOWF.js";
13
+ } from "./chunk-3AH7LNUB.js";
11
14
 
12
15
  // packages/ai/tools/codeWorkDiscipline.ts
13
16
  var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
@@ -30,7 +33,7 @@ var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\u
30
33
  - \u6309\u89D2\u8272\u52A0\u8F7D\u5BF9\u5E94 skill\uFF1Areviewer \u5148 \`loadSkill("coding-review")\` \u62FF\u901A\u7528\u6D41\u7A0B\uFF0C\u518D\u6309\u89D2\u8272 \`loadSkill("coding-review-<role>")\` \u62FF\u68C0\u67E5\u9879\u3002\u89D2\u8272\u6E05\u5355\uFF1Acode-quality\uFF08**\u5FC5\u8DD1**\uFF09/ architecture\uFF08**\u5355\u72EC\u6D3E\u53D1**\uFF0C\u4E2D\u7EA7\u4EE5\u4E0A\u95EE\u9898\uFF09/ security\uFF08\u6309\u9700 + \u5B89\u5168\u654F\u611F\u89E6\u53D1\u5FC5\u8DD1\uFF09/ frontend-ux\uFF08\u6D89\u53CA UI \u65F6\uFF09/ backend-data\uFF08\u6D89\u53CA server \u65F6\uFF09\u3002\u89D2\u8272\u5207\u5272\u7684\u76EE\u7684\u662F\u6CE8\u610F\u529B\u9694\u79BB\u2014\u2014\u6BCF\u4E2A\u89D2\u8272\u53EA\u76EF\u81EA\u5DF1\u7684\u68C0\u67E5\u9762\uFF0C\u6309\u9700\u542F\u7528\uFF0C\u907F\u514D\u4E00\u4E2A reviewer \u80CC\u6240\u6709\u89D2\u8272\u5BFC\u81F4\u6CE8\u610F\u529B\u7A00\u91CA\u3002
31
34
  - Verdict \u6807\u51C6\uFF1AAPPROVE\uFF08\u65E0 CRITICAL \u6216 HIGH\uFF09\u2192 \u53EF commit\uFF1BWARNING\uFF08\u4EC5 HIGH\uFF09\u2192 \u62A5\u544A owner \u51B3\u5B9A\uFF1BBLOCK\uFF08\u6709 CRITICAL\uFF09\u2192 \u5FC5\u987B\u5148\u4FEE\u3002
32
35
  - review \u662F\u591A\u8F6E\u6536\u655B\u7684\uFF1A\u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u51FA finding \u5C31\u4FEE \u2192 \u590D\u5BA1\uFF0C\u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u6BCF\u8F6E review \u65E0\u4E0A\u4E0B\u6587\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
33
- - \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit message \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\uFF0C\u4F46\u9ED8\u8BA4\u5FC5\u987B\u6D3E review\u3002`;
36
+ - \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF1A\u4E0D\u8981\u8865\u5199\u6216\u4F2A\u9020 review \u8BC1\u636E\uFF0C\u4E5F**\u4E0D\u8981\u7528 [no-review: \u539F\u56E0] \u8FD9\u7C7B\u5199\u6CD5**\u2014\u2014\u5B83\u4EFB\u4F55\u5224\u636E\u90FD\u89E3\u6790\u4E0D\u4E86\uFF0C\u5199\u4E86\u7167\u6837\u88AB\u62E6\u3002\u81EA\u6709\u95F8\u95E8\u8BA4\u7684\u5F62\u5F0F\u662F Reviewed-by: <\u975E\u7A7A\u7F72\u540D> \u52A0 Review: \u5E26\u7ED3\u8BBA\uFF08APPROVE / Approved / WARNING\uFF0C\u5360\u4F4D\u7B26\u5982 <pending> \u4E0D\u7B97\uFF09\uFF0Ccommit-msg \u4E0E pre-push / pre-merge \u90FD\u8D70\u8FD9\u4E00\u6761\u6B63\u5219\u3002pre-push / pre-merge **\u53E6**\u8BA4\u4E00\u6761 owner-only \u8C41\u514D\uFF1A\u6B63\u6587\u5199 No-Review: <\u539F\u56E0> \u4E14 commit author email \u547D\u4E2D packages/nolo-ci/core/src/mapping.ts \u7684 NO_REVIEW_OWNER_EMAILS \u767D\u540D\u5355\u2014\u2014agent \u8EAB\u4EFD\uFF08\u5982 app-builder@nolo.local\uFF09\u4E0D\u9002\u7528\u3002\u771F\u88AB\u5361\u4F4F\u5C31\u5982\u5B9E\u4E0A\u62A5\u5361\u70B9\u3001\u7531 owner \u51B3\u5B9A\uFF1Bgit push --no-verify \u4EC5\u9650\u7BA1\u7406\u5458/\u7D27\u6025\u6062\u590D\uFF0C\u670D\u52A1\u7AEF G2 \u4E0D\u53EF\u7ED5\u8FC7\u3002`;
34
37
  var buildCodeWorkDiscipline = (heading) => `# ${heading}
35
38
 
36
39
  ${CODE_WORK_DISCIPLINE_BODY}`;
@@ -61,6 +64,8 @@ var TOOL_PACKS = {
61
64
  "updateSelf",
62
65
  "ask_user",
63
66
  "createAgentAutomation",
67
+ "updateAgentAutomation",
68
+ "deleteAgentAutomation",
64
69
  "notifyUser"
65
70
  ],
66
71
  // L2 - 联网搜索:与 CAPABILITY_PACKS「web-search」对齐。
@@ -236,7 +241,7 @@ var CAPABILITY_PACKS = [
236
241
  {
237
242
  id: "video-transcription",
238
243
  label: "\u89C6\u9891\u8F6C\u5199",
239
- description: "\u8D34\u89C6\u9891\u94FE\u63A5\u5373\u53EF\u8F6C\u5199\u4E3A\u5E26\u6807\u70B9\u6587\u672C\u4E0E SRT\u3002\u652F\u6301 B \u7AD9\u5206 P\uFF08\u9ED8\u8BA4\u5168\u90E8\u5904\u7406\uFF09\u3001YouTube \u7B49\uFF1B\u6296\u97F3\u8BF7\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4F7F\u7528\u3002",
244
+ description: "\u8D34\u89C6\u9891\u94FE\u63A5\u5373\u53EF\u8F6C\u5199\u4E3A\u5E26\u6807\u70B9\u6587\u672C\u4E0E SRT\u3002\u652F\u6301 B \u7AD9\u5206 P\uFF08\u9ED8\u8BA4\u5168\u90E8\u5904\u7406\uFF09\u3001YouTube \u7B49\uFF1B\u652F\u6301\u6296\u97F3\u5206\u4EAB\u6587\u6848/\u77ED\u94FE\uFF0C\u628A\u5206\u4EAB\u6587\u5B57\u91CC\u7684\u94FE\u63A5\u4F20\u7ED9 url\u3002",
240
245
  tools: ["transcribeVideo"],
241
246
  defaultEnabled: false,
242
247
  icon: "\u{1F3AC}",
@@ -246,7 +251,7 @@ var CAPABILITY_PACKS = [
246
251
  - \u7528\u6237\u8D34\u4E0A\u89C6\u9891\u94FE\u63A5\u65F6\uFF0C\u76F4\u63A5\u8C03\u7528 \`transcribeVideo({ url })\`\uFF0C\u4E0D\u8981\u5148\u95EE\u8981\u4E0D\u8981\u8F6C\u5199\u3002
247
252
  - B \u7AD9\u5206 P / \u5408\u96C6\uFF1A\u7F3A\u7701\u5904\u7406\u5168\u90E8\uFF1B\u82E5\u7528\u6237\u6307\u5B9A\u300C\u53EA\u8981\u7B2C 3\u30014 \u96C6\u300D\u5219\u4F20 \`p: [3, 4]\`\u3002
248
253
  - \u8FD4\u56DE\u91CC\u7684 \`processedParts\` / \`availableParts\` \u5FC5\u987B\u5411\u7528\u6237\u8BF4\u6E05\u695A\uFF0C\u907F\u514D\u9759\u9ED8\u4E22\u5206 P\u3002
249
- - \u6296\u97F3\u82E5\u62A5\u300C\u8BE5\u5E73\u53F0\u9700\u8981\u767B\u5F55\u6001\uFF0C\u8BF7\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4E2D\u4F7F\u7528\u300D\uFF0C\u63D0\u793A\u7528\u6237\u6539\u8D70\u684C\u9762\u7AEF\u6D4F\u89C8\u80FD\u529B\uFF0C\u4E0D\u8981\u5C1D\u8BD5\u4F20 cookie\u3002
254
+ - \u652F\u6301\u6296\u97F3\u5206\u4EAB\u6587\u6848/\u77ED\u94FE\uFF0C\u628A\u5206\u4EAB\u6587\u5B57\u91CC\u7684\u94FE\u63A5\u4F20\u7ED9 url\u3002
250
255
  `
251
256
  }
252
257
  ];
@@ -353,7 +358,7 @@ function isWebSearchTool(name) {
353
358
  return WEB_SEARCH_TOOL_NAMES.has(name);
354
359
  }
355
360
  function isBrowserTool(name) {
356
- return name.startsWith("browser_");
361
+ return name.startsWith("browser_") && !CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES.includes(name);
357
362
  }
358
363
  function addDefaultLightWebToolsForConfiguredAgents(toolNames, agentConfig) {
359
364
  const explicitToolNames = Array.isArray(
@@ -5,20 +5,18 @@ import {
5
5
  } from "./chunk-ZJ7UHBJS.js";
6
6
  import {
7
7
  deleteDialog,
8
- i18nBaseConfig,
9
- initReactI18next,
10
- instance,
8
+ runtime_default,
11
9
  toast
12
- } from "./chunk-YHYPCMKI.js";
10
+ } from "./chunk-7UEMHIFV.js";
13
11
  import {
14
- require_date_fns
15
- } from "./chunk-M76ECQRD.js";
12
+ formatISO
13
+ } from "./chunk-ZRAU6T47.js";
16
14
  import {
17
15
  require_react
18
16
  } from "./chunk-YDH3FDFQ.js";
19
17
  import {
20
18
  isSystemAdmin
21
- } from "./chunk-QDSINZM3.js";
19
+ } from "./chunk-A4SQRTZ6.js";
22
20
  import {
23
21
  asRecordOrEmpty
24
22
  } from "./chunk-KX6YBIHG.js";
@@ -27,7 +25,7 @@ import {
27
25
  addContentAction,
28
26
  checkSpaceMembership,
29
27
  localSpaceAuthorityPatchStamp
30
- } from "./chunk-V4MJDUSR.js";
28
+ } from "./chunk-E73ON47R.js";
31
29
  import {
32
30
  createSpaceKey,
33
31
  normalizeSpaceId
@@ -41,7 +39,24 @@ import {
41
39
  uploadFileAction,
42
40
  upsertSSREntity,
43
41
  write
44
- } from "./chunk-H62HCIUP.js";
42
+ } from "./chunk-4FFUDT6D.js";
43
+ import {
44
+ DEVICE_LOCAL_OWNER_ID,
45
+ getRuntimeServerContext,
46
+ isDeviceLocalSpaceBody,
47
+ resolveReplicationServers,
48
+ scheduleDeleteReplication,
49
+ scheduleWriteReplication
50
+ } from "./chunk-UJXNKP5V.js";
51
+ import {
52
+ buildTombstoneRecord
53
+ } from "./chunk-D2MDMY2M.js";
54
+ import {
55
+ extractUserId
56
+ } from "./chunk-M2EJHDJP.js";
57
+ import {
58
+ isRecord
59
+ } from "./chunk-KUG52IAP.js";
45
60
  import {
46
61
  SEPARATOR,
47
62
  asTrimmedNonEmptyStringArray,
@@ -53,41 +68,26 @@ import {
53
68
  rowKey,
54
69
  splitKey,
55
70
  ulid
56
- } from "./chunk-VMFTFOWF.js";
71
+ } from "./chunk-3AH7LNUB.js";
57
72
  import {
58
73
  asOptionalFiniteNumber
59
74
  } from "./chunk-WWC7I6TA.js";
60
75
  import {
61
- extractUserId
62
- } from "./chunk-M2EJHDJP.js";
63
- import {
64
- DEVICE_LOCAL_OWNER_ID,
65
- createAsyncThunk,
66
- getRuntimeServerContext,
67
- isDeviceLocalSpaceBody,
68
- resolveReplicationServers,
69
- scheduleDeleteReplication,
70
- scheduleWriteReplication
71
- } from "./chunk-UKWGR5SS.js";
76
+ createAsyncThunk
77
+ } from "./chunk-VY6VFGKR.js";
72
78
  import {
73
79
  createClientLogger,
74
80
  isAbortError
75
- } from "./chunk-QOKAKDPE.js";
81
+ } from "./chunk-HIM3FCLF.js";
76
82
  import {
77
83
  selectIdentityUserId
78
84
  } from "./chunk-SEJ5OS6F.js";
79
85
  import {
80
- buildTombstoneRecord
81
- } from "./chunk-GBRG75BQ.js";
82
- import {
83
- isRecord
84
- } from "./chunk-KUG52IAP.js";
86
+ asOptionalPositiveFiniteNumber
87
+ } from "./chunk-U6VC4MU4.js";
85
88
  import {
86
89
  asTrimmedString
87
90
  } from "./chunk-3EUW3WEO.js";
88
- import {
89
- asOptionalPositiveFiniteNumber
90
- } from "./chunk-U6VC4MU4.js";
91
91
  import {
92
92
  asOptionalTrimmedString
93
93
  } from "./chunk-G3SUCT4W.js";
@@ -97,7 +97,6 @@ import {
97
97
 
98
98
  // packages/render/table/tableStore.ts
99
99
  var import_react = __toESM(require_react(), 1);
100
- var import_date_fns2 = __toESM(require_date_fns(), 1);
101
100
  import { ulid as ulid3 } from "ulid";
102
101
 
103
102
  // packages/render/table/fetchAndCacheTableRows.ts
@@ -434,25 +433,7 @@ function addColumnOptionInMeta(meta, input, deps) {
434
433
  }
435
434
 
436
435
  // packages/render/table/createTableAction.ts
437
- var import_date_fns = __toESM(require_date_fns(), 1);
438
436
  import { ulid as ulid2 } from "ulid";
439
-
440
- // packages/app/i18n/client.ts
441
- instance.use(initReactI18next).init({
442
- ...i18nBaseConfig,
443
- lng: "zh-CN" /* ZH_CN */,
444
- fallbackLng: {
445
- ["en" /* EN */]: ["en" /* EN */],
446
- ["zh-CN" /* ZH_CN */]: ["zh-CN" /* ZH_CN */, "en" /* EN */],
447
- ["zh-Hant" /* ZH_HANT */]: ["zh-Hant" /* ZH_HANT */, "zh-CN" /* ZH_CN */, "en" /* EN */],
448
- ["ja" /* JA */]: ["ja" /* JA */, "en" /* EN */],
449
- default: ["en" /* EN */]
450
- },
451
- compatibilityJSON: "v3"
452
- });
453
- var client_default = instance;
454
-
455
- // packages/render/table/createTableAction.ts
456
437
  var DEFAULT_COLUMNS = [
457
438
  {
458
439
  name: "title",
@@ -554,9 +535,9 @@ var createTableAction = async ({
554
535
  const spaceId = customSpaceId ?? getCurrentSpaceId();
555
536
  const tableId = ulid2();
556
537
  const now = /* @__PURE__ */ new Date();
557
- const nowIso = (0, import_date_fns.formatISO)(now);
538
+ const nowIso = formatISO(now);
558
539
  const dbKey = metaKey(userId, tableId);
559
- const defaultTitle = client_default.t("space:newTable", {
540
+ const defaultTitle = runtime_default.t("space:newTable", {
560
541
  defaultValue: "\u65B0\u5EFA\u8868\u683C"
561
542
  });
562
543
  const title = asOptionalTrimmedString(customTitle) ?? defaultTitle;
@@ -924,7 +905,7 @@ var addRow = createTableCommand(
924
905
  });
925
906
  try {
926
907
  const { dbKey, rowId } = rowKey.create(tenantId, tableId);
927
- const nowIso = (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date());
908
+ const nowIso = formatISO(/* @__PURE__ */ new Date());
928
909
  const row = {
929
910
  dbKey,
930
911
  tenantId,
@@ -985,7 +966,7 @@ var deleteRow = createTableCommand(
985
966
  if (!row) {
986
967
  throw new Error(`\u5F53\u524D\u8868\u4E2D\u627E\u4E0D\u5230\u8981\u5220\u9664\u7684\u884C\uFF1A${dbKey}`);
987
968
  }
988
- const nowIso = (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date());
969
+ const nowIso = formatISO(/* @__PURE__ */ new Date());
989
970
  const tombstoneRow = {
990
971
  ...row,
991
972
  deletedAt: nowIso,
@@ -1063,7 +1044,7 @@ var addColumn = createTableCommand(
1063
1044
  const result = addColumnToMeta(
1064
1045
  meta,
1065
1046
  { columnName },
1066
- { id: ulid3(), nowIso: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date()) }
1047
+ { id: ulid3(), nowIso: formatISO(/* @__PURE__ */ new Date()) }
1067
1048
  );
1068
1049
  if (!result.ok) {
1069
1050
  throw new Error(result.error);
@@ -1104,7 +1085,7 @@ var deleteColumn = createTableCommand(
1104
1085
  meta,
1105
1086
  state.rows,
1106
1087
  { columnName },
1107
- { nowIso: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date()) }
1088
+ { nowIso: formatISO(/* @__PURE__ */ new Date()) }
1108
1089
  );
1109
1090
  if (!result.ok) {
1110
1091
  throw new Error(result.error);
@@ -1146,7 +1127,7 @@ var reorderColumn = createTableCommand(
1146
1127
  const result = reorderColumnInMeta(
1147
1128
  meta,
1148
1129
  { fromIndex, toIndex },
1149
- { nowIso: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date()) }
1130
+ { nowIso: formatISO(/* @__PURE__ */ new Date()) }
1150
1131
  );
1151
1132
  if (!result.ok) {
1152
1133
  throw new Error(result.error);
@@ -1187,7 +1168,7 @@ var renameColumnLabel = createTableCommand(
1187
1168
  const result = renameColumnLabelInMeta(
1188
1169
  meta,
1189
1170
  { columnId, label: newLabel },
1190
- { nowIso: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date()) }
1171
+ { nowIso: formatISO(/* @__PURE__ */ new Date()) }
1191
1172
  );
1192
1173
  if (!result.ok) {
1193
1174
  throw new Error(result.error);
@@ -1225,7 +1206,7 @@ var updateColumnWidth = createTableCommand(
1225
1206
  const result = updateColumnWidthInMeta(
1226
1207
  meta,
1227
1208
  { columnId, width },
1228
- { nowIso: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date()) }
1209
+ { nowIso: formatISO(/* @__PURE__ */ new Date()) }
1229
1210
  );
1230
1211
  if (!result.ok) {
1231
1212
  throw new Error(result.error);
@@ -1263,7 +1244,7 @@ var addColumnOption = createTableCommand(
1263
1244
  const result = addColumnOptionInMeta(
1264
1245
  meta,
1265
1246
  { columnId, option },
1266
- { nowIso: (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date()) }
1247
+ { nowIso: formatISO(/* @__PURE__ */ new Date()) }
1267
1248
  );
1268
1249
  if (!result.ok) {
1269
1250
  throw new Error(result.error);
@@ -1305,7 +1286,7 @@ var renameTable = createTableCommand(
1305
1286
  if (!meta || meta.tenantId !== tenantId || meta.tableId !== tableId) {
1306
1287
  throw new Error("\u5F53\u524D\u6CA1\u6709\u52A0\u8F7D\u5BF9\u5E94\u7684\u8868\u5B9A\u4E49");
1307
1288
  }
1308
- const nowIso = (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date());
1289
+ const nowIso = formatISO(/* @__PURE__ */ new Date());
1309
1290
  setState((s) => ({ ...s, error: null }));
1310
1291
  try {
1311
1292
  if (dispatch) {
@@ -1346,7 +1327,7 @@ var updateTableIcon = createTableCommand(
1346
1327
  if (!meta || meta.tenantId !== tenantId || meta.tableId !== tableId) {
1347
1328
  throw new Error("\u5F53\u524D\u6CA1\u6709\u52A0\u8F7D\u5BF9\u5E94\u7684\u8868\u5B9A\u4E49");
1348
1329
  }
1349
- const nowIso = (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date());
1330
+ const nowIso = formatISO(/* @__PURE__ */ new Date());
1350
1331
  setState((s) => ({ ...s, error: null }));
1351
1332
  try {
1352
1333
  if (dispatch) {
@@ -1384,7 +1365,7 @@ var updateCell = createTableCommand(
1384
1365
  const { dbKey, columnName, value } = args;
1385
1366
  setState((s) => ({ ...s, error: null }));
1386
1367
  try {
1387
- const nowIso = (0, import_date_fns2.formatISO)(/* @__PURE__ */ new Date());
1368
+ const nowIso = formatISO(/* @__PURE__ */ new Date());
1388
1369
  if (dispatch) {
1389
1370
  await safeDispatch(
1390
1371
  dispatch,
@@ -1453,11 +1434,11 @@ var ENTITY_DELETE_STRATEGIES = {
1453
1434
  await dispatch(deleteTable({ dbKey: key })).unwrap();
1454
1435
  },
1455
1436
  file: async (key, { thunkAPI }) => {
1456
- const { deleteFileAction } = await import("./deleteFile-YG6QMJLU.js");
1437
+ const { deleteFileAction } = await import("./deleteFile-AJ2EZMHT.js");
1457
1438
  await deleteFileAction(key, thunkAPI);
1458
1439
  },
1459
1440
  image: async (key, { thunkAPI }) => {
1460
- const { deleteFileAction } = await import("./deleteFile-YG6QMJLU.js");
1441
+ const { deleteFileAction } = await import("./deleteFile-AJ2EZMHT.js");
1461
1442
  await deleteFileAction(key, thunkAPI);
1462
1443
  },
1463
1444
  agent: async (key, { dispatch, userId, sourceServerOrigin }) => {
@@ -2097,11 +2078,11 @@ var uploadAndAddFileToSpaceAction = async (payload, thunkAPI) => {
2097
2078
  const state3 = getState();
2098
2079
  const userId = selectIdentityUserId(state3);
2099
2080
  if (!userId) {
2100
- console.warn("[uploadAndAddFileToSpace] Warning: No userId found in state. Uploading as anonymous/unknown might cause issues.");
2081
+ throw new Error("Cannot upload a file to a space without an authenticated user.");
2101
2082
  }
2102
2083
  try {
2103
2084
  const id = ulid();
2104
- const dbKey = fileKey.single(userId || "unknown", id);
2085
+ const dbKey = fileKey.single(userId, id);
2105
2086
  const contentType = "file" /* FILE */;
2106
2087
  const fileCategory = resolveFileCategory({
2107
2088
  mimeType: file.type,
@@ -2391,7 +2372,6 @@ var updateContentCategory = createAsyncThunk(
2391
2372
 
2392
2373
  export {
2393
2374
  fetchAndCacheTableRows,
2394
- client_default,
2395
2375
  getTableState,
2396
2376
  loadTableRows,
2397
2377
  addRow,
@@ -1,7 +1,3 @@
1
- import {
2
- BUILTIN_NOLO_AGENT_KEY
3
- } from "./chunk-BNGW5ASC.js";
4
-
5
1
  // packages/ai/tools/agentCapabilities.ts
6
2
  var SYSTEM_AGENT_CAPABILITIES = [
7
3
  {
@@ -47,17 +43,8 @@ var DEFAULT_SYSTEM_AGENT_CAPABILITIES = Object.fromEntries(
47
43
  ])
48
44
  );
49
45
 
50
- // packages/core/init.ts
51
- var nolotusId = "0e95801d90";
52
- var ADMIN_IDS = /* @__PURE__ */ new Set([nolotusId]);
53
- var isSystemAdmin = (userId) => userId != null && ADMIN_IDS.has(userId);
54
- var noloAgentId = BUILTIN_NOLO_AGENT_KEY;
55
-
56
46
  export {
57
47
  SYSTEM_AGENT_CAPABILITIES,
58
48
  SYSTEM_AGENT_CAPABILITY_IDS,
59
- DEFAULT_SYSTEM_AGENT_CAPABILITIES,
60
- nolotusId,
61
- isSystemAdmin,
62
- noloAgentId
49
+ DEFAULT_SYSTEM_AGENT_CAPABILITIES
63
50
  };
@@ -2,19 +2,19 @@ import {
2
2
  getCredentialsDir,
3
3
  getLegacyCredentialPath,
4
4
  migrateLegacyCredentialFile
5
- } from "./chunk-ONXOABJR.js";
6
- import {
7
- asNonEmptyStringArray
8
- } from "./chunk-VMFTFOWF.js";
5
+ } from "./chunk-HNGRBWYF.js";
9
6
  import {
10
7
  isRecord
11
8
  } from "./chunk-KUG52IAP.js";
12
9
  import {
13
- asTrimmedString
14
- } from "./chunk-3EUW3WEO.js";
10
+ asNonEmptyStringArray
11
+ } from "./chunk-3AH7LNUB.js";
15
12
  import {
16
13
  asOptionalPositiveFiniteNumber
17
14
  } from "./chunk-U6VC4MU4.js";
15
+ import {
16
+ asTrimmedString
17
+ } from "./chunk-3EUW3WEO.js";
18
18
 
19
19
  // packages/agent-runtime/fileCredentialBroker.ts
20
20
  import {
@@ -1,5 +1,11 @@
1
+ import {
2
+ CHROME_CONNECTOR_LEGACY_TOOL_ALIASES
3
+ } from "./chunk-5J3PYNUP.js";
4
+
1
5
  // packages/agent-runtime/toolNameAliases.ts
2
6
  var LEGACY_TOOL_NAME_ALIASES = {
7
+ // Nolo Browser Connector: legacy chrome_* → canonical browser_*
8
+ ...CHROME_CONNECTOR_LEGACY_TOOL_ALIASES,
3
9
  createPage: "createDoc",
4
10
  updatePage: "updateDoc",
5
11
  update_page: "updateDoc",
@@ -11,6 +11,7 @@ var PLATFORM_HOSTED_KIMI_K3_MODEL = "kimi-k3";
11
11
  var PLATFORM_HOSTED_KIMI_K26_MODEL = "kimi-k2.6";
12
12
  var PLATFORM_HOSTED_KIMI_PROVIDER = "nolo";
13
13
  var LEGACY_OLLAMA_CLOUD_PROVIDER = "ollama-cloud";
14
+ var PLATFORM_LLM_BUSY_USER_MESSAGE = "\u670D\u52A1\u5668\u7D27\u5F20";
14
15
  var isNoloHostedProvider = (provider) => {
15
16
  const normalized = asTrimmedLowercaseString(provider);
16
17
  return normalized === PLATFORM_HOSTED_KIMI_PROVIDER || normalized === LEGACY_OLLAMA_CLOUD_PROVIDER;
@@ -1200,6 +1201,7 @@ export {
1200
1201
  openrouterModels,
1201
1202
  PLATFORM_HOSTED_KIMI_K3_MODEL,
1202
1203
  PLATFORM_HOSTED_KIMI_PROVIDER,
1204
+ PLATFORM_LLM_BUSY_USER_MESSAGE,
1203
1205
  isNoloHostedProvider,
1204
1206
  isFireworksKimiModel,
1205
1207
  isDeepInfraKimiModel,
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  readDbRecord,
3
3
  writeAgentRecord
4
- } from "./chunk-AEOE4Z6Q.js";
4
+ } from "./chunk-NZWAO6LH.js";
5
5
  import {
6
6
  buildSkillSummaryMarker
7
7
  } from "./chunk-VF4K2QE6.js";
8
+ import {
9
+ createSpaceKey
10
+ } from "./chunk-UAD2WT54.js";
8
11
  import {
9
12
  parseUserIdFromAuthToken,
10
13
  readOption,
11
14
  resolveAuthToken,
12
15
  resolveServerUrl
13
16
  } from "./chunk-A7GB5UGH.js";
14
- import {
15
- createSpaceKey
16
- } from "./chunk-UAD2WT54.js";
17
17
  import {
18
18
  asTrimmedLowercaseString
19
19
  } from "./chunk-QSJ3HFEF.js";
@@ -136,6 +136,11 @@ function logUploadAudit(entry, logFn = console.warn) {
136
136
 
137
137
  // packages/desktop-chrome-connector/chromeConnector.ts
138
138
  var NOLO_CHROME_CONNECTOR_EXTENSION_ID = "ahpdoopadkamnglhlacfjdfnonpjdplg";
139
+ var NOLO_FIREFOX_CONNECTOR_EXTENSION_ID = "nolo-browser-connector@nolo.chat";
140
+ var NOLO_CONNECTOR_EXTENSION_IDS = [
141
+ NOLO_CHROME_CONNECTOR_EXTENSION_ID,
142
+ NOLO_FIREFOX_CONNECTOR_EXTENSION_ID
143
+ ];
139
144
  var NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION = "2";
140
145
  function defaultTokenPath() {
141
146
  return resolve2(
@@ -149,6 +154,18 @@ function readConnectorToken(tokenPath = defaultTokenPath()) {
149
154
  return readFileSync(tokenPath, "utf8").trim();
150
155
  }
151
156
  var CHROME_TOOL_ACTIONS = {
157
+ browser_list_tabs: "list_tabs",
158
+ browser_open_tab: "open_tab",
159
+ browser_close_tab: "close_tab",
160
+ browser_read_page: "read_page",
161
+ browser_click_element: "click",
162
+ browser_type: "type",
163
+ browser_press: "press",
164
+ browser_scroll: "scroll",
165
+ browser_screenshot: "screenshot",
166
+ browser_read_console: "read_console",
167
+ browser_read_network: "read_network",
168
+ // Legacy aliases (kept for existing agents/tests).
152
169
  chrome_list_tabs: "list_tabs",
153
170
  chrome_open_tab: "open_tab",
154
171
  chrome_close_tab: "close_tab",
@@ -164,6 +181,12 @@ var CHROME_TOOL_ACTIONS = {
164
181
  chrome_upload_file: "set_files",
165
182
  chrome_upload: "set_files"
166
183
  };
184
+ for (const legacyName of ["chrome_set_files", "chrome_upload_file", "chrome_upload"]) {
185
+ const action = CHROME_TOOL_ACTIONS[legacyName];
186
+ if (action) {
187
+ CHROME_TOOL_ACTIONS[`browser_${legacyName.slice("chrome_".length)}`] = action;
188
+ }
189
+ }
167
190
  function createConnectorError(code, message, details) {
168
191
  const error = new Error(message);
169
192
  error.code = code;
@@ -183,9 +206,13 @@ function parseArguments(raw) {
183
206
  }
184
207
  }
185
208
  function errorPayload(error) {
209
+ const code = error?.code ?? "CHROME_CONNECTOR_ERROR";
186
210
  return {
187
- code: error?.code ?? "CHROME_CONNECTOR_ERROR",
211
+ code,
188
212
  message: toErrorMessage(error),
213
+ ...code === "CHROME_CONNECTOR_UNAVAILABLE" ? {
214
+ hint: "The Nolo Browser Connector is not reachable. It runs inside the user's own Chrome or Firefox \u2014 ask the user to open their browser with the Nolo Browser Connector extension enabled, or install it from https://nolo.chat/downloads (Firefox can install the signed .xpi directly), then retry."
215
+ } : {},
189
216
  ...error?.details !== void 0 ? { details: error.details } : {}
190
217
  };
191
218
  }
@@ -198,7 +225,7 @@ function validateChromeConnectorPayload(action, payload) {
198
225
  if (!tabId) {
199
226
  throw createConnectorError(
200
227
  "TAB_ID_REQUIRED",
201
- `Provide the tabId from chrome_list_tabs before calling ${action}.`
228
+ `Provide the tabId from browser_list_tabs before calling ${action}.`
202
229
  );
203
230
  }
204
231
  if (!TARGET_REQUIRED_ACTIONS.has(action)) return;
@@ -210,7 +237,7 @@ function validateChromeConnectorPayload(action, payload) {
210
237
  if (!elementRef && !selector) {
211
238
  throw createConnectorError(
212
239
  "ELEMENT_TARGET_REQUIRED",
213
- "Provide elementRef from chrome_read_page or a CSS selector."
240
+ "Provide elementRef from browser_read_page or a CSS selector."
214
241
  );
215
242
  }
216
243
  if (action === "set_files") {
@@ -285,7 +312,10 @@ var REQUIRED_CHROME_CONNECTOR_FEATURES = {
285
312
  type: ["compact_observation_v2", "action_gate"],
286
313
  press: ["compact_observation_v2", "action_gate"],
287
314
  scroll: ["compact_observation_v2"],
288
- screenshot: ["browser_debug"],
315
+ // Both browsers advertise the dedicated `screenshot` feature: Chrome serves it through
316
+ // Page.captureScreenshot (browser_debug-adjacent) while Firefox falls back to
317
+ // tabs.captureVisibleTab, so gating on browser_debug would wrongly refuse Firefox.
318
+ screenshot: ["screenshot"],
289
319
  read_console: ["browser_debug"],
290
320
  read_network: ["browser_debug"],
291
321
  detach: ["browser_debug"],
@@ -296,17 +326,20 @@ function requiredFeaturesForConnectorAction(action) {
296
326
  }
297
327
  function createVerifiedChromeConnectorClient(args) {
298
328
  const client = args?.client ?? createChromeConnectorClient();
299
- const expectedExtensionId = args?.expectedExtensionId ?? NOLO_CHROME_CONNECTOR_EXTENSION_ID;
329
+ const expectedExtensionIds = new Set(
330
+ args?.expectedExtensionIds ?? (args?.expectedExtensionId ? [args.expectedExtensionId] : NOLO_CONNECTOR_EXTENSION_IDS)
331
+ );
300
332
  let verified = null;
301
333
  let negotiatedFeatures = [];
302
334
  const verify = async () => {
303
335
  const connectorInfo = await client.request("connector_info", {});
304
336
  const receivedExtensionId = connectorInfo?.extensionId;
305
- if (receivedExtensionId !== expectedExtensionId) {
337
+ if (typeof receivedExtensionId !== "string" || !expectedExtensionIds.has(receivedExtensionId)) {
338
+ const expectedList = [...expectedExtensionIds].join(", ");
306
339
  throw createConnectorError(
307
340
  "CHROME_CONNECTOR_EXTENSION_MISMATCH",
308
- `Chrome connector extension id mismatch: expected ${expectedExtensionId}, received ${typeof receivedExtensionId === "string" ? receivedExtensionId : "unknown"}.`,
309
- { expectedExtensionId, receivedExtensionId }
341
+ `Chrome connector extension id mismatch: expected one of ${expectedList}, received ${typeof receivedExtensionId === "string" ? receivedExtensionId : "unknown"}.`,
342
+ { expectedExtensionIds: [...expectedExtensionIds], receivedExtensionId }
310
343
  );
311
344
  }
312
345
  const receivedProtocolVersion = connectorInfo?.protocolVersion;
@@ -366,7 +399,7 @@ async function executeChromeConnectorTool(args) {
366
399
  };
367
400
  }
368
401
  try {
369
- const payload = parseArguments(args.call.arguments);
402
+ const { target: _ignoredTarget, ...payload } = parseArguments(args.call.arguments);
370
403
  validateChromeConnectorPayload(action, payload);
371
404
  const result = await (args.client ?? createChromeConnectorClient()).request(action, payload);
372
405
  return {
@@ -392,6 +425,8 @@ var CHROME_CONNECTOR_TOOL_ACTIONS = { ...CHROME_TOOL_ACTIONS };
392
425
 
393
426
  export {
394
427
  NOLO_CHROME_CONNECTOR_EXTENSION_ID,
428
+ NOLO_FIREFOX_CONNECTOR_EXTENSION_ID,
429
+ NOLO_CONNECTOR_EXTENSION_IDS,
395
430
  NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION,
396
431
  createChromeConnectorClient,
397
432
  REQUIRED_CHROME_CONNECTOR_FEATURES,