nolo-cli 0.103.0-alpha.1 → 0.103.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 (209) hide show
  1. package/README.md +1 -1
  2. package/{_executeModel-3UCNJCQA.js → _executeModel-7J7Q3WXY.js} +75 -68
  3. package/action-C4KMTCJF.js +20 -0
  4. package/{addContentAction-O7R66HEX.js → addContentAction-7TNIOVZI.js} +12 -11
  5. package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-O47J3MVW.js} +18 -19
  6. package/{agentDeleteCommand-2YAHAZFJ.js → agentDeleteCommand-YPJHK7JA.js} +117 -42
  7. package/{agentEmailCommands-WLYF3JRS.js → agentEmailCommands-AWEXOHWM.js} +98 -88
  8. package/agentListCommands-2DTLLJZD.js +742 -0
  9. package/{agentMachineCommands-HNGAR5GI.js → agentMachineCommands-PGEEQ4JJ.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-DZVLCPLJ.js +138 -0
  13. package/agentRunCommand-AX5CYQ46.js +167 -0
  14. package/{agentRunControl-AVJR4JW4.js → agentRunControl-3HWA2LLQ.js} +2 -2
  15. package/{agentRuntimeLocal-VXZSDIGT.js → agentRuntimeLocal-PITRQ2EU.js} +48 -39
  16. package/{agentSlice-SICQBMCM.js → agentSlice-4TLSG6FB.js} +14 -13
  17. package/{appDeleteCommands-32MHLR4L.js → appDeleteCommands-UC2JW5FJ.js} +46 -41
  18. package/{appDeployCommands-WCQOUSOB.js → appDeployCommands-OL2RKVJ3.js} +46 -41
  19. package/{appDeployStatusCommands-6QKB7DYN.js → appDeployStatusCommands-B3PLC62M.js} +46 -41
  20. package/{appGetCommands-SFAPP5PB.js → appGetCommands-REESA2XQ.js} +46 -41
  21. package/{appListCommands-EKUBDRUO.js → appListCommands-UF6XX7HR.js} +46 -41
  22. package/{authCommand-F4EFRRX6.js → authCommand-NQPMGYHP.js} +118 -24
  23. package/{authCommands-RGOGCPP6.js → authCommands-LWLOZETU.js} +7 -5
  24. package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-GFY77VRN.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-UKZDAFYT.js → chunk-22RVE2PC.js} +6 -10
  28. package/{chunk-6OZ36FXI.js → chunk-27ONFIEY.js} +22 -4
  29. package/{chunk-HVURBGF3.js → chunk-2H6SEVDS.js} +6 -6
  30. package/{chunk-TOP2VXOR.js → chunk-2K4TM6AW.js} +5 -5
  31. package/{chunk-JEDZAO7L.js → chunk-2SYTUTLI.js} +257 -37
  32. package/{chunk-53HEEOTT.js → chunk-2WJ57RJA.js} +83 -16
  33. package/{chunk-OIVSQH2O.js → chunk-3BXNTXYI.js} +299 -5
  34. package/chunk-4A2R7KHG.js +13545 -0
  35. package/{chunk-EYAQT56M.js → chunk-4DPP773Q.js} +2 -2
  36. package/{chunk-JRQFUXY7.js → chunk-4G4C5SXT.js} +99 -22
  37. package/{chunk-DHDMC6FO.js → chunk-4HTMUQIZ.js} +14 -9
  38. package/{chunk-B3TVQ6PI.js → chunk-4IVA6UUE.js} +20 -11
  39. package/chunk-4LCOCOR5.js +50 -0
  40. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  41. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  42. package/{chunk-H62HCIUP.js → chunk-56HJ2LAA.js} +35 -22
  43. package/{chunk-V4MJDUSR.js → chunk-5EPHWMP5.js} +2 -2
  44. package/{chunk-E4MARS3Q.js → chunk-5GVBDNTO.js} +1 -1
  45. package/{chunk-3WLK2JQ5.js → chunk-5IWONK6X.js} +68 -46
  46. package/chunk-5J3PYNUP.js +255 -0
  47. package/chunk-5MMAK75Q.js +15 -0
  48. package/{chunk-LW4VFPAY.js → chunk-5ZDLVKNG.js} +873 -228
  49. package/{chunk-42V6BK2E.js → chunk-62IL3KQV.js} +4 -34
  50. package/{chunk-AEOE4Z6Q.js → chunk-6UEJDFF7.js} +39 -15
  51. package/{chunk-JPGCXHNM.js → chunk-7JWCVINR.js} +1 -1
  52. package/{chunk-GQBOR3G6.js → chunk-7KVZ5LDQ.js} +2 -2
  53. package/{chunk-IIVGDG4I.js → chunk-7KWFIKKK.js} +13 -7
  54. package/chunk-A4SQRTZ6.js +15 -0
  55. package/chunk-AGIM7IMJ.js +147 -0
  56. package/{chunk-5UTFL4QJ.js → chunk-AOTBKDRK.js} +7 -0
  57. package/{chunk-L5UXH3B2.js → chunk-B455PEFD.js} +27 -8
  58. package/{chunk-XS5SWEDQ.js → chunk-BELZY72F.js} +1 -1
  59. package/chunk-BMQ2MJUK.js +153 -0
  60. package/{chunk-6YTOJY35.js → chunk-BZ7NPA6G.js} +35 -2
  61. package/chunk-CHOZJMJS.js +78 -0
  62. package/{chunk-3BMYXEUW.js → chunk-CUF4MYKI.js} +1 -1
  63. package/{chunk-ACTMNVHM.js → chunk-CYSYR67N.js} +1 -1
  64. package/{chunk-WV42OMV7.js → chunk-D2GQE6AF.js} +8 -8
  65. package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
  66. package/chunk-DZ7R5V3Y.js +164 -0
  67. package/{chunk-3VNWWVKB.js → chunk-E3YWHWCR.js} +50 -18
  68. package/{chunk-KQ4ONNQD.js → chunk-EKPKW6RM.js} +155 -8
  69. package/{chunk-ABQYVJBJ.js → chunk-EV235ILT.js} +5 -5
  70. package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
  71. package/{chunk-AGVEIAQA.js → chunk-F442UK5V.js} +29 -78
  72. package/{chunk-HJUYAD4A.js → chunk-FBTNYNAL.js} +5 -5
  73. package/{chunk-2F7RJC6L.js → chunk-FOXQ7BAB.js} +1 -1
  74. package/{chunk-ETI2NYVF.js → chunk-GCTKWVLU.js} +4 -4
  75. package/chunk-GMZLP5DV.js +82 -0
  76. package/{chunk-FDTR4QJ6.js → chunk-H6A6X4EK.js} +32 -1
  77. package/{chunk-6VFARHZW.js → chunk-H7TQORR4.js} +994 -1079
  78. package/{chunk-5H7KJX7J.js → chunk-HD3S2F7U.js} +5 -5
  79. package/chunk-HDJRLWTG.js +8002 -0
  80. package/{chunk-DVINR3PL.js → chunk-HDLLCBRF.js} +1 -1
  81. package/{chunk-QOKAKDPE.js → chunk-HIM3FCLF.js} +0 -1
  82. package/{chunk-ONXOABJR.js → chunk-HNGRBWYF.js} +3 -0
  83. package/{chunk-VLTIYV3X.js → chunk-HP57OUJO.js} +4 -4
  84. package/{chunk-4OEFYTWL.js → chunk-IRZTHHNM.js} +67 -48
  85. package/{chunk-GPCZ7UXG.js → chunk-K6U4NKFJ.js} +1 -1
  86. package/{chunk-OZGZPSEG.js → chunk-KGRP4VOK.js} +47 -67
  87. package/{chunk-DNCEALKX.js → chunk-LB5A6JTU.js} +22 -29
  88. package/{chunk-LS2ZANRJ.js → chunk-LOCNXNOU.js} +1 -1
  89. package/{chunk-PUOC4YRO.js → chunk-M7VLQGQP.js} +11 -0
  90. package/{chunk-Z77CRGTW.js → chunk-MSFZ7FMO.js} +1 -1
  91. package/chunk-NKWIS6G2.js +442 -0
  92. package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
  93. package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
  94. package/chunk-NWENLDMM.js +42 -0
  95. package/chunk-O7SVKKLY.js +875 -0
  96. package/chunk-OCZKATRC.js +129 -0
  97. package/{chunk-PQFHGD77.js → chunk-OM2RUOEU.js} +161 -14
  98. package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
  99. package/{chunk-TQBHNYVR.js → chunk-PLRFCQ7C.js} +567 -519
  100. package/{chunk-6D6VBVEW.js → chunk-Q7O72MF5.js} +80 -14
  101. package/{chunk-J4MOO56S.js → chunk-RILRSUGC.js} +10 -2
  102. package/{chunk-RSONHHPE.js → chunk-RNUDNZJW.js} +10 -10
  103. package/{chunk-3N3W7KBB.js → chunk-RZJAZVCF.js} +11 -9
  104. package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
  105. package/{chunk-GEPUP7OO.js → chunk-TSXNDTXL.js} +3 -3
  106. package/chunk-TY3TIUJK.js +89 -0
  107. package/{chunk-I3TQJXQ7.js → chunk-U3C3IA32.js} +9 -2
  108. package/{chunk-UZGQNTVW.js → chunk-UA324D4O.js} +8 -6
  109. package/{chunk-YYLHWIW6.js → chunk-UKZX3NHN.js} +1 -1
  110. package/{chunk-BP4XNZRM.js → chunk-UNAOTLKO.js} +4 -4
  111. package/{chunk-CUQEXCAU.js → chunk-UQ5P2WHS.js} +29 -9
  112. package/{chunk-NA35QHCF.js → chunk-V6YASAZR.js} +1 -1
  113. package/{chunk-3DII57IT.js → chunk-VCAQFMVN.js} +1 -1
  114. package/chunk-VIWDGTDA.js +8 -0
  115. package/chunk-VJVNU77E.js +83 -0
  116. package/{chunk-ZCYXJSTU.js → chunk-VL3H5ZU3.js} +66 -94
  117. package/{chunk-Q554LLSI.js → chunk-VLGL7FOL.js} +1 -1
  118. package/{chunk-UKWGR5SS.js → chunk-VY6VFGKR.js} +194 -1144
  119. package/{chunk-4EG4QFTK.js → chunk-WI6TUGLJ.js} +19 -17
  120. package/{chunk-QDSINZM3.js → chunk-WJ3B6FX6.js} +1 -14
  121. package/{chunk-OEVAY4J6.js → chunk-XMUZHRSB.js} +18 -20
  122. package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
  123. package/{chunk-Q67DOFOO.js → chunk-Y3PMXGLH.js} +2 -0
  124. package/{chunk-7S4YWN7P.js → chunk-YDO5ERB4.js} +4 -4
  125. package/chunk-YK5MHOWM.js +915 -0
  126. package/{chunk-SH43IESU.js → chunk-YUNJN43V.js} +44 -9
  127. package/chunk-YV25TM3R.js +780 -0
  128. package/{chunk-IONPPCL5.js → chunk-YZZREBID.js} +86 -16
  129. package/{chunk-DNUUJ45N.js → chunk-Z3WSAK6A.js} +23 -28
  130. package/chunk-ZRAU6T47.js +56 -0
  131. package/commandRegistry-VQPFWVDH.js +833 -0
  132. package/{contentThunks-S4S7QPSO.js → contentThunks-A26ME6OJ.js} +37 -35
  133. package/{cooldownCommands-REAWYVTY.js → cooldownCommands-ZLEPIB4A.js} +2 -2
  134. package/{createAgentAutomationAction-ODGL2YGP.js → createAgentAutomationAction-BSAMZJ5W.js} +39 -37
  135. package/createDialogAction-CMCQXYHD.js +69 -0
  136. package/{createPageAction-FBV3OWX7.js → createPageAction-ANGKJTK2.js} +46 -43
  137. package/{chunk-F2RNI7ZR.js → cursorProvider-YGGNMVWX.js} +2496 -9897
  138. package/{dbSlice-XVWBAGYN.js → dbSlice-QOLNF5GN.js} +11 -10
  139. package/{deleteFile-YG6QMJLU.js → deleteFile-KESP65GC.js} +7 -6
  140. package/{dialogCommands-5J56DFWN.js → dialogCommands-AMPAWLX4.js} +49 -45
  141. package/{dialogSlice-LEO27SQG.js → dialogSlice-DGWDEBYC.js} +41 -34
  142. package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
  143. package/{docCreateCommands-KYI2DC2U.js → docCreateCommands-7NMIYL5D.js} +48 -43
  144. package/{docDeleteCommands-67REUSRY.js → docDeleteCommands-BD4OM5PV.js} +49 -44
  145. package/{docReadCommands-HOSVSBDJ.js → docReadCommands-5IOVAKU2.js} +47 -42
  146. package/{docStore-MNX5MHA5.js → docStore-TP4QDER4.js} +16 -12
  147. package/{docUpdateCommands-EMGCSMXY.js → docUpdateCommands-ZTKJ6UPC.js} +48 -43
  148. package/{fetchMessages-EIU7UFFK.js → fetchMessages-5L7OVM5Y.js} +5 -5
  149. package/{getPricing-LUSEABA6.js → getPricing-NMMFT3YI.js} +4 -4
  150. package/{handleSendMessageAction-YB6KQFJS.js → handleSendMessageAction-N4WKFRSQ.js} +111 -87
  151. package/index.js +87 -884
  152. package/{lib-FRRS27KN.js → lib-PU2G2MSO.js} +523 -191
  153. package/{localDialogRead-BTFJ4V2I.js → localDialogRead-O5A26FDK.js} +2 -2
  154. package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-TU6OBC76.js} +9 -6
  155. package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-VKWVOPPI.js} +1 -1
  156. package/{machineCommands-7GVQCUAK.js → machineCommands-47WKGY5Z.js} +92 -82
  157. package/machineWsRunDispatch-CYW5FJ52.js +154 -0
  158. package/{memberThunks-QGFLFVCI.js → memberThunks-25K6DDRA.js} +20 -18
  159. package/{models-T3SG6MJ5.js → models-ZPU5EDF4.js} +2 -2
  160. package/oauthTokenStore-ITEB663N.js +23 -0
  161. package/package.json +1 -1
  162. package/pdf-U6KSUEZZ.js +26435 -0
  163. package/processSpawn-SOAV3FEV.js +11 -0
  164. package/profileConfig-ZGOFORWV.js +43 -0
  165. package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-TEBH7FDX.js} +7 -7
  166. package/{providerRegistry-757OWH3O.js → providerRegistry-CBJLNCET.js} +11 -7
  167. package/{read-COE3ZYR6.js → read-PJIT2YEJ.js} +7 -6
  168. package/{readDocTool-5USN4A6V.js → readDocTool-DRSXHGNL.js} +5 -3
  169. package/{readlineWorkspace-WA7JNI6J.js → readlineWorkspace-CK7GOVOC.js} +2698 -2055
  170. package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-VIWJL6MX.js} +21 -25
  171. package/{runAgentClientLoop-JGFQ6KIR.js → runAgentClientLoop-BGHGP5AR.js} +76 -70
  172. package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-PIVSBZRZ.js} +4 -4
  173. package/runtimeModeArgs-2Y7BALTO.js +31 -0
  174. package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-A7VA3NFM.js} +15 -13
  175. package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-B4P7YQX2.js} +22 -26
  176. package/{chunk-AFUORTY4.js → settingThunks-KOYSAT65.js} +226 -940
  177. package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-ZBU76COE.js} +3 -3
  178. package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
  179. package/{spaceCommands-NKJVJCQQ.js → spaceCommands-QJCYG27F.js} +51 -46
  180. package/{streamAgentChatTurn-XLFZ66UC.js → streamAgentChatTurn-ANE7OTCZ.js} +214 -108
  181. package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-3VYWHZKH.js} +18 -19
  182. package/{tableCommands-O6NWHFKV.js → tableCommands-6U4BMLRR.js} +10 -10
  183. package/{toolApiClient-QVJ6HDNN.js → toolApiClient-EJT6TMFG.js} +3 -3
  184. package/tools-WPOVVP7M.js +116 -0
  185. package/{tuiSummaryLlmCaller-WFRWERGK.js → tuiSummaryLlmCaller-QCHCULPM.js} +25 -22
  186. package/{updateCommands-2M74UL7P.js → updateCommands-4EHDLF5J.js} +3 -3
  187. package/{updateDialogTitleAction-6MBTD4UE.js → updateDialogTitleAction-C4GRCXL4.js} +82 -44
  188. package/action-YVYQEAAV.js +0 -31
  189. package/agentListCommands-JP7S7PT2.js +0 -469
  190. package/agentRecordCommands-SXFPW3DL.js +0 -128
  191. package/agentRunCommand-JIQ4HY4D.js +0 -155
  192. package/browser-image-compression-MFDTD7K6.js +0 -1763
  193. package/chatQueueReduxAdapter-HHMUDNXL.js +0 -186
  194. package/chunk-CQ3WA2NE.js +0 -299
  195. package/chunk-M76ECQRD.js +0 -13658
  196. package/chunk-MEYIRKDN.js +0 -8967
  197. package/chunk-Q5FJJ6XI.js +0 -103
  198. package/chunk-S7Z2HMCN.js +0 -25
  199. package/chunk-XVZ22N6C.js +0 -20782
  200. package/chunk-Y5GCAMGP.js +0 -9
  201. package/chunk-YPREESF4.js +0 -225
  202. package/createDialogAction-GFKRXTK4.js +0 -65
  203. package/machineWsRunDispatch-XA7TD7Z7.js +0 -144
  204. package/settingSlice-ZQZVUPKK.js +0 -204
  205. package/syncMapping-N6RGXGBW.js +0 -437
  206. package/tools-NF5AB34X.js +0 -110
  207. package/{chunk-VMFTFOWF.js → chunk-ODAPITXL.js} +7 -7
  208. package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
  209. package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
@@ -1,9 +1,11 @@
1
1
  import {
2
2
  NOLO_CHROME_CONNECTOR_EXTENSION_ID,
3
3
  NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION,
4
+ NOLO_CONNECTOR_EXTENSION_IDS,
5
+ NOLO_FIREFOX_CONNECTOR_EXTENSION_ID,
4
6
  REQUIRED_CHROME_CONNECTOR_FEATURES,
5
7
  createChromeConnectorClient
6
- } from "./chunk-SH43IESU.js";
8
+ } from "./chunk-YUNJN43V.js";
7
9
  import {
8
10
  toErrorMessage
9
11
  } from "./chunk-HNMXYYJR.js";
@@ -21,6 +23,7 @@ import { dirname, resolve } from "node:path";
21
23
  import { execFileSync } from "node:child_process";
22
24
  import { fileURLToPath } from "node:url";
23
25
  var DEFAULT_CONNECTOR_ROOT = dirname(fileURLToPath(import.meta.url));
26
+ var FIREFOX_EXTENSION_ID = "nolo-browser-connector@nolo.chat";
24
27
  function extensionIdFromPublicKey(publicKeyBase64) {
25
28
  const digest = createHash("sha256").update(Buffer.from(publicKeyBase64, "base64")).digest();
26
29
  return Array.from(
@@ -40,8 +43,23 @@ function resolveNodePath() {
40
43
  }
41
44
  function nativeMessagingHostsDir({
42
45
  home = process.env.HOME || "",
43
- platform = process.platform
46
+ platform = process.platform,
47
+ browser = "chrome"
44
48
  } = {}) {
49
+ if (browser === "firefox") {
50
+ if (platform === "darwin") {
51
+ return resolve(home, "Library/Application Support/Mozilla/NativeMessagingHosts");
52
+ }
53
+ if (platform === "linux") {
54
+ return resolve(home, ".mozilla/native-messaging-hosts");
55
+ }
56
+ throw new Error(
57
+ `Firefox native host installation is not implemented for platform "${platform}". Windows needs a registry value under HKCU\\Software\\Mozilla\\NativeMessagingHosts pointing at the manifest file.`
58
+ );
59
+ }
60
+ if (browser !== "chrome") {
61
+ throw new Error(`Unknown native messaging browser target: "${browser}".`);
62
+ }
45
63
  if (platform === "darwin") {
46
64
  return resolve(home, "Library/Application Support/Google/Chrome/NativeMessagingHosts");
47
65
  }
@@ -55,16 +73,18 @@ function nativeMessagingHostsDir({
55
73
  function resolveNativeHostInstallPaths({
56
74
  home = process.env.HOME || "",
57
75
  connectorRoot = DEFAULT_CONNECTOR_ROOT,
58
- platform = process.platform
76
+ platform = process.platform,
77
+ browser = "chrome"
59
78
  } = {}) {
60
79
  const supportDir = resolve(home, "Library/Application Support/Nolo/ChromeConnector");
61
80
  return {
62
81
  connectorRoot,
82
+ browser,
63
83
  extensionManifestPath: resolve(connectorRoot, "extension", "manifest.json"),
64
84
  hostPath: resolve(connectorRoot, "native-host", "nolo-chrome-native-host.mjs"),
65
85
  templatePath: resolve(connectorRoot, "native-host", "com.nolo.chrome_connector.json"),
66
86
  nativeManifestPath: resolve(
67
- nativeMessagingHostsDir({ home, platform }),
87
+ nativeMessagingHostsDir({ home, platform, browser }),
68
88
  "com.nolo.chrome_connector.json"
69
89
  ),
70
90
  supportDir,
@@ -77,12 +97,13 @@ function installNativeHostManifest({
77
97
  connectorRoot = DEFAULT_CONNECTOR_ROOT,
78
98
  platform = process.platform,
79
99
  extensionId,
80
- nodePath
100
+ nodePath,
101
+ browser = "chrome"
81
102
  } = {}) {
82
- const paths = resolveNativeHostInstallPaths({ home, connectorRoot, platform });
103
+ const paths = resolveNativeHostInstallPaths({ home, connectorRoot, platform, browser });
83
104
  const manifest = JSON.parse(readFileSync(paths.templatePath, "utf8"));
84
105
  const extensionManifest = JSON.parse(readFileSync(paths.extensionManifestPath, "utf8"));
85
- const resolvedExtensionId = extensionId || extensionIdFromPublicKey(extensionManifest.key);
106
+ const resolvedExtensionId = extensionId || (browser === "firefox" ? FIREFOX_EXTENSION_ID : extensionIdFromPublicKey(extensionManifest.key));
86
107
  const resolvedNodePath = nodePath || resolveNodePath();
87
108
  mkdirSync(paths.supportDir, { recursive: true });
88
109
  const existingToken = existsSync(paths.tokenPath) ? readFileSync(paths.tokenPath, "utf8").trim() : "";
@@ -97,12 +118,18 @@ NOLO_CHROME_CONNECTOR_TOKEN=${JSON.stringify(token)} exec ${JSON.stringify(resol
97
118
  );
98
119
  chmodSync(paths.wrapperPath, 493);
99
120
  manifest.path = paths.wrapperPath;
100
- manifest.allowed_origins = [`chrome-extension://${resolvedExtensionId}/`];
121
+ if (browser === "firefox") {
122
+ delete manifest.allowed_origins;
123
+ manifest.allowed_extensions = [FIREFOX_EXTENSION_ID];
124
+ } else {
125
+ manifest.allowed_origins = [`chrome-extension://${resolvedExtensionId}/`];
126
+ }
101
127
  mkdirSync(dirname(paths.nativeManifestPath), { recursive: true });
102
128
  writeFileSync(paths.nativeManifestPath, `${JSON.stringify(manifest, null, 2)}
103
129
  `);
104
130
  return {
105
131
  extensionId: resolvedExtensionId,
132
+ browser,
106
133
  nodePath: resolvedNodePath,
107
134
  tokenPath: paths.tokenPath,
108
135
  ...paths
@@ -119,6 +146,21 @@ var CLI_CONNECTOR_ROOT_CANDIDATES = [
119
146
  var FULL_SUPPORT_CHROME_FEATURES = [
120
147
  ...new Set(Object.values(REQUIRED_CHROME_CONNECTOR_FEATURES).flat())
121
148
  ].sort();
149
+ var FIREFOX_UNAVAILABLE_FEATURES = ["browser_debug", "file_upload"];
150
+ function resolveConnectorBrowser(extensionId) {
151
+ if (!extensionId) return null;
152
+ if (extensionId === NOLO_FIREFOX_CONNECTOR_EXTENSION_ID) return "firefox";
153
+ if (NOLO_CONNECTOR_EXTENSION_IDS.includes(extensionId)) return "chrome";
154
+ return null;
155
+ }
156
+ function expectedFeaturesForBrowser(browser) {
157
+ return browser === "firefox" ? FULL_SUPPORT_CHROME_FEATURES.filter(
158
+ (feature) => !FIREFOX_UNAVAILABLE_FEATURES.includes(feature)
159
+ ) : FULL_SUPPORT_CHROME_FEATURES;
160
+ }
161
+ function browserLabel(browser) {
162
+ return browser === "firefox" ? "Firefox" : browser === "chrome" ? "Chrome" : "browser";
163
+ }
122
164
  function pickCliConnectorRoot(candidates) {
123
165
  for (const candidate of candidates) {
124
166
  if (existsSync2(resolve2(candidate, "extension", "manifest.json"))) return candidate;
@@ -233,9 +275,13 @@ async function probeConnectorRpc(requestChrome) {
233
275
  }
234
276
  }
235
277
  function resolveStatusNextStep(report) {
278
+ const targetBrowser = report.rpc.browser ?? report.nativeHost.browser;
279
+ const installCmd = targetBrowser === "firefox" ? "nolo chrome install --browser firefox" : "nolo chrome install";
280
+ const connectedLabel = browserLabel(targetBrowser);
281
+ const browserText = connectedLabel === "browser" ? "the browser" : connectedLabel;
236
282
  if (!report.connectorRoot) {
237
283
  if (report.rpc.online && report.rpc.protocolVersion === report.rpc.expectedProtocolVersion) {
238
- return "Chrome connector is online, but this CLI cannot see a connector checkout, so `nolo chrome install` / manifest checks are unavailable here. Set NOLO_CHROME_CONNECTOR_ROOT (or run the CLI from a repo checkout) to enable them.";
284
+ return "The Nolo Browser Connector is online, but this CLI cannot see a connector checkout, so `nolo chrome install` / manifest checks are unavailable here. Set NOLO_CHROME_CONNECTOR_ROOT (or run the CLI from a repo checkout) to enable them.";
239
285
  }
240
286
  return "Run the CLI from a repo checkout that contains packages/desktop-chrome-connector, or set NOLO_CHROME_CONNECTOR_ROOT to one, then rerun `nolo chrome status`.";
241
287
  }
@@ -243,20 +289,20 @@ function resolveStatusNextStep(report) {
243
289
  return `This platform has no supported native messaging host install (Chrome looks the host up through a registry value on Windows), so non-interactive install is not available: ${report.nativeHost.platformError ?? "unsupported platform"}`;
244
290
  }
245
291
  if (!report.nativeHost.installed || !report.token.present) {
246
- return "nolo chrome install";
292
+ return installCmd;
247
293
  }
248
294
  if (!report.nativeHost.wrapperPathMatches || !report.nativeHost.allowedOriginMatches) {
249
295
  const installedWrapperPath = report.nativeHost.installedWrapperPath;
250
296
  if (!report.nativeHost.wrapperPathMatches && installedWrapperPath && installedWrapperPath !== report.nativeHost.wrapperPath && existsSync2(installedWrapperPath)) {
251
- return `Native host is installed for a different checkout (${installedWrapperPath}); this CLI is looking at ${report.connectorRoot}. Run \`nolo chrome status\` from the checkout that installed it, or run \`nolo chrome install\` from here only if Chrome should switch to this one.`;
297
+ return `Native host is installed for a different checkout (${installedWrapperPath}); this CLI is looking at ${report.connectorRoot}. Run \`nolo chrome status\` from the checkout that installed it, or run \`${installCmd}\` from here only if ${browserText} should switch to this one.`;
252
298
  }
253
- return "nolo chrome install (the installed manifest does not point at this checkout's wrapper / extension id, which Chrome silently ignores)";
299
+ return `${installCmd} (the installed manifest does not point at this checkout's wrapper / extension id, which ${browserText} silently ignores)`;
254
300
  }
255
301
  if (!report.rpc.online) {
256
- return `Load the unpacked extension from ${report.extension.path} in chrome://extensions (Developer mode) or install it from the Chrome Web Store, then rerun \`nolo chrome status\`.`;
302
+ return `Load the unpacked extension from ${report.extension.path} in chrome://extensions (Chrome) or about:debugging#/runtime/this-firefox (Firefox), or install the Nolo Browser Connector from https://nolo.chat/downloads, then rerun \`nolo chrome status\`.`;
257
303
  }
258
- if (report.rpc.extensionId && report.rpc.extensionId !== report.extension.expectedId) {
259
- return `The connected extension (${report.rpc.extensionId}) is not the connector at ${report.extension.path}; remove the other copy and rerun \`nolo chrome status\`.`;
304
+ if (report.rpc.extensionId && report.rpc.browser === null) {
305
+ return `The connected extension (${report.rpc.extensionId}) is not a recognized Nolo Browser Connector build; reload it (\`nolo chrome reload\`) or remove the other copy, then rerun \`nolo chrome status\`.`;
260
306
  }
261
307
  if (report.rpc.protocolVersion !== report.rpc.expectedProtocolVersion) {
262
308
  return `nolo chrome reload (the running extension does not speak protocol ${report.rpc.expectedProtocolVersion}; a reload restarts the worker with the files on disk)`;
@@ -264,7 +310,7 @@ function resolveStatusNextStep(report) {
264
310
  if (report.rpc.missingFeatures.length > 0) {
265
311
  return `nolo chrome reload (the running extension is missing ${report.rpc.missingFeatures.join(", ")}); if that persists, the checkout's extension is older than the CLI expects.`;
266
312
  }
267
- return "Chrome connector is online: chrome_* tools execute against this Chrome profile.";
313
+ return `The Nolo Browser Connector is online (${connectedLabel}): connector tools execute against this ${connectedLabel} profile.`;
268
314
  }
269
315
  async function buildChromeConnectorStatus(args = {}) {
270
316
  const env = args.env ?? process.env;
@@ -295,7 +341,8 @@ async function buildChromeConnectorStatus(args = {}) {
295
341
  wrapperPath: null,
296
342
  installedWrapperPath: null,
297
343
  wrapperPathMatches: false,
298
- allowedOriginMatches: false
344
+ allowedOriginMatches: false,
345
+ browser: null
299
346
  },
300
347
  token: { path: null, present: false },
301
348
  rpc: {
@@ -303,6 +350,7 @@ async function buildChromeConnectorStatus(args = {}) {
303
350
  extensionId: null,
304
351
  protocolVersion: null,
305
352
  features: [],
353
+ browser: null,
306
354
  missingFeatures: [...FULL_SUPPORT_CHROME_FEATURES],
307
355
  expectedProtocolVersion: NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION
308
356
  },
@@ -314,19 +362,48 @@ async function buildChromeConnectorStatus(args = {}) {
314
362
  report.rpc.extensionId = probe.extensionId;
315
363
  report.rpc.protocolVersion = probe.protocolVersion;
316
364
  report.rpc.features = probe.features;
317
- report.rpc.missingFeatures = FULL_SUPPORT_CHROME_FEATURES.filter(
365
+ report.rpc.browser = probe.online ? resolveConnectorBrowser(probe.extensionId) ?? (probe.extensionId === expectedId ? "chrome" : null) : null;
366
+ report.rpc.missingFeatures = expectedFeaturesForBrowser(report.rpc.browser).filter(
318
367
  (feature) => !probe.features.includes(feature)
319
368
  );
320
369
  if (!probe.online) report.rpc.error = probe.error;
321
370
  if (!connectorRoot) {
322
371
  if (rootError) report.connectorRootError = rootError;
323
- report.ok = report.rpc.online && probe.extensionId === expectedId && probe.protocolVersion === NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION && report.rpc.missingFeatures.length === 0;
372
+ report.nativeHost.browser = report.rpc.browser;
373
+ report.ok = report.rpc.online && report.rpc.browser !== null && probe.protocolVersion === NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION && report.rpc.missingFeatures.length === 0;
324
374
  report.nextStep = resolveStatusNextStep(report);
325
375
  return report;
326
376
  }
377
+ let manifestBrowser = report.rpc.browser === "firefox" ? "firefox" : "chrome";
378
+ if (!report.rpc.browser) {
379
+ try {
380
+ const chromeManifestPath = resolveNativeHostInstallPaths({
381
+ home,
382
+ connectorRoot,
383
+ platform,
384
+ browser: "chrome"
385
+ }).nativeManifestPath;
386
+ const firefoxManifestPath = resolveNativeHostInstallPaths({
387
+ home,
388
+ connectorRoot,
389
+ platform,
390
+ browser: "firefox"
391
+ }).nativeManifestPath;
392
+ if (!existsSync2(chromeManifestPath) && existsSync2(firefoxManifestPath)) {
393
+ manifestBrowser = "firefox";
394
+ }
395
+ } catch {
396
+ }
397
+ }
398
+ report.nativeHost.browser = manifestBrowser;
327
399
  let paths = null;
328
400
  try {
329
- paths = resolveNativeHostInstallPaths({ home, connectorRoot, platform });
401
+ paths = resolveNativeHostInstallPaths({
402
+ home,
403
+ connectorRoot,
404
+ platform,
405
+ browser: manifestBrowser
406
+ });
330
407
  } catch (error) {
331
408
  report.nativeHost.supported = false;
332
409
  report.nativeHost.platformError = toErrorMessage(error);
@@ -340,8 +417,7 @@ async function buildChromeConnectorStatus(args = {}) {
340
417
  report.nativeHost.installed = installedManifest !== null;
341
418
  report.nativeHost.installedWrapperPath = typeof installedManifest?.path === "string" ? installedManifest.path : null;
342
419
  report.nativeHost.wrapperPathMatches = report.nativeHost.installedWrapperPath === paths.wrapperPath;
343
- const expectedOrigin = `chrome-extension://${expectedId}/`;
344
- report.nativeHost.allowedOriginMatches = Array.isArray(installedManifest?.allowed_origins) && installedManifest.allowed_origins.includes(expectedOrigin);
420
+ report.nativeHost.allowedOriginMatches = manifestBrowser === "firefox" ? Array.isArray(installedManifest?.allowed_extensions) && installedManifest.allowed_extensions.includes(NOLO_FIREFOX_CONNECTOR_EXTENSION_ID) : Array.isArray(installedManifest?.allowed_origins) && installedManifest.allowed_origins.includes(`chrome-extension://${expectedId}/`);
345
421
  if (existsSync2(paths.tokenPath)) {
346
422
  try {
347
423
  report.token.present = readFileSync2(paths.tokenPath, "utf8").trim().length > 0;
@@ -349,7 +425,7 @@ async function buildChromeConnectorStatus(args = {}) {
349
425
  report.token.present = false;
350
426
  }
351
427
  }
352
- report.ok = report.nativeHost.supported && report.nativeHost.installed && report.nativeHost.wrapperPathMatches && report.nativeHost.allowedOriginMatches && report.token.present && probe.online && probe.extensionId === expectedId && probe.protocolVersion === NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION && report.rpc.missingFeatures.length === 0;
428
+ report.ok = report.nativeHost.supported && report.nativeHost.installed && report.nativeHost.wrapperPathMatches && report.nativeHost.allowedOriginMatches && report.token.present && probe.online && report.rpc.browser !== null && probe.protocolVersion === NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION && report.rpc.missingFeatures.length === 0;
353
429
  report.nextStep = resolveStatusNextStep(report);
354
430
  return report;
355
431
  }
@@ -357,7 +433,7 @@ function yesNo(value) {
357
433
  return value ? "ok" : "mismatch";
358
434
  }
359
435
  function formatChromeConnectorStatus(report) {
360
- const lines = ["Nolo Chrome connector"];
436
+ const lines = ["Nolo Browser Connector"];
361
437
  lines.push(
362
438
  ` connector source : ${report.connectorRoot ?? "(not found)"}`
363
439
  );
@@ -377,7 +453,7 @@ function formatChromeConnectorStatus(report) {
377
453
  const rpc = report.rpc;
378
454
  if (rpc.online) {
379
455
  lines.push(
380
- ` RPC : online extension ${rpc.extensionId ?? "unknown"} protocolVersion ${rpc.protocolVersion ?? "unknown"} features ${rpc.features.length > 0 ? rpc.features.join(", ") : "(none)"}`
456
+ ` RPC : online browser ${rpc.browser ?? "unrecognized"} extension ${rpc.extensionId ?? "unknown"} protocolVersion ${rpc.protocolVersion ?? "unknown"} features ${rpc.features.length > 0 ? rpc.features.join(", ") : "(none)"}`
381
457
  );
382
458
  } else {
383
459
  lines.push(
@@ -406,9 +482,25 @@ async function runChromeStatusCommand(args, deps = {}) {
406
482
  }
407
483
  return report.ok ? 0 : 1;
408
484
  }
485
+ function readBrowserOption(args) {
486
+ const equalsForm = args.find((arg) => arg.startsWith("--browser="));
487
+ const index = args.indexOf("--browser");
488
+ const raw = equalsForm !== void 0 ? equalsForm.slice("--browser=".length) : index >= 0 ? args[index + 1] : void 0;
489
+ if (raw === void 0) return "chrome";
490
+ const value = raw.trim();
491
+ if (value === "chrome" || value === "firefox") return value;
492
+ return null;
493
+ }
409
494
  async function runChromeInstallCommand(args, deps = {}) {
410
495
  const env = deps.env ?? process.env;
411
496
  const output = deps.output ?? process.stdout;
497
+ const browser = readBrowserOption(args);
498
+ if (browser === null) {
499
+ output.write(
500
+ '[nolo] Chrome native host install failed: --browser must be "chrome" or "firefox".\n'
501
+ );
502
+ return 1;
503
+ }
412
504
  const install = deps.installNativeHost ?? installNativeHostManifest;
413
505
  let connectorRoot;
414
506
  try {
@@ -432,6 +524,7 @@ async function runChromeInstallCommand(args, deps = {}) {
432
524
  result = install({
433
525
  home: deps.home ?? env.HOME ?? "",
434
526
  connectorRoot,
527
+ browser,
435
528
  ...deps.platform ? { platform: deps.platform } : {},
436
529
  ...deps.nodePath ? { nodePath: deps.nodePath } : {}
437
530
  });
@@ -446,12 +539,12 @@ async function runChromeInstallCommand(args, deps = {}) {
446
539
  } else {
447
540
  output.write(
448
541
  [
449
- "Nolo Chrome connector native host installed.",
542
+ `Nolo Browser Connector native host installed (${browser}).`,
450
543
  ` manifest : ${result.nativeManifestPath}`,
451
544
  ` wrapper : ${result.wrapperPath} -> ${result.nodePath}`,
452
545
  ` token : ${result.tokenPath} (an existing token is kept, so reruns are idempotent)`,
453
546
  ` extension: ${result.extensionId}`,
454
- `Next step: load the unpacked extension from ${resolve2(connectorRoot, "extension")} in chrome://extensions (Developer mode) or install it from the Chrome Web Store, then run \`nolo chrome status\`.`,
547
+ `Next step: load the unpacked extension from ${resolve2(connectorRoot, "extension")} in ` + (browser === "firefox" ? "about:debugging#/runtime/this-firefox, or install the signed Nolo Browser Connector add-on from https://nolo.chat/downloads, then run `nolo chrome status`." : "chrome://extensions (Developer mode), or install the Nolo Browser Connector from https://nolo.chat/downloads (Chrome or Firefox), then run `nolo chrome status`."),
455
548
  ""
456
549
  ].join("\n")
457
550
  );
@@ -480,7 +573,7 @@ The connector service worker restarts within ~1s; verify with \`nolo chrome stat
480
573
  `);
481
574
  if (code === "CHROME_CONNECTOR_UNAVAILABLE") {
482
575
  output.write(
483
- "The native host is not reachable: load the unpacked connector extension in chrome://extensions (or start Chrome), then rerun `nolo chrome reload`.\n"
576
+ "The native host is not reachable: open Chrome or Firefox with the Nolo Browser Connector extension enabled, or install it from https://nolo.chat/downloads (or load the unpacked connector extension in chrome://extensions), then rerun `nolo chrome reload`.\n"
484
577
  );
485
578
  }
486
579
  return 1;
@@ -488,11 +581,14 @@ The connector service worker restarts within ~1s; verify with \`nolo chrome stat
488
581
  }
489
582
  export {
490
583
  CLI_CONNECTOR_ROOT_CANDIDATES,
584
+ FIREFOX_UNAVAILABLE_FEATURES,
491
585
  FULL_SUPPORT_CHROME_FEATURES,
492
586
  buildChromeConnectorStatus,
493
587
  detectWorktreeCheckout,
588
+ expectedFeaturesForBrowser,
494
589
  formatChromeConnectorStatus,
495
590
  resolveCliConnectorRoot,
591
+ resolveConnectorBrowser,
496
592
  runChromeInstallCommand,
497
593
  runChromeReloadCommand,
498
594
  runChromeStatusCommand
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createChromeConnectorClient
3
- } from "./chunk-SH43IESU.js";
3
+ } from "./chunk-YUNJN43V.js";
4
4
  import {
5
5
  toErrorMessage
6
6
  } from "./chunk-HNMXYYJR.js";
@@ -197,8 +197,8 @@ var CHROME_OPS_SUBCOMMANDS = {
197
197
  };
198
198
  function renderChromeOpsHelp() {
199
199
  const lines = [
200
- "Operate the user's Chrome through the Nolo Chrome connector (the desktop bridge;",
201
- "the same RPC the chrome_* agent tools use).",
200
+ "Operate the user's browser (Chrome or Firefox) through the Nolo Browser Connector",
201
+ "(the desktop bridge; the same RPC the browser_* agent tools use \u2014 legacy `chrome_*` names still work).",
202
202
  "",
203
203
  "Usage:",
204
204
  " nolo chrome <subcommand> [flags]",
@@ -213,6 +213,7 @@ function renderChromeOpsHelp() {
213
213
  " preferred over --selector); --selector takes a CSS selector.",
214
214
  " Actions the connector classifies as irreversible (Submit / Delete / Pay ...)",
215
215
  " are refused with CONFIRMATION_REQUIRED \u2014 ask the user to perform them.",
216
+ " read-console / read-network / upload work on Chrome only (Firefox lacks chrome.debugger).",
216
217
  " Every subcommand prints the connector's raw JSON result; failures exit 1.",
217
218
  " Endpoint: NOLO_CHROME_CONNECTOR_RPC_URL or http://127.0.0.1:38947/rpc."
218
219
  ];
@@ -1,19 +1,15 @@
1
1
  import {
2
- getActiveDialogKey
3
- } from "./chunk-6YTOJY35.js";
2
+ formatISO
3
+ } from "./chunk-ZRAU6T47.js";
4
4
  import {
5
- require_date_fns
6
- } from "./chunk-M76ECQRD.js";
5
+ getActiveDialogKey
6
+ } from "./chunk-BZ7NPA6G.js";
7
7
  import {
8
8
  patch,
9
9
  selectById
10
- } from "./chunk-H62HCIUP.js";
11
- import {
12
- __toESM
13
- } from "./chunk-4VNS5WPM.js";
10
+ } from "./chunk-56HJ2LAA.js";
14
11
 
15
12
  // packages/chat/dialog/actions/setDialogExtraReferencesAction.ts
16
- var import_date_fns = __toESM(require_date_fns());
17
13
  var setDialogExtraReferencesAction = async (extraReferences, thunkApi) => {
18
14
  const { dispatch, getState } = thunkApi;
19
15
  const state = getState();
@@ -33,7 +29,7 @@ var setDialogExtraReferencesAction = async (extraReferences, thunkApi) => {
33
29
  dbKey: currentDialogKey,
34
30
  changes: {
35
31
  extraReferences: extraReferences ?? [],
36
- updatedAt: (0, import_date_fns.formatISO)(/* @__PURE__ */ new Date())
32
+ updatedAt: formatISO(/* @__PURE__ */ new Date())
37
33
  }
38
34
  })
39
35
  ).unwrap();
@@ -3,7 +3,7 @@ import {
3
3
  resolvePlatformChatCompletionsEndpoint,
4
4
  resolvePlatformHostedCredentialProvider,
5
5
  resolvePlatformResponsesEndpoint
6
- } from "./chunk-GQBOR3G6.js";
6
+ } from "./chunk-7KVZ5LDQ.js";
7
7
  import {
8
8
  CLI_PROVIDER_VALUES
9
9
  } from "./chunk-W7XHHYWM.js";
@@ -11,7 +11,7 @@ import {
11
11
  CLIENT_VERSION_TOO_OLD_CODE,
12
12
  buildClientVersionGateErrorDetail,
13
13
  evaluatePlatformHostedClientVersionGate
14
- } from "./chunk-Q67DOFOO.js";
14
+ } from "./chunk-Y3PMXGLH.js";
15
15
  import {
16
16
  asTrimmedLowercaseString
17
17
  } from "./chunk-QSJ3HFEF.js";
@@ -164,10 +164,28 @@ function resolveProviderAuthHeaderName(args) {
164
164
  if (/xiaomimimo\.com/i.test(args.endpoint)) return "api-key";
165
165
  return "Authorization";
166
166
  }
167
+ var OPENCODE_GO_ENDPOINT_RE = /^https?:\/\/opencode\.ai\/zen\/go\//i;
168
+ var OPENCODE_SESSION_HEADER = "x-opencode-session";
169
+ var OPENCODE_USER_AGENT = "nolo-agent/1.0";
170
+ var PROCESS_FALLBACK_SESSION_ID = `nolo-${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;
171
+ function isOpenCodeGoEndpoint(endpoint) {
172
+ return typeof endpoint === "string" && OPENCODE_GO_ENDPOINT_RE.test(endpoint.trim());
173
+ }
174
+ function buildProviderSessionHeaders(args) {
175
+ if (!isOpenCodeGoEndpoint(args.endpoint)) return {};
176
+ return {
177
+ [OPENCODE_SESSION_HEADER]: args.sessionId?.trim() || PROCESS_FALLBACK_SESSION_ID,
178
+ "User-Agent": OPENCODE_USER_AGENT
179
+ };
180
+ }
167
181
  function buildProviderAuthHeaders(args) {
168
- if (!args.apiKey) return {};
182
+ const sessionHeaders = buildProviderSessionHeaders(args);
183
+ if (!args.apiKey) return sessionHeaders;
169
184
  const headerName = resolveProviderAuthHeaderName(args);
170
- return headerName.toLowerCase() === "authorization" ? { Authorization: `Bearer ${args.apiKey}` } : { [headerName]: args.apiKey };
185
+ return {
186
+ ...sessionHeaders,
187
+ ...headerName.toLowerCase() === "authorization" ? { Authorization: `Bearer ${args.apiKey}` } : { [headerName]: args.apiKey }
188
+ };
171
189
  }
172
190
  async function buildProviderExecutionPlan(args) {
173
191
  const { agentConfig, env } = args;
@@ -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-ODAPITXL.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,12 +1,12 @@
1
- import {
2
- selectCurrentServer
3
- } from "./chunk-AFUORTY4.js";
4
1
  import {
5
2
  patch
6
- } from "./chunk-H62HCIUP.js";
3
+ } from "./chunk-56HJ2LAA.js";
4
+ import {
5
+ selectCurrentServer
6
+ } from "./chunk-NWENLDMM.js";
7
7
  import {
8
8
  getIsDesktopApp
9
- } from "./chunk-QOKAKDPE.js";
9
+ } from "./chunk-HIM3FCLF.js";
10
10
  import {
11
11
  selectIdentityToken
12
12
  } from "./chunk-SEJ5OS6F.js";