nolo-cli 0.102.0-alpha.1 → 0.102.1

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-LUNEV235.js → _executeModel-WLFACVFR.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-XHHDYJ3U.js} +117 -42
  7. package/{agentEmailCommands-G6A7IRPQ.js → agentEmailCommands-GJ2TE3CV.js} +97 -87
  8. package/agentListCommands-B3YHJQNM.js +742 -0
  9. package/{agentMachineCommands-W2SMNSQ3.js → agentMachineCommands-KQLRJF5O.js} +48 -43
  10. package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-XPJYZSCE.js} +97 -2
  11. package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-B4T2DJ5H.js} +1 -1
  12. package/agentRecordCommands-LXDIXYQM.js +138 -0
  13. package/agentRunCommand-P2KLVSYL.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-5YJHUO47.js → agentSlice-WBSSBKBB.js} +14 -13
  17. package/{appDeleteCommands-32MHLR4L.js → appDeleteCommands-4EX37I4K.js} +46 -41
  18. package/{appDeployCommands-WCQOUSOB.js → appDeployCommands-SDBR3J75.js} +46 -41
  19. package/{appDeployStatusCommands-6QKB7DYN.js → appDeployStatusCommands-764PQNYN.js} +46 -41
  20. package/{appGetCommands-SFAPP5PB.js → appGetCommands-BBCN3XJC.js} +46 -41
  21. package/{appListCommands-EKUBDRUO.js → appListCommands-OGTABCS3.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-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
  31. package/{chunk-ABQYVJBJ.js → chunk-46Y5D2BZ.js} +5 -5
  32. package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
  33. package/{chunk-H62HCIUP.js → chunk-4FFUDT6D.js} +24 -21
  34. package/chunk-4LCOCOR5.js +50 -0
  35. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  36. package/{chunk-IIVGDG4I.js → chunk-4YSOUKUR.js} +13 -7
  37. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  38. package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
  39. package/chunk-5J3PYNUP.js +255 -0
  40. package/{chunk-DRGSDQBL.js → chunk-5LTAPGPV.js} +10 -10
  41. package/chunk-5MMAK75Q.js +15 -0
  42. package/{chunk-JPGCXHNM.js → chunk-5OA5HMTL.js} +1 -1
  43. package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
  44. package/{chunk-3BMYXEUW.js → chunk-6O4IK4V2.js} +1 -1
  45. package/{chunk-AEOE4Z6Q.js → chunk-7EPXUZOX.js} +39 -15
  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-A4SQRTZ6.js +15 -0
  50. package/{chunk-7S4YWN7P.js → chunk-ADBZWMFB.js} +4 -4
  51. package/chunk-AGIM7IMJ.js +147 -0
  52. package/{chunk-SSDAAEC2.js → chunk-AOJB5QYD.js} +873 -227
  53. package/{chunk-5UTFL4QJ.js → chunk-AOTBKDRK.js} +7 -0
  54. package/{chunk-Q554LLSI.js → chunk-AUDNYVRC.js} +1 -1
  55. package/chunk-BMQ2MJUK.js +153 -0
  56. package/{chunk-6YTOJY35.js → chunk-BZ7NPA6G.js} +35 -2
  57. package/{chunk-4S5QUMJP.js → chunk-CHNCM7EF.js} +11 -9
  58. package/chunk-CHOZJMJS.js +78 -0
  59. package/chunk-CJN5OERD.js +13545 -0
  60. package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
  61. package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
  62. package/{chunk-RFCKMYDK.js → chunk-DNHENQ3T.js} +23 -28
  63. package/chunk-DZ7R5V3Y.js +164 -0
  64. package/{chunk-3VNWWVKB.js → chunk-E3YWHWCR.js} +50 -18
  65. package/{chunk-V4MJDUSR.js → chunk-E73ON47R.js} +2 -2
  66. package/{chunk-ETI2NYVF.js → chunk-EHER73LN.js} +4 -4
  67. package/{chunk-KQ4ONNQD.js → chunk-EKPKW6RM.js} +155 -8
  68. package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
  69. package/{chunk-HJUYAD4A.js → chunk-FJ5BGMNM.js} +5 -5
  70. package/{chunk-2F7RJC6L.js → chunk-FOXQ7BAB.js} +1 -1
  71. package/{chunk-6VFARHZW.js → chunk-G53AA7RW.js} +934 -1091
  72. package/{chunk-J4MOO56S.js → chunk-GARACBQB.js} +10 -2
  73. package/chunk-GMZLP5DV.js +82 -0
  74. package/{chunk-5FBTLSFG.js → chunk-GUYEMTRK.js} +551 -516
  75. package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
  76. package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
  77. package/{chunk-QOKAKDPE.js → chunk-HIM3FCLF.js} +0 -1
  78. package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
  79. package/{chunk-VLTIYV3X.js → chunk-HP57OUJO.js} +4 -4
  80. package/{chunk-6IG4XSS6.js → chunk-HRYFI64G.js} +88 -17
  81. package/{chunk-GPCZ7UXG.js → chunk-K6U4NKFJ.js} +1 -1
  82. package/{chunk-6Q33GUCC.js → chunk-KLUBZL6X.js} +1 -1
  83. package/{chunk-4OEFYTWL.js → chunk-LKERWYPX.js} +67 -48
  84. package/{chunk-LS2ZANRJ.js → chunk-LOCNXNOU.js} +1 -1
  85. package/{chunk-PUOC4YRO.js → chunk-M7VLQGQP.js} +11 -0
  86. package/{chunk-NA35QHCF.js → chunk-N4QIAW6W.js} +1 -1
  87. package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
  88. package/{chunk-OEVAY4J6.js → chunk-NTDEBTK5.js} +18 -20
  89. package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
  90. package/chunk-NWENLDMM.js +42 -0
  91. package/chunk-OCZKATRC.js +129 -0
  92. package/{chunk-G2O6V3HJ.js → chunk-ODTDLPBV.js} +20 -11
  93. package/chunk-OW4APERY.js +870 -0
  94. package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
  95. package/{chunk-Q2XN3EOZ.js → chunk-OYPMWCIQ.js} +67 -45
  96. package/{chunk-TOP2VXOR.js → chunk-PCF3QU5Q.js} +5 -5
  97. package/chunk-PH275YDS.js +7881 -0
  98. package/{chunk-WV42OMV7.js → chunk-PTDYOADJ.js} +8 -8
  99. package/{chunk-GEPUP7OO.js → chunk-SEA64CDY.js} +3 -3
  100. package/{chunk-5H7KJX7J.js → chunk-SEB5HAUU.js} +5 -5
  101. package/{chunk-6D6VBVEW.js → chunk-SNMQMOD2.js} +80 -14
  102. package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
  103. package/{chunk-Z77CRGTW.js → chunk-TVCAR26G.js} +1 -1
  104. package/chunk-TY3TIUJK.js +89 -0
  105. package/{chunk-I3TQJXQ7.js → chunk-U3C3IA32.js} +9 -2
  106. package/{chunk-ORYWEJO4.js → chunk-U6IGAJT4.js} +47 -67
  107. package/{chunk-RG6JBBX5.js → chunk-U7XXEI5R.js} +166 -13
  108. package/{chunk-UZGQNTVW.js → chunk-UA324D4O.js} +8 -6
  109. package/chunk-UJXNKP5V.js +760 -0
  110. package/{chunk-UKZDAFYT.js → chunk-UM4PH574.js} +6 -10
  111. package/{chunk-ZCYXJSTU.js → chunk-V5OWQOJZ.js} +19 -88
  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-UKWGR5SS.js → chunk-VY6VFGKR.js} +194 -1144
  117. package/{chunk-BP4XNZRM.js → chunk-W72ISAKC.js} +4 -4
  118. package/{chunk-DHDMC6FO.js → chunk-WCGC6S77.js} +14 -9
  119. package/{chunk-QDSINZM3.js → chunk-WJ3B6FX6.js} +1 -14
  120. package/{chunk-HVURBGF3.js → chunk-XFUBXRVI.js} +6 -6
  121. package/{chunk-45C5ER5U.js → chunk-XIRXOUBV.js} +19 -17
  122. package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
  123. package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
  124. package/{chunk-SH43IESU.js → chunk-YUNJN43V.js} +44 -9
  125. package/chunk-YV25TM3R.js +780 -0
  126. package/{chunk-X6DN5HBD.js → chunk-YXZYNMYK.js} +29 -9
  127. package/{chunk-BTI7PJDX.js → chunk-Z56IK6UT.js} +29 -78
  128. package/chunk-ZRAU6T47.js +56 -0
  129. package/commandRegistry-TDXN5OP7.js +833 -0
  130. package/{contentThunks-GJV22WVZ.js → contentThunks-F2BNWOZV.js} +36 -34
  131. package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
  132. package/{createAgentAutomationAction-6V25TZEO.js → createAgentAutomationAction-5N2NRNR7.js} +38 -36
  133. package/createDialogAction-DSEG4L5Y.js +69 -0
  134. package/{createPageAction-IR4BGJSI.js → createPageAction-K32FYQPE.js} +45 -42
  135. package/{chunk-YFE4A4O7.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-ODG2OKLO.js} +49 -45
  139. package/{dialogSlice-UNX2FAPZ.js → dialogSlice-4GBOUTGL.js} +40 -33
  140. package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
  141. package/{docCreateCommands-KYI2DC2U.js → docCreateCommands-Q6FQUHUF.js} +48 -43
  142. package/{docDeleteCommands-67REUSRY.js → docDeleteCommands-N224CFZL.js} +49 -44
  143. package/{docReadCommands-HOSVSBDJ.js → docReadCommands-CJWAEAB4.js} +47 -42
  144. package/{docStore-JWVG5NDO.js → docStore-ZTYSP3YE.js} +16 -12
  145. package/{docUpdateCommands-EMGCSMXY.js → docUpdateCommands-OPG6ZY4H.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-B75UOJKF.js → handleSendMessageAction-XFZH2TQS.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-GFPTOY6L.js → machineCommands-KMU3D5I5.js} +91 -81
  155. package/machineWsRunDispatch-6GJ5YOSW.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-UFSWHFKD.js → readlineWorkspace-EXCG3IFX.js} +2704 -2060
  168. package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-46XQV5Q7.js} +21 -25
  169. package/{runAgentClientLoop-25LJ4XGV.js → runAgentClientLoop-URRDZ5WG.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-7CLUNI2I.js} +51 -46
  178. package/{streamAgentChatTurn-A46QFV4O.js → streamAgentChatTurn-YPUYKXDX.js} +206 -105
  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-M5ENXZRJ.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-QJPZGF52.js → updateDialogTitleAction-7PNUE23W.js} +82 -44
  186. package/action-YVYQEAAV.js +0 -31
  187. package/agentListCommands-KMS675GZ.js +0 -406
  188. package/agentRecordCommands-D7BRMFNI.js +0 -128
  189. package/agentRunCommand-VL6MMEUB.js +0 -155
  190. package/browser-image-compression-MFDTD7K6.js +0 -1763
  191. package/chatQueueReduxAdapter-PQMRR2PK.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-QVKRR2SS.js +0 -20782
  196. package/chunk-S7Z2HMCN.js +0 -25
  197. package/chunk-Y5GCAMGP.js +0 -9
  198. package/chunk-YPREESF4.js +0 -225
  199. package/createDialogAction-SX36BGSX.js +0 -65
  200. package/machineWsRunDispatch-46PSZ3DJ.js +0 -144
  201. package/settingSlice-ZQZVUPKK.js +0 -204
  202. package/syncMapping-N6RGXGBW.js +0 -437
  203. package/tools-TTDGRNY6.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
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KHCLMKZZ.js";
4
4
  import {
5
5
  buildSkillDiscoveryLayer
6
- } from "./chunk-DVINR3PL.js";
6
+ } from "./chunk-HDLLCBRF.js";
7
7
 
8
8
  // packages/agent-runtime/skillDiscovery.ts
9
9
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
@@ -0,0 +1,255 @@
1
+ // packages/ai/tools/chromeConnectorTools.ts
2
+ var CHROME_CONNECTOR_TOOL_NAMES = [
3
+ "browser_list_tabs",
4
+ "browser_open_tab",
5
+ "browser_close_tab",
6
+ "browser_read_page",
7
+ "browser_click_element",
8
+ "browser_type",
9
+ "browser_press",
10
+ "browser_scroll",
11
+ "browser_screenshot",
12
+ "browser_read_console",
13
+ "browser_read_network"
14
+ ];
15
+ var CHROME_CONNECTOR_LEGACY_TOOL_ALIASES = {
16
+ chrome_list_tabs: "browser_list_tabs",
17
+ chrome_open_tab: "browser_open_tab",
18
+ chrome_close_tab: "browser_close_tab",
19
+ chrome_read_page: "browser_read_page",
20
+ chrome_click: "browser_click_element",
21
+ chrome_type: "browser_type",
22
+ chrome_press: "browser_press",
23
+ chrome_scroll: "browser_scroll",
24
+ chrome_screenshot: "browser_screenshot",
25
+ chrome_read_console: "browser_read_console",
26
+ chrome_read_network: "browser_read_network"
27
+ };
28
+ var CHROME_CONNECTOR_LEGACY_TOOL_NAMES = Object.keys(
29
+ CHROME_CONNECTOR_LEGACY_TOOL_ALIASES
30
+ );
31
+ var CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES = [
32
+ ...CHROME_CONNECTOR_TOOL_NAMES,
33
+ ...CHROME_CONNECTOR_LEGACY_TOOL_NAMES
34
+ ];
35
+ function resolveChromeConnectorToolName(name) {
36
+ if (CHROME_CONNECTOR_TOOL_NAMES.includes(name)) {
37
+ return name;
38
+ }
39
+ return CHROME_CONNECTOR_LEGACY_TOOL_ALIASES[name];
40
+ }
41
+ function canonicalizeChromeConnectorToolNames(toolNames) {
42
+ const out = [];
43
+ for (const name of toolNames ?? []) {
44
+ const resolved = typeof name === "string" ? resolveChromeConnectorToolName(name) : void 0;
45
+ if (resolved && !out.includes(resolved)) out.push(resolved);
46
+ }
47
+ return out;
48
+ }
49
+ var CONNECTOR_TARGET_PROPERTY = {
50
+ type: "string",
51
+ description: "Reserved and ignored for now; future multi-provider targeting."
52
+ };
53
+ var CHROME_CONNECTOR_READ_TOOL_NAMES = [
54
+ "browser_list_tabs",
55
+ "browser_read_page",
56
+ "browser_screenshot",
57
+ "browser_read_console",
58
+ "browser_read_network"
59
+ ];
60
+ var getChromeConnectorToolBehavior = (name) => CHROME_CONNECTOR_READ_TOOL_NAMES.includes(resolveChromeConnectorToolName(name)) ? "data" : "action";
61
+ var getChromeConnectorToolDefaultConsent = (name) => CHROME_CONNECTOR_READ_TOOL_NAMES.includes(resolveChromeConnectorToolName(name)) ? "auto" : "ask";
62
+ function baseSchema(name, description, properties, required = []) {
63
+ return {
64
+ name,
65
+ description,
66
+ parameters: {
67
+ type: "object",
68
+ properties: { ...properties, target: CONNECTOR_TARGET_PROPERTY },
69
+ required
70
+ }
71
+ };
72
+ }
73
+ var tabId = {
74
+ type: "string",
75
+ description: "Browser tab id returned by browser_list_tabs or browser_open_tab."
76
+ };
77
+ var elementRef = {
78
+ type: "string",
79
+ description: "Revision-scoped ref like 1a2b3c4d-e2, copied verbatim from browser_read_page; preferred over selector when available."
80
+ };
81
+ var selector = {
82
+ type: "string",
83
+ description: "CSS selector for the visible page element to operate on; fallback when no elementRef is available."
84
+ };
85
+ var chromeListTabsFunctionSchema = baseSchema(
86
+ "browser_list_tabs",
87
+ "List controllable browser tabs from the user's browser profile through the Nolo Browser Connector.",
88
+ {}
89
+ );
90
+ var chromeOpenTabFunctionSchema = baseSchema(
91
+ "browser_open_tab",
92
+ "Open a URL in the user's browser (Chrome or Firefox) through the Nolo Browser Connector.",
93
+ {
94
+ url: {
95
+ type: "string",
96
+ description: "HTTP or HTTPS URL to open in the browser."
97
+ },
98
+ active: {
99
+ type: "boolean",
100
+ description: "Whether to focus the new browser tab. Defaults to true."
101
+ }
102
+ },
103
+ ["url"]
104
+ );
105
+ var chromeCloseTabFunctionSchema = baseSchema(
106
+ "browser_close_tab",
107
+ "Close a browser tab through the Nolo Browser Connector. Prefer closing the tabs your own run opened with browser_open_tab, and ask the user before closing a tab they are using. Pinned tabs are refused (TAB_PINNED); unknown tab ids fail (TAB_NOT_FOUND).",
108
+ {
109
+ tabId
110
+ },
111
+ ["tabId"]
112
+ );
113
+ var chromeReadPageFunctionSchema = baseSchema(
114
+ "browser_read_page",
115
+ "Read a compact view of a browser tab: visible text (hard cap 6000 chars) plus short-lived elementRefs (hard cap 35) and a pageRevision. Reuse those refs for browser_click_element and browser_type instead of guessing selectors; use region to focus a big page. Does not read cookies or profile databases.",
116
+ {
117
+ tabId,
118
+ region: {
119
+ type: "string",
120
+ description: "Optional CSS selector limiting the read to part of the page."
121
+ },
122
+ maxChars: {
123
+ type: "number",
124
+ description: "Optional text character budget; the connector clamps it to a hard maximum."
125
+ },
126
+ detail: {
127
+ type: "string",
128
+ enum: ["compact", "full"],
129
+ description: "compact (default) returns budgeted text; full raises the budget and adds capped HTML."
130
+ }
131
+ },
132
+ ["tabId"]
133
+ );
134
+ var chromeClickFunctionSchema = baseSchema(
135
+ "browser_click_element",
136
+ "Click a visible element in a browser tab by elementRef from browser_read_page, or by CSS selector. Controls whose name indicates an irreversible external action (payment, send, delete, publish, permission change) are refused with SENSITIVE_ACTION_REQUIRES_CONFIRMATION: this desktop runtime has no approval channel, so name the control and ask the user to activate it themselves.",
137
+ {
138
+ tabId,
139
+ elementRef,
140
+ selector
141
+ },
142
+ ["tabId"]
143
+ );
144
+ var chromeTypeFunctionSchema = baseSchema(
145
+ "browser_type",
146
+ "Type text into a browser page element identified by elementRef from browser_read_page or by CSS selector. Typing into a control whose name indicates an irreversible external action is refused with SENSITIVE_ACTION_REQUIRES_CONFIRMATION, same as clicking it.",
147
+ {
148
+ tabId,
149
+ elementRef,
150
+ selector,
151
+ text: {
152
+ type: "string",
153
+ description: "Text to type into the selected element."
154
+ },
155
+ clearFirst: {
156
+ type: "boolean",
157
+ description: "Whether to clear the field before typing. Defaults to true."
158
+ }
159
+ },
160
+ ["tabId", "text"]
161
+ );
162
+ var chromePressFunctionSchema = baseSchema(
163
+ "browser_press",
164
+ "Send a keyboard key or shortcut to a browser tab. Enter-like keys are refused with SENSITIVE_ACTION_REQUIRES_CONFIRMATION when the focused control is an irreversible action.",
165
+ {
166
+ tabId,
167
+ key: {
168
+ type: "string",
169
+ description: "Key or shortcut, for example Enter, Escape, ArrowDown, or Meta+L."
170
+ }
171
+ },
172
+ ["tabId", "key"]
173
+ );
174
+ var chromeScrollFunctionSchema = baseSchema(
175
+ "browser_scroll",
176
+ "Scroll a browser tab by pixel deltas.",
177
+ {
178
+ tabId,
179
+ deltaX: {
180
+ type: "number",
181
+ description: "Horizontal scroll delta in pixels."
182
+ },
183
+ deltaY: {
184
+ type: "number",
185
+ description: "Vertical scroll delta in pixels."
186
+ }
187
+ },
188
+ ["tabId"]
189
+ );
190
+ var chromeScreenshotFunctionSchema = baseSchema(
191
+ "browser_screenshot",
192
+ "Capture a screenshot from a browser tab through the Nolo Browser Connector.",
193
+ {
194
+ tabId,
195
+ fullPage: {
196
+ type: "boolean",
197
+ description: "Whether to capture the full page. Defaults to false."
198
+ }
199
+ },
200
+ ["tabId"]
201
+ );
202
+ var chromeReadConsoleFunctionSchema = baseSchema(
203
+ "browser_read_console",
204
+ "Read recent console messages from a browser tab using debugger-backed connector state.",
205
+ {
206
+ tabId,
207
+ limit: {
208
+ type: "number",
209
+ description: "Maximum number of recent console messages to return."
210
+ }
211
+ },
212
+ ["tabId"]
213
+ );
214
+ var chromeReadNetworkFunctionSchema = baseSchema(
215
+ "browser_read_network",
216
+ "Read a deduplicated recent network summary from a browser tab using debugger-backed connector state. Static assets are filtered unless includeAssets is set.",
217
+ {
218
+ tabId,
219
+ limit: {
220
+ type: "number",
221
+ description: "Maximum number of recent network entries to return."
222
+ },
223
+ includeAssets: {
224
+ type: "boolean",
225
+ description: "Include images, CSS, fonts and other static assets. Defaults to false."
226
+ }
227
+ },
228
+ ["tabId"]
229
+ );
230
+ var chromeConnectorToolSchemas = [
231
+ chromeListTabsFunctionSchema,
232
+ chromeOpenTabFunctionSchema,
233
+ chromeCloseTabFunctionSchema,
234
+ chromeReadPageFunctionSchema,
235
+ chromeClickFunctionSchema,
236
+ chromeTypeFunctionSchema,
237
+ chromePressFunctionSchema,
238
+ chromeScrollFunctionSchema,
239
+ chromeScreenshotFunctionSchema,
240
+ chromeReadConsoleFunctionSchema,
241
+ chromeReadNetworkFunctionSchema
242
+ ];
243
+ async function chromeConnectorUnavailableFunc() {
244
+ throw new Error("Browser connector tools are only executable in the Nolo desktop local runtime.");
245
+ }
246
+
247
+ export {
248
+ CHROME_CONNECTOR_LEGACY_TOOL_ALIASES,
249
+ CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES,
250
+ canonicalizeChromeConnectorToolNames,
251
+ getChromeConnectorToolBehavior,
252
+ getChromeConnectorToolDefaultConsent,
253
+ chromeConnectorToolSchemas,
254
+ chromeConnectorUnavailableFunc
255
+ };
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  toolRegistry
3
- } from "./chunk-5FBTLSFG.js";
3
+ } from "./chunk-GUYEMTRK.js";
4
4
  import {
5
- i18n_default
6
- } from "./chunk-QVKRR2SS.js";
5
+ runtime_default
6
+ } from "./chunk-CJN5OERD.js";
7
7
  import {
8
8
  canonicalizeToolNames
9
- } from "./chunk-O6OSWFZQ.js";
9
+ } from "./chunk-XUWRURDF.js";
10
10
  import {
11
11
  isNoloHostedProvider
12
- } from "./chunk-Q67DOFOO.js";
12
+ } from "./chunk-Y3PMXGLH.js";
13
13
  import {
14
14
  asTrimmedLowercaseString
15
15
  } from "./chunk-QSJ3HFEF.js";
@@ -151,12 +151,12 @@ var PREPARE_TOOLS_CACHE_LIMIT = 128;
151
151
  var warnedUnknownToolNames = /* @__PURE__ */ new Set();
152
152
  function getTranslation(keys, defaultVal) {
153
153
  for (const key of keys) {
154
- if (i18n_default.exists(key)) {
155
- return i18n_default.t(key);
154
+ if (runtime_default.exists(key)) {
155
+ return runtime_default.t(key);
156
156
  }
157
157
  const aiKey = key.startsWith("ai:") ? key : `ai:${key}`;
158
- if (i18n_default.exists(aiKey)) {
159
- return i18n_default.t(aiKey);
158
+ if (runtime_default.exists(aiKey)) {
159
+ return runtime_default.t(aiKey);
160
160
  }
161
161
  }
162
162
  return defaultVal;
@@ -203,7 +203,7 @@ function translateSchema(schema) {
203
203
  return nextSchema;
204
204
  }
205
205
  function currentI18nLanguage() {
206
- return typeof i18n_default.language === "string" ? i18n_default.language : "";
206
+ return typeof runtime_default.language === "string" ? runtime_default.language : "";
207
207
  }
208
208
  function translateSchemaCached(schema) {
209
209
  if (!schema || typeof schema !== "object") return schema;
@@ -0,0 +1,15 @@
1
+ import {
2
+ compactWhitespace
3
+ } from "./chunk-DWLEOOGR.js";
4
+
5
+ // packages/core/clipCompactText.ts
6
+ function clipCompactText(value, max, ellipsis = "...") {
7
+ const compact = compactWhitespace(value);
8
+ if (compact.length <= max) return compact;
9
+ if (max <= ellipsis.length) return compact.slice(0, max);
10
+ return `${compact.slice(0, max - ellipsis.length)}${ellipsis}`;
11
+ }
12
+
13
+ export {
14
+ clipCompactText
15
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildSkillDocMarkdown
3
- } from "./chunk-Q554LLSI.js";
3
+ } from "./chunk-AUDNYVRC.js";
4
4
 
5
5
  // packages/cli/docPageHelpers.ts
6
6
  import { readFileSync } from "node:fs";
@@ -1,8 +1,9 @@
1
1
  import {
2
- mergeAvailabilityDeadline
3
- } from "./chunk-FDTR4QJ6.js";
2
+ mergeAvailabilityDeadline,
3
+ resolveCredentialKeyWithFallback
4
+ } from "./chunk-H6A6X4EK.js";
4
5
 
5
- // packages/cli/credentialAvailability.ts
6
+ // packages/agent-runtime/credentialAvailability.ts
6
7
  import { homedir } from "node:os";
7
8
  import { join } from "node:path";
8
9
  import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
@@ -13,36 +14,6 @@ function resolveNoloHome(env = process.env) {
13
14
  function resolveCredentialAvailabilityPath(env = process.env) {
14
15
  return join(resolveNoloHome(env), FILE_NAME);
15
16
  }
16
- function resolveCredentialKey(agent) {
17
- if (!agent || typeof agent !== "object") return void 0;
18
- for (const field of ["apiKeyRef", "credentialRef"]) {
19
- const value = agent[field];
20
- if (typeof value === "string") {
21
- const trimmed = value.trim();
22
- if (trimmed) return trimmed;
23
- }
24
- }
25
- return void 0;
26
- }
27
- function resolveCredentialKeyWithFallback(agent) {
28
- const byRef = resolveCredentialKey(agent);
29
- if (byRef) return byRef;
30
- if (!agent || typeof agent !== "object") return void 0;
31
- const endpoint = agent.customProviderUrl;
32
- if (typeof endpoint === "string") {
33
- const trimmed = endpoint.trim();
34
- if (trimmed) {
35
- try {
36
- const origin = new URL(trimmed).origin;
37
- if (origin && origin !== "null") return `custom-endpoint:${origin}`;
38
- } catch {
39
- }
40
- }
41
- }
42
- const key = agent.key;
43
- if (typeof key === "string" && key.trim()) return `custom-agent:${key.trim()}`;
44
- return void 0;
45
- }
46
17
  function parseFile(raw) {
47
18
  const parsed = JSON.parse(raw);
48
19
  if (!parsed || typeof parsed !== "object") return { entries: {} };
@@ -155,7 +126,6 @@ function applyCredentialAvailability(agents, credentialAvailability) {
155
126
  }
156
127
 
157
128
  export {
158
- resolveCredentialKeyWithFallback,
159
129
  readCredentialAvailability,
160
130
  readCredentialEntry,
161
131
  markCredentialUnavailable,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dialogMessageKey
3
- } from "./chunk-VMFTFOWF.js";
3
+ } from "./chunk-3AH7LNUB.js";
4
4
  import {
5
5
  asOptionalFiniteNumber
6
6
  } from "./chunk-WWC7I6TA.js";
@@ -1,17 +1,13 @@
1
1
  import {
2
2
  buildLocalAgentLookupKeys,
3
3
  shouldReadAgentKeyRemotely
4
- } from "./chunk-Z77CRGTW.js";
4
+ } from "./chunk-TVCAR26G.js";
5
5
  import {
6
6
  resolveCliAgentKeyInput
7
7
  } from "./chunk-SV5IJK6K.js";
8
8
  import {
9
9
  toErrorMessage
10
10
  } from "./chunk-HNMXYYJR.js";
11
- import {
12
- readPipeText,
13
- spawnProcess
14
- } from "./chunk-X7HHHIOZ.js";
15
11
  import {
16
12
  parseUserIdFromAuthToken,
17
13
  readOption,
@@ -19,9 +15,13 @@ import {
19
15
  resolveServerCandidates,
20
16
  resolveServerUrl
21
17
  } from "./chunk-A7GB5UGH.js";
18
+ import {
19
+ readPipeText,
20
+ spawnProcess
21
+ } from "./chunk-Y6ROFCZO.js";
22
22
  import {
23
23
  createAgentKey
24
- } from "./chunk-VMFTFOWF.js";
24
+ } from "./chunk-3AH7LNUB.js";
25
25
 
26
26
  // packages/cli/agentRecordHelpers.ts
27
27
  import { readFileSync } from "node:fs";
@@ -252,6 +252,30 @@ async function writeAgentRecord(args) {
252
252
  throw new Error(`write failed: HTTP ${res.status} ${JSON.stringify(data)}`);
253
253
  }
254
254
  }
255
+ async function invalidateAgentRecordCache(args) {
256
+ const invalidated = [];
257
+ for (const key of new Set(args.keys.filter((k) => typeof k === "string" && k))) {
258
+ try {
259
+ await args.db.del(key);
260
+ invalidated.push(key);
261
+ } catch {
262
+ }
263
+ }
264
+ return invalidated;
265
+ }
266
+ async function refreshAgentRecordCache(args) {
267
+ try {
268
+ await args.db.put(args.agentKey, {
269
+ ...args.record,
270
+ dbKey: args.agentKey,
271
+ key: args.record?.key || args.agentKey,
272
+ serverOrigin: args.serverOrigin,
273
+ cachedAt: Date.now()
274
+ });
275
+ } catch {
276
+ await invalidateAgentRecordCache({ db: args.db, keys: [args.agentKey] });
277
+ }
278
+ }
255
279
  async function resolveAgentRecordFromHybridStore(args) {
256
280
  const agentKey = resolveCliAgentKeyInput(args.agentInput);
257
281
  const authToken = args.cliArgs ? resolveAuthToken(args.cliArgs, args.env) : resolveAuthToken(args.env);
@@ -484,7 +508,7 @@ function parseAgentUpdateArgs(args) {
484
508
  );
485
509
  const expiresAt = parseIsoTimestampOption(readOption(args, "--expires-at"), "--expires-at");
486
510
  const handle = readOption(args, "--handle")?.trim();
487
- const promptSources = [prompt, promptFile, promptDoc].filter(Boolean);
511
+ const promptSources = [prompt, promptFile, promptDoc].filter((value) => value !== void 0);
488
512
  if (promptSources.length > 1) {
489
513
  throw new Error("--prompt / --prompt-file / --prompt-doc are mutually exclusive.");
490
514
  }
@@ -492,7 +516,7 @@ function parseAgentUpdateArgs(args) {
492
516
  if (cliProvider) updates.cliProvider = cliProvider;
493
517
  if (apiSource) updates.apiSource = apiSource;
494
518
  if (provider) updates.provider = provider;
495
- if (prompt) updates.prompt = prompt;
519
+ if (prompt !== void 0) updates.prompt = prompt;
496
520
  if (promptFile) updates.prompt = readFileSync(promptFile, "utf8");
497
521
  if (tools) updates.tools = parseJsonishValue(tools);
498
522
  if (name) updates.name = name;
@@ -511,7 +535,7 @@ function parseAgentUpdateArgs(args) {
511
535
  updates[entry.slice(0, index)] = parseJsonishValue(entry.slice(index + 1));
512
536
  }
513
537
  if (Object.keys(updates).length === 0) {
514
- if (!promptDoc && !copyProviderFrom) {
538
+ if (!promptDoc && !copyProviderFrom && !presetId) {
515
539
  throw new Error("No updates provided. Use --model / --cli-provider / --api-source / --field key=value.");
516
540
  }
517
541
  }
@@ -523,21 +547,19 @@ async function buildCreatedAgentRecord(args) {
523
547
  const resolvedAgentInput = resolveCliAgentKeyInput(args.parsed.agentInput);
524
548
  const agentKey = resolvedAgentInput.startsWith("agent-") ? resolvedAgentInput : createAgentKey.private(userId || "local", resolvedAgentInput);
525
549
  if (args.parsed.presetId) {
526
- const { resolveProviderPresetFields } = await import("./providerPresetApply-FG6NZ57W.js");
550
+ const { resolveProviderPresetFields } = await import("./providerPresetApply-TEBH7FDX.js");
527
551
  const fields = resolveProviderPresetFields(args.parsed.presetId);
528
552
  if (fields.kind === "manual") {
529
553
  throw new Error(
530
554
  `unknown --preset "${args.parsed.presetId}". Run \`nolo agent providers\` to list preset ids.`
531
555
  );
532
556
  }
533
- if (fields.kind === "oauth" || fields.requiresDesktopOAuth) {
534
- throw new Error(
535
- `--preset "${args.parsed.presetId}" is an OAuth subscription; create it in Nolo Desktop (OAuth login required).`
536
- );
537
- }
538
557
  const u = args.parsed.updates;
539
558
  u.apiSource = "custom";
540
559
  u.provider = u.provider ?? fields.provider;
560
+ if (fields.apiKeyRef && !u.apiKeyRef) {
561
+ u.apiKeyRef = fields.apiKeyRef;
562
+ }
541
563
  if (fields.customProviderUrl && !u.customProviderUrl) {
542
564
  u.customProviderUrl = fields.customProviderUrl;
543
565
  }
@@ -670,6 +692,8 @@ export {
670
692
  queryUserRecords,
671
693
  deleteDbRecord,
672
694
  writeAgentRecord,
695
+ invalidateAgentRecordCache,
696
+ refreshAgentRecordCache,
673
697
  resolveAgentRecordFromHybridStore,
674
698
  agentRecordHasConfiguredCredential,
675
699
  sanitizeAgentRecordForCliOutput,
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getModelConfig
3
- } from "./chunk-OIVSQH2O.js";
3
+ } from "./chunk-3BXNTXYI.js";
4
4
  import {
5
5
  isPlatformHostedDeepseekModel,
6
6
  isPlatformHostedOpenAIImageModel,
7
7
  resolvePlatformHostedRouting
8
- } from "./chunk-Q67DOFOO.js";
8
+ } from "./chunk-Y3PMXGLH.js";
9
9
  import {
10
10
  asTrimmedLowercaseString
11
11
  } from "./chunk-QSJ3HFEF.js";
@@ -1,18 +1,15 @@
1
1
  import {
2
2
  estimateTokenCount
3
3
  } from "./chunk-PSCNXBYA.js";
4
- import {
5
- compactWhitespace
6
- } from "./chunk-DWLEOOGR.js";
7
4
  import {
8
5
  addContentAction
9
- } from "./chunk-V4MJDUSR.js";
6
+ } from "./chunk-E73ON47R.js";
10
7
  import {
11
8
  upload
12
- } from "./chunk-H62HCIUP.js";
9
+ } from "./chunk-4FFUDT6D.js";
13
10
  import {
14
11
  getRuntimeServerContext
15
- } from "./chunk-UKWGR5SS.js";
12
+ } from "./chunk-UJXNKP5V.js";
16
13
  import {
17
14
  API_ENDPOINTS
18
15
  } from "./chunk-LCBAMY2M.js";
@@ -42,8 +39,7 @@ var serializeMessageContent = (content, imagePlaceholder = "[\u56FE\u7247]") =>
42
39
  return null;
43
40
  };
44
41
 
45
- // packages/app/utils/imageUtils.ts
46
- var BYTES_PER_MB = 1024 * 1024;
42
+ // packages/core/file/dataUrl.ts
47
43
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
48
44
  var parseDataUrl = (dataUrl) => {
49
45
  const trimmed = dataUrl.trim();
@@ -615,7 +611,7 @@ function planCompression(input) {
615
611
  }
616
612
 
617
613
  // packages/ai/context/compactionShared.ts
618
- var COMPACTION_SUMMARY_SCHEMA_VERSION = 1;
614
+ var COMPACTION_SUMMARY_SCHEMA_VERSION = 2;
619
615
  var COMPACTION_SUMMARY_SYSTEM_PROMPT = `\u4F60\u662F\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u538B\u7F29\u5668\u3002\u6839\u636E\u3010\u73B0\u6709\u8BB0\u5FC6\u3011\u548C\u3010\u65B0\u589E\u5BF9\u8BDD\u3011\uFF0C\u8F93\u51FA\u53EF\u66FF\u4EE3\u539F\u59CB\u6D88\u606F\u7684\u4E8B\u5B9E\u6027\u8981\u70B9\uFF0C\u4F9B\u540E\u7EED\u5BF9\u8BDD\u76F4\u63A5\u4F7F\u7528\u3002
620
616
 
621
617
  \u4E25\u683C\u53EA\u8F93\u51FA\u4E0B\u9762\u4E09\u90E8\u5206\uFF0C\u6807\u9898\u5FC5\u987B\u5B8C\u5168\u4E00\u81F4\uFF1A
@@ -628,10 +624,16 @@ var COMPACTION_SUMMARY_SYSTEM_PROMPT = `\u4F60\u662F\u5BF9\u8BDD\u4E0A\u4E0B\u65
628
624
 
629
625
  \u8981\u6C42\uFF1A
630
626
  1) \u4F7F\u7528\u5BF9\u8BDD\u4E3B\u8BED\u8A00\uFF1B\u6DF7\u5408\u8BED\u8A00\u65F6\u4F18\u5148\u7528\u6237\u4E3B\u8981\u8BED\u8A00\uFF1B\u4E13\u6709\u540D\u8BCD\u3001\u6587\u4EF6\u8DEF\u5F84\u3001\u6807\u8BC6\u7B26\u3001\u547D\u4EE4\u4FDD\u7559\u539F\u6587\uFF0C\u4E0D\u8981\u7FFB\u8BD1\u6216\u8F6C\u8FF0\u3002
631
- 2) \u5173\u952E\u4E8B\u5B9E\u6863\u6848\u53EA\u4FDD\u7559\u4E4B\u540E\u7EE7\u7EED\u5BF9\u8BDD\u4ECD\u6709\u4EF7\u503C\u7684\u4FE1\u606F\uFF1A\u7528\u6237\u76EE\u6807/\u504F\u597D\u3001\u7EA6\u675F\u3001\u6280\u672F\u6808\u3001\u786E\u5B9A\u7684\u6587\u4EF6\u8DEF\u5F84\u3001\u6838\u5FC3\u51B3\u7B56\u3001\u672A\u5B8C\u6210\u5F85\u529E\u3002\u4FDD\u7559\u786E\u5207\u503C\uFF08\u7AEF\u53E3\u53F7\u3001\u7248\u672C\u53F7\u3001\u8DEF\u5F84\u3001\u53D8\u91CF\u540D\u3001\u9519\u8BEF\u4FE1\u606F\u539F\u6587\uFF09\uFF0C\u4E0D\u8981\u6982\u62EC\u6210"\u67D0\u4E2A\u7AEF\u53E3"\u6216"\u67D0\u4E2A\u6587\u4EF6"\u6216"\u67D0\u62A5\u9519"\u3002
627
+ 2) \u5173\u952E\u4E8B\u5B9E\u6863\u6848\u7684**\u524D\u4E24\u9879\u56FA\u5B9A\u662F**\uFF1A
628
+ - \u300C\u539F\u59CB\u76EE\u6807\u300D\uFF1A\u7528\u6237\u6700\u521D\u4E3A\u4EC0\u4E48\u5F00\u8FD9\u6BB5\u5BF9\u8BDD\uFF08\u5C3D\u91CF\u4FDD\u7559\u4ED6\u7684\u539F\u8BDD\u4E0E\u7528\u8BCD\uFF0C\u4E0D\u8981\u6539\u5199\u6210\u4EFB\u52A1\u6E05\u5355\uFF09\u3002
629
+ \u589E\u91CF\u66F4\u65B0\u65F6\u6CBF\u7528\u3010\u73B0\u6709\u8BB0\u5FC6\u3011\u91CC\u5DF2\u6709\u7684\u300C\u539F\u59CB\u76EE\u6807\u300D\uFF0C\u4E0D\u8981\u88AB\u65B0\u589E\u5BF9\u8BDD\u6539\u5199\u2014\u2014\u5B83\u662F\u7A33\u5B9A\u5B57\u6BB5\uFF1B
630
+ \u4EC5\u5F53\u65B0\u5BF9\u8BDD\u660E\u786E\u8868\u660E\u539F\u6587\u6709\u4E8B\u5B9E\u6027\u9519\u8BEF\u65F6\u624D\u4FEE\u6B63\uFF0C\u5E76\u5728\u300C\u76EE\u6807\u6F14\u5316\u300D\u91CC\u6CE8\u660E\u3002
631
+ - \u300C\u76EE\u6807\u6F14\u5316\u300D\uFF1A\u82E5\u4E2D\u9014\u8F6C\u5411\uFF0C\u5199\u6E05\u8F6C\u5411\u4E86\u4EC0\u4E48\u3001\u56E0\u4E3A\u4EC0\u4E48\uFF1B\u6CA1\u6709\u8F6C\u5411\u5C31\u5199\u300C\u65E0\u8F6C\u5411\u300D\u6216\u7701\u7565\u8FD9\u4E00\u9879\uFF0C\u4E0D\u8981\u786C\u51D1\u3002
632
+ \u88AB\u540E\u7EED\u5DE5\u4F5C\u53D6\u4EE3\u7684\u662F"\u65B9\u6848"\uFF0C\u4E0D\u662F"\u7528\u6237\u7684\u521D\u59CB\u610F\u56FE"\u2014\u2014\u521D\u59CB\u610F\u56FE\u4E0D\u5F97\u7701\u7565\u3002
633
+ \u5176\u540E\u624D\u662F\uFF1A\u7528\u6237\u504F\u597D\u3001\u7EA6\u675F\u3001\u6280\u672F\u6808\u3001\u786E\u5B9A\u7684\u6587\u4EF6\u8DEF\u5F84\u3001\u6838\u5FC3\u51B3\u7B56\u3001\u672A\u5B8C\u6210\u5F85\u529E\u3002\u4FDD\u7559\u786E\u5207\u503C\uFF08\u7AEF\u53E3\u53F7\u3001\u7248\u672C\u53F7\u3001\u8DEF\u5F84\u3001\u53D8\u91CF\u540D\u3001\u9519\u8BEF\u4FE1\u606F\u539F\u6587\uFF09\uFF0C\u4E0D\u8981\u6982\u62EC\u6210"\u67D0\u4E2A\u7AEF\u53E3"\u6216"\u67D0\u4E2A\u6587\u4EF6"\u6216"\u67D0\u62A5\u9519"\u3002
632
634
  3) \u5BF9\u8BDD\u8FDB\u5C55\u4E0E\u5F85\u529E\u4EE5\u7B2C\u4E00\u4EBA\u79F0\u7EED\u4F5C\u7B14\u8BB0\u7684\u53E3\u543B\u5199\uFF08"\u6211\u505A\u4E86\u2026""\u7528\u6237\u8981\u6C42\u2026""\u4E0B\u4E00\u6B65\u6211\u9700\u8981\u2026"\uFF09\uFF0C\u4E0D\u8981\u5199\u6210\u7B2C\u4E09\u65B9\u89C2\u5BDF\u62A5\u544A\u3002\u5148\u6781\u7B80\u6982\u62EC\u65E7\u4E0A\u4E0B\u6587\uFF0C\u518D\u66F4\u8BE6\u7EC6\u8BB0\u5F55\u6700\u8FD1\u8FDB\u5C55\u3001\u7ED3\u8BBA\u3001\u5206\u6B67\u4E0E\u4E0B\u4E00\u6B65\u3002\u5BF9\u4E8E\u58F0\u79F0\u5DF2\u5B8C\u6210\u4F46\u5C1A\u672A\u9A8C\u8BC1\u7684\u5DE5\u4F5C\uFF08\u5982\u5DE5\u5177\u8C03\u7528\u8FD4\u56DE\u6210\u529F\u4F46\u7ED3\u679C\u672A\u4EBA\u5DE5\u786E\u8BA4\uFF09\uFF0C\u660E\u786E\u6807\u6CE8"\uFF08\u5F85\u9A8C\u8BC1\uFF09"\u2014\u2014\u4E0D\u8981\u9ED8\u8BA4\u4FE1\u4EFB\u5DE5\u5177\u8FD4\u56DE\u503C\u3002
633
635
  4) \u6587\u4EF6\u64CD\u4F5C\u6E05\u5355\uFF1A\u5217\u51FA\u672C\u6B21\u538B\u7F29\u8303\u56F4\u5185\u8BFB\u53D6\u3001\u5199\u5165\u3001\u7F16\u8F91\u8FC7\u7684\u6587\u4EF6\u8DEF\u5F84\u53CA\u64CD\u4F5C\u7C7B\u578B\uFF08\u5982: - \u8BFB\u53D6: path/to/file\uFF1B\u82E5\u672A\u6D89\u53CA\u6587\u4EF6\u64CD\u4F5C\u5199"\u65E0"\uFF09\u3002
634
- 5) \u5FFD\u7565\u5BD2\u6684\u3001\u91CD\u590D\u5C1D\u8BD5\u3001\u5DF2\u653E\u5F03\u65B9\u6848\u548C\u65E0\u4EF7\u503C\u5E9F\u8BDD\u3002
636
+ 5) \u5FFD\u7565\u5BD2\u6684\u3001\u91CD\u590D\u5C1D\u8BD5\u548C\u65E0\u4EF7\u503C\u5E9F\u8BDD\uFF1B**\u5DF2\u653E\u5F03\u7684\u65B9\u6848/\u5C1D\u8BD5**\u53EF\u4EE5\u7701\u7565\uFF0C\u4F46\u7528\u6237\u5F53\u521D\u7684\u610F\u56FE\u4E0E\u7406\u7531\u4E0D\u53EF\u7701\u7565\uFF08\u89C1\u7B2C 2 \u6761\uFF09\u3002
635
637
  6) \u4E0D\u8981\u7F16\u9020\u672A\u51FA\u73B0\u7684\u4FE1\u606F\uFF1B\u4E0D\u8981\u5F00\u573A\u767D\u3001\u7ED3\u675F\u8BED\u3001markdown \u4EE3\u7801\u5757\u6216\u989D\u5916\u7AE0\u8282\uFF1B\u4E0D\u8981\u8C03\u7528\u4EFB\u4F55\u5DE5\u5177\u3002`;
636
638
  function formatMessageContentFallback(msg) {
637
639
  const content = serializeMessageContent(msg.content);
@@ -767,14 +769,6 @@ function formatCompactionMetricsLog(metrics) {
767
769
  return `[Compaction] reason=${metrics.reason} compressed=${metrics.compressedCount}->${metrics.retainedCount} msgs, tokens=${totalBefore}->${totalAfter} (ratio=${ratio})${llmInfo}`;
768
770
  }
769
771
 
770
- // packages/core/clipCompactText.ts
771
- function clipCompactText(value, max, ellipsis = "...") {
772
- const compact = compactWhitespace(value);
773
- if (compact.length <= max) return compact;
774
- if (max <= ellipsis.length) return compact.slice(0, max);
775
- return `${compact.slice(0, max - ellipsis.length)}${ellipsis}`;
776
- }
777
-
778
772
  // packages/ai/token/providerCallTiming.ts
779
773
  var defaultNow = () => {
780
774
  const perf = globalThis.performance;
@@ -846,7 +840,14 @@ var isMeaningfulResponsesOutput = (event) => {
846
840
  };
847
841
 
848
842
  export {
849
- clipCompactText,
843
+ normalizeTimingMs,
844
+ createProviderCallTimingTracker,
845
+ observeMeaningfulProviderResponseAt,
846
+ observeMeaningfulProviderResponse,
847
+ finalizeProviderCallTiming,
848
+ withProviderCallTimingFields,
849
+ isMeaningfulChatCompletionOutput,
850
+ isMeaningfulResponsesOutput,
850
851
  planContextUsage,
851
852
  buildDatabaseFileContentUrl,
852
853
  serializeMessageContent,
@@ -860,13 +861,5 @@ export {
860
861
  formatFileOperationsFromMessages,
861
862
  formatMessagesForSummaryWithTruncation,
862
863
  buildCompactionMetricsFromPlan,
863
- formatCompactionMetricsLog,
864
- normalizeTimingMs,
865
- createProviderCallTimingTracker,
866
- observeMeaningfulProviderResponseAt,
867
- observeMeaningfulProviderResponse,
868
- finalizeProviderCallTiming,
869
- withProviderCallTimingFields,
870
- isMeaningfulChatCompletionOutput,
871
- isMeaningfulResponsesOutput
864
+ formatCompactionMetricsLog
872
865
  };