@ashx-j/lunr 0.2.23 → 0.2.25

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 (272) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/README.md +10 -10
  3. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  4. package/dist/builtin-extensions/ashxj-tui.js +2 -2
  5. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  6. package/dist/builtin-extensions/lunr-plan-tools.d.ts +7 -7
  7. package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
  8. package/dist/builtin-extensions/lunr-plan-tools.js +12 -12
  9. package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
  10. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  11. package/dist/builtin-extensions/pi-intercom/index.js +2 -0
  12. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  13. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  14. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +1 -0
  15. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  16. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  17. package/dist/builtin-extensions/pi-mcp-adapter/index.js +1 -1
  18. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  19. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -4
  23. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +6 -4
  25. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts +2 -0
  27. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +6 -3
  29. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  31. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +7 -2
  32. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +2 -0
  34. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +4 -0
  36. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  37. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  40. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +1 -0
  41. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +5 -1
  43. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  45. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +3 -2
  46. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +19 -0
  49. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +2 -0
  55. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +17 -15
  57. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +3 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +2 -2
  63. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +1 -0
  65. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  67. package/dist/core/agent-session.d.ts +1 -1
  68. package/dist/core/agent-session.d.ts.map +1 -1
  69. package/dist/core/agent-session.js +5 -4
  70. package/dist/core/agent-session.js.map +1 -1
  71. package/dist/core/browser/schema.d.ts +1 -1
  72. package/dist/core/browser/schema.d.ts.map +1 -1
  73. package/dist/core/browser/schema.js +1 -1
  74. package/dist/core/browser/schema.js.map +1 -1
  75. package/dist/core/catalog-cache-scope.d.ts.map +1 -1
  76. package/dist/core/catalog-cache-scope.js +3 -1
  77. package/dist/core/catalog-cache-scope.js.map +1 -1
  78. package/dist/core/model-runtime.d.ts.map +1 -1
  79. package/dist/core/model-runtime.js +3 -2
  80. package/dist/core/model-runtime.js.map +1 -1
  81. package/dist/core/permissions.d.ts +16 -23
  82. package/dist/core/permissions.d.ts.map +1 -1
  83. package/dist/core/permissions.js +66 -141
  84. package/dist/core/permissions.js.map +1 -1
  85. package/dist/core/plan-mode.d.ts +10 -12
  86. package/dist/core/plan-mode.d.ts.map +1 -1
  87. package/dist/core/plan-mode.js +16 -18
  88. package/dist/core/plan-mode.js.map +1 -1
  89. package/dist/core/runtime-bridges.d.ts.map +1 -1
  90. package/dist/core/runtime-bridges.js +2 -0
  91. package/dist/core/runtime-bridges.js.map +1 -1
  92. package/dist/core/sdk.d.ts.map +1 -1
  93. package/dist/core/sdk.js +13 -6
  94. package/dist/core/sdk.js.map +1 -1
  95. package/dist/core/session-manager.d.ts.map +1 -1
  96. package/dist/core/session-manager.js +9 -2
  97. package/dist/core/session-manager.js.map +1 -1
  98. package/dist/core/settings-manager.d.ts +9 -1
  99. package/dist/core/settings-manager.d.ts.map +1 -1
  100. package/dist/core/settings-manager.js +40 -1
  101. package/dist/core/settings-manager.js.map +1 -1
  102. package/dist/core/slash-commands.d.ts.map +1 -1
  103. package/dist/core/slash-commands.js +4 -4
  104. package/dist/core/slash-commands.js.map +1 -1
  105. package/dist/core/subagent-permission-inherit.d.ts +6 -10
  106. package/dist/core/subagent-permission-inherit.d.ts.map +1 -1
  107. package/dist/core/subagent-permission-inherit.js +14 -14
  108. package/dist/core/subagent-permission-inherit.js.map +1 -1
  109. package/dist/core/system-prompt.d.ts +2 -0
  110. package/dist/core/system-prompt.d.ts.map +1 -1
  111. package/dist/core/system-prompt.js +9 -4
  112. package/dist/core/system-prompt.js.map +1 -1
  113. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  114. package/dist/gateway/adapters/discord.js +3 -8
  115. package/dist/gateway/adapters/discord.js.map +1 -1
  116. package/dist/gateway/adapters/telegram.d.ts.map +1 -1
  117. package/dist/gateway/adapters/telegram.js +7 -0
  118. package/dist/gateway/adapters/telegram.js.map +1 -1
  119. package/dist/gateway/agent-bridge.d.ts +4 -1
  120. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  121. package/dist/gateway/agent-bridge.js +57 -17
  122. package/dist/gateway/agent-bridge.js.map +1 -1
  123. package/dist/gateway/approval.d.ts +2 -6
  124. package/dist/gateway/approval.d.ts.map +1 -1
  125. package/dist/gateway/approval.js +3 -7
  126. package/dist/gateway/approval.js.map +1 -1
  127. package/dist/gateway/buttons.d.ts.map +1 -1
  128. package/dist/gateway/buttons.js +29 -19
  129. package/dist/gateway/buttons.js.map +1 -1
  130. package/dist/gateway/commands.d.ts +2 -0
  131. package/dist/gateway/commands.d.ts.map +1 -1
  132. package/dist/gateway/commands.js +39 -18
  133. package/dist/gateway/commands.js.map +1 -1
  134. package/dist/gateway/config.d.ts +1 -0
  135. package/dist/gateway/config.d.ts.map +1 -1
  136. package/dist/gateway/config.js +2 -0
  137. package/dist/gateway/config.js.map +1 -1
  138. package/dist/gateway/cron.d.ts +1 -1
  139. package/dist/gateway/cron.d.ts.map +1 -1
  140. package/dist/gateway/cron.js +2 -2
  141. package/dist/gateway/cron.js.map +1 -1
  142. package/dist/gateway/index.d.ts.map +1 -1
  143. package/dist/gateway/index.js +26 -26
  144. package/dist/gateway/index.js.map +1 -1
  145. package/dist/gateway/mobile-commands.d.ts.map +1 -1
  146. package/dist/gateway/mobile-commands.js +15 -14
  147. package/dist/gateway/mobile-commands.js.map +1 -1
  148. package/dist/gateway/presenter.d.ts +12 -1
  149. package/dist/gateway/presenter.d.ts.map +1 -1
  150. package/dist/gateway/presenter.js +146 -48
  151. package/dist/gateway/presenter.js.map +1 -1
  152. package/dist/gateway/router.d.ts +5 -5
  153. package/dist/gateway/router.d.ts.map +1 -1
  154. package/dist/gateway/router.js +96 -42
  155. package/dist/gateway/router.js.map +1 -1
  156. package/dist/gateway/service.d.ts.map +1 -1
  157. package/dist/gateway/service.js +13 -4
  158. package/dist/gateway/service.js.map +1 -1
  159. package/dist/gateway/setup.d.ts +5 -0
  160. package/dist/gateway/setup.d.ts.map +1 -1
  161. package/dist/gateway/setup.js +98 -42
  162. package/dist/gateway/setup.js.map +1 -1
  163. package/dist/gateway/stream.d.ts +6 -5
  164. package/dist/gateway/stream.d.ts.map +1 -1
  165. package/dist/gateway/stream.js +24 -11
  166. package/dist/gateway/stream.js.map +1 -1
  167. package/dist/main.d.ts.map +1 -1
  168. package/dist/main.js +1 -2
  169. package/dist/main.js.map +1 -1
  170. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  171. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  172. package/dist/modes/interactive/components/settings-selector.js +23 -3
  173. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  174. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  175. package/dist/modes/interactive/components/thinking-tail.js +2 -2
  176. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  177. package/dist/modes/interactive/components/tool-execution.d.ts +1 -0
  178. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  179. package/dist/modes/interactive/components/tool-execution.js +12 -2
  180. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  181. package/dist/modes/interactive/interactive-mode.d.ts +1 -2
  182. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  183. package/dist/modes/interactive/interactive-mode.js +76 -90
  184. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  185. package/dist/node-runtime/{agent-session-services-GZVSOGYR.js → agent-session-services-YXXFCP5J.js} +12 -12
  186. package/dist/node-runtime/{builtin-extensions-QVCXNQT4.js → builtin-extensions-ZLAX7TUH.js} +3 -3
  187. package/dist/node-runtime/{chunk-W64JC4E7.js → chunk-2HHLJWGD.js} +3 -87
  188. package/dist/node-runtime/{chunk-VWCE2HSZ.js → chunk-2HMIRK7W.js} +4 -4
  189. package/dist/node-runtime/{chunk-XLTL257W.js → chunk-2KIPT4HJ.js} +5 -1
  190. package/dist/node-runtime/{chunk-RIR5EDDJ.js → chunk-3XPLBUEM.js} +17 -12
  191. package/dist/node-runtime/{chunk-QAZOULTU.js → chunk-6XL67VVY.js} +40 -6
  192. package/dist/node-runtime/chunk-7S3T6YEA.js +97 -0
  193. package/dist/node-runtime/{chunk-R3K2F5GI.js → chunk-B4HP6ZWM.js} +2 -0
  194. package/dist/node-runtime/{chunk-TQGPP4SC.js → chunk-CDVHZOOK.js} +1 -1
  195. package/dist/node-runtime/{chunk-YJMMG7C6.js → chunk-DSIKTUPW.js} +1 -1
  196. package/dist/node-runtime/{chunk-LFZDVKSP.js → chunk-E4D3IGP2.js} +41 -25
  197. package/dist/node-runtime/{chunk-OFKSVRV7.js → chunk-GYIXXQAO.js} +1 -1
  198. package/dist/node-runtime/{chunk-BX2RB477.js → chunk-HFVZUPFJ.js} +1 -1
  199. package/dist/node-runtime/{chunk-AZJHNQKQ.js → chunk-I54LGHWM.js} +1 -1
  200. package/dist/node-runtime/{chunk-YHQ3NBB3.js → chunk-IJIFHRTB.js} +20 -18
  201. package/dist/node-runtime/{chunk-GS66LV4M.js → chunk-KJ6DWS3K.js} +4 -4
  202. package/dist/node-runtime/{chunk-HPUP7E4T.js → chunk-KWIYUUZK.js} +68 -42
  203. package/dist/node-runtime/{chunk-TVJUOJZJ.js → chunk-LQP3RB67.js} +184 -1527
  204. package/dist/node-runtime/{chunk-VSELYKWU.js → chunk-LWYIVUGV.js} +2 -1
  205. package/dist/node-runtime/{chunk-JHYKXIMM.js → chunk-MPKSOJBT.js} +1 -1
  206. package/dist/node-runtime/{chunk-GMHJCCEN.js → chunk-NRKGMJYU.js} +4 -1
  207. package/dist/node-runtime/{chunk-CSUZVNYE.js → chunk-OVX6X377.js} +10 -6
  208. package/dist/node-runtime/{chunk-DD5YWFSJ.js → chunk-QTU6AKNJ.js} +130 -65
  209. package/dist/node-runtime/{chunk-LLUIPGDR.js → chunk-RC7DMV45.js} +110 -77
  210. package/dist/node-runtime/{chunk-UWPJL22I.js → chunk-SLVOAQOY.js} +15 -4
  211. package/dist/node-runtime/{chunk-EKVFP6YF.js → chunk-TORR5XBV.js} +17 -16
  212. package/dist/node-runtime/{chunk-UP2XBVH5.js → chunk-UOEDI7RP.js} +1 -1
  213. package/dist/node-runtime/{chunk-DQMGU675.js → chunk-VQFSUJJG.js} +20 -17
  214. package/dist/node-runtime/{chunk-X3URCYCU.js → chunk-WF7PGWRZ.js} +14 -14
  215. package/dist/node-runtime/chunk-YCUZEGJG.js +1361 -0
  216. package/dist/node-runtime/{chunk-5D7LC2ZQ.js → chunk-ZXSGTGJ6.js} +54 -85
  217. package/dist/node-runtime/cli-runtime.js +1 -1
  218. package/dist/node-runtime/{command-PDVTBRWA.js → command-6WDOYKS6.js} +5 -5
  219. package/dist/node-runtime/{commands-KAMO2T6P.js → commands-NZLSOHPE.js} +2 -2
  220. package/dist/node-runtime/{commands-XDCFGIGW.js → commands-QC6VUZJQ.js} +9 -9
  221. package/dist/node-runtime/{config-RORQUQFG.js → config-D4QUPAHX.js} +1 -1
  222. package/dist/node-runtime/{direct-tool-executor-YAVOLDFY.js → direct-tool-executor-77GW4F5P.js} +3 -3
  223. package/dist/node-runtime/{export-html-KSOIMVPI.js → export-html-VM4J2MNR.js} +1 -1
  224. package/dist/node-runtime/{gateway-AYWM5DIO.js → gateway-INAYBF4Q.js} +141 -85
  225. package/dist/node-runtime/index.js +23 -21
  226. package/dist/node-runtime/{init-X2LIUB2H.js → init-HS6NQXSK.js} +2 -2
  227. package/dist/node-runtime/{install-cli-3BO4MMQ6.js → install-cli-KL4UDDAD.js} +3 -3
  228. package/dist/node-runtime/{interactive-mode-4MFRKAHG.js → interactive-mode-Z5M7WYYZ.js} +14 -14
  229. package/dist/node-runtime/{interactive-view-TUZHCQM3.js → interactive-view-NGFAMHPW.js} +2 -2
  230. package/dist/node-runtime/{lunr-browser-RYFIIVJN.js → lunr-browser-IR7TL3J7.js} +4 -4
  231. package/dist/node-runtime/{lunr-cron-YWXEPZMQ.js → lunr-cron-LWIZJM2N.js} +8 -8
  232. package/dist/node-runtime/main.js +19 -18
  233. package/dist/node-runtime/{mobile-commands-LVHDAUDP.js → mobile-commands-J7OJEKFO.js} +6 -6
  234. package/dist/node-runtime/{model-runtime-PLQKAG4B.js → model-runtime-OO5HFLWE.js} +1 -1
  235. package/dist/node-runtime/{package-manager-cli-6GT3Z3CK.js → package-manager-cli-VYZM5WHN.js} +10 -8
  236. package/dist/node-runtime/{pi-intercom-HBPK5HSJ.js → pi-intercom-QM53RLTS.js} +2 -0
  237. package/dist/node-runtime/{pi-mcp-adapter-E6WULBKF.js → pi-mcp-adapter-5UKBZP44.js} +7 -6
  238. package/dist/node-runtime/{pi-subagents-CDWK2AKY.js → pi-subagents-DNY7EAIG.js} +23 -13
  239. package/dist/node-runtime/{proxy-modes-OSQCWRBI.js → proxy-modes-LGEUYD7R.js} +3 -3
  240. package/dist/node-runtime/rpc-entry.js +19 -18
  241. package/dist/node-runtime/{runtime-bridges-3XUQ46XW.js → runtime-bridges-VRDDR73P.js} +8 -1
  242. package/dist/node-runtime/{service-ISSP6VHE.js → service-MDQIPQ26.js} +1 -1
  243. package/dist/node-runtime/{session-handoff-HC7R5E24.js → session-handoff-GWARVEWT.js} +2 -2
  244. package/dist/node-runtime/{session-manager-CFN4UFM2.js → session-manager-JB5J6XBN.js} +1 -1
  245. package/dist/node-runtime/{settings-manager-6VEMXRDL.js → settings-manager-J4SPQPDJ.js} +10 -7
  246. package/dist/node-runtime/setup-CQ2NLVK5.js +214 -0
  247. package/dist/node-runtime/{subagent-executor-M5VWB3D3.js → subagent-executor-KZZQGAKV.js} +40 -7
  248. package/dist/node-runtime/{update-cli-UVKJWRRJ.js → update-cli-GTFJC7XK.js} +4 -5
  249. package/dist/startup/interactive-view.d.ts.map +1 -1
  250. package/dist/startup/interactive-view.js +5 -1
  251. package/dist/startup/interactive-view.js.map +1 -1
  252. package/docs/browser.md +1 -1
  253. package/docs/features.md +19 -18
  254. package/docs/index.md +1 -1
  255. package/docs/keybindings.md +1 -1
  256. package/docs/providers.md +6 -2
  257. package/docs/quickstart.md +2 -2
  258. package/docs/settings.md +1 -1
  259. package/docs/usage.md +4 -4
  260. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  261. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  262. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  263. package/examples/extensions/gondolin/package-lock.json +2 -2
  264. package/examples/extensions/gondolin/package.json +1 -1
  265. package/examples/extensions/plan-mode/README.md +1 -1
  266. package/examples/extensions/sandbox/package-lock.json +2 -2
  267. package/examples/extensions/sandbox/package.json +1 -1
  268. package/examples/extensions/with-deps/package-lock.json +2 -2
  269. package/examples/extensions/with-deps/package.json +1 -1
  270. package/package.json +4 -4
  271. package/dist/node-runtime/chunk-LISUTZS3.js +0 -19
  272. package/dist/node-runtime/setup-5SR2J35A.js +0 -155
@@ -3,26 +3,32 @@ import {
3
3
  AgentBridge,
4
4
  QUEUED,
5
5
  startGatewayCron
6
- } from "./chunk-HPUP7E4T.js";
6
+ } from "./chunk-KWIYUUZK.js";
7
7
  import {
8
8
  CHAT_COMMANDS,
9
9
  botCommandSpecs,
10
10
  runChatCommand,
11
11
  sendCommandReply
12
- } from "./chunk-LFZDVKSP.js";
13
- import "./chunk-EKVFP6YF.js";
12
+ } from "./chunk-E4D3IGP2.js";
13
+ import {
14
+ resolveWithinRoots
15
+ } from "./chunk-TORR5XBV.js";
14
16
  import {
15
17
  acceptGatewayInput,
16
18
  addAllowedUser,
17
19
  bindConversation,
18
20
  conversationBinding,
21
+ gatewayEpoch,
22
+ getSession,
19
23
  handleApprovalCallback,
20
24
  handleCallback,
21
25
  invalidateGatewayDialogs,
22
26
  isAuthorized,
23
27
  isGatewayOwner,
24
28
  listSessions,
29
+ queueGatewayText,
25
30
  registerGatewayApprovalHandler,
31
+ rememberGatewayRole,
26
32
  requireGatewayOwner,
27
33
  runWithApprovalContext,
28
34
  splitMessage,
@@ -30,29 +36,29 @@ import {
30
36
  startGatewayPresenter,
31
37
  stopButtonSweeper,
32
38
  stopGatewayPresenter
33
- } from "./chunk-DD5YWFSJ.js";
39
+ } from "./chunk-QTU6AKNJ.js";
34
40
  import {
35
41
  createPairingStore
36
42
  } from "./chunk-RMQZU2YU.js";
37
43
  import {
38
44
  claimGateway
39
- } from "./chunk-UWPJL22I.js";
45
+ } from "./chunk-SLVOAQOY.js";
40
46
  import "./chunk-CJECDQKP.js";
41
- import "./chunk-TQGPP4SC.js";
47
+ import "./chunk-CDVHZOOK.js";
42
48
  import "./chunk-AD6VXAO7.js";
43
49
  import {
44
50
  isFeatureEnabled
45
- } from "./chunk-VWCE2HSZ.js";
46
- import "./chunk-OFKSVRV7.js";
51
+ } from "./chunk-2HMIRK7W.js";
52
+ import "./chunk-GYIXXQAO.js";
47
53
  import "./chunk-GJ2RDBRL.js";
48
54
  import "./chunk-CGBXPL3E.js";
49
55
  import "./chunk-BBUVIEZB.js";
50
- import "./chunk-5D7LC2ZQ.js";
56
+ import "./chunk-ZXSGTGJ6.js";
51
57
  import "./chunk-M3LZLQW2.js";
52
58
  import "./chunk-KKUTQQV7.js";
53
59
  import "./chunk-CSFI6YXL.js";
54
- import "./chunk-AZJHNQKQ.js";
55
- import "./chunk-XLTL257W.js";
60
+ import "./chunk-I54LGHWM.js";
61
+ import "./chunk-2KIPT4HJ.js";
56
62
  import "./chunk-FVDOXRUD.js";
57
63
  import "./chunk-IMLCWLPI.js";
58
64
  import "./chunk-UAEOTO52.js";
@@ -61,8 +67,9 @@ import {
61
67
  gatewayConfigPath,
62
68
  loadGatewayConfig,
63
69
  platformConfigFor,
64
- resolvePlatformToken
65
- } from "./chunk-R3K2F5GI.js";
70
+ resolvePlatformToken,
71
+ saveGatewayConfig
72
+ } from "./chunk-B4HP6ZWM.js";
66
73
  import "./chunk-E24EO34J.js";
67
74
  import "./chunk-RDDAZOMU.js";
68
75
  import "./chunk-FQMM2EZ2.js";
@@ -360,8 +367,8 @@ var DiscordAdapter = class {
360
367
  if (!authorized || !isGatewayOwner(source, cfg))
361
368
  return await interaction.respond([]), !0;
362
369
  let query = String(interaction.options.getFocused()).toLowerCase(), values = [];
363
- if (interaction.commandName === "mode" && (values = ["manual", "yolo", "plan", "auto"]), this.commandSuggestions && ["thinking", "model"].includes(interaction.commandName) && (values = [...await this.commandSuggestions(source, interaction.commandName)]), interaction.commandName === "project" && (values = cfg.projectRoots ?? []), interaction.commandName === "sessions") {
364
- let { SessionManager } = await import("./session-manager-CFN4UFM2.js");
370
+ if (interaction.commandName === "mode" && (values = ["yolo", "auto", "read-only"]), this.commandSuggestions && ["thinking", "model"].includes(interaction.commandName) && (values = [...await this.commandSuggestions(source, interaction.commandName)]), interaction.commandName === "project" && (values = cfg.projectRoots ?? []), interaction.commandName === "sessions") {
371
+ let { SessionManager } = await import("./session-manager-JB5J6XBN.js");
365
372
  values = (await Promise.race([
366
373
  SessionManager.listAll(),
367
374
  new Promise((resolve) => setTimeout(() => resolve([]), 1500))
@@ -474,16 +481,12 @@ ${event.text}`,
474
481
  return null;
475
482
  try {
476
483
  let channel = await this.client.channels.fetch(id);
477
- if (this.channelCache.set(id, channel), this.channelCache.size > CHANNEL_CACHE_CAP) {
484
+ if (channel && this.channelCache.set(id, channel), this.channelCache.size > CHANNEL_CACHE_CAP) {
478
485
  let oldest = this.channelCache.keys().next().value;
479
486
  oldest !== void 0 && this.channelCache.delete(oldest);
480
487
  }
481
488
  return channel;
482
489
  } catch {
483
- if (this.channelCache.set(id, null), this.channelCache.size > CHANNEL_CACHE_CAP) {
484
- let oldest = this.channelCache.keys().next().value;
485
- oldest !== void 0 && this.channelCache.delete(oldest);
486
- }
487
490
  return null;
488
491
  }
489
492
  }
@@ -933,6 +936,10 @@ ${event.text}`,
933
936
  let result = await this.callApi("sendMessage", body);
934
937
  return { success: !0, messageId: String(result.message_id) };
935
938
  } catch (err) {
939
+ if (err instanceof TelegramApiError && err.status === 400 && body.reply_parameters !== void 0 && /message to be replied not found/i.test(err.message)) {
940
+ let { reply_parameters: _dropped, ...plain } = body;
941
+ return this.callSend(plain);
942
+ }
936
943
  if (err instanceof TelegramApiError && err.status === 400 && body.parse_mode !== void 0 && MARKDOWN_PARSE_ERROR_RE.test(err.message)) {
937
944
  let { parse_mode: _dropped, ...plain } = body;
938
945
  return this.callSend(plain);
@@ -1047,6 +1054,7 @@ var StreamConsumer = class {
1047
1054
  options;
1048
1055
  buffer = "";
1049
1056
  flushedLen = 0;
1057
+ lastPreview = "";
1050
1058
  messageId = null;
1051
1059
  lastFlushAt = 0;
1052
1060
  chain = Promise.resolve();
@@ -1059,9 +1067,9 @@ var StreamConsumer = class {
1059
1067
  push(delta) {
1060
1068
  this.buffer += delta, this.buffer.length - this.flushedLen >= this.options.threshold && this.now() - this.lastFlushAt >= this.options.intervalMs && this.schedule();
1061
1069
  }
1062
- /** Force a final flush; resolves with the FULL text (caller splits for delivery). */
1070
+ /** Wait for pending previews; final delivery belongs to the router. */
1063
1071
  async finalize() {
1064
- return this.schedule(!0), await this.chain, this.buffer;
1072
+ return await this.chain, this.buffer;
1065
1073
  }
1066
1074
  /** The platform message id of the preview, when one was successfully sent. */
1067
1075
  get sentMessageId() {
@@ -1071,12 +1079,19 @@ var StreamConsumer = class {
1071
1079
  get truncated() {
1072
1080
  return this.buffer.length > this.maxPreview;
1073
1081
  }
1074
- /** The streaming preview: full text truncated to maxPreview-3 + "…". */
1082
+ /** Preview visible text without a trailing silence-marker fragment. */
1075
1083
  preview() {
1076
- if (this.buffer.length <= this.maxPreview)
1077
- return this.buffer;
1078
- let cut = this.maxPreview - 3, code = this.buffer.charCodeAt(cut - 1);
1079
- return code >= 55296 && code <= 56319 && (cut -= 1), `${this.buffer.slice(0, cut)}\u2026`;
1084
+ let lines = this.buffer.split(`
1085
+ `), last = lines.at(-1)?.trim() ?? "";
1086
+ (SILENCE_MARKERS.has(last) || last && [...SILENCE_MARKERS].some((marker) => marker.startsWith(last))) && lines.pop(), lines.length && isMarkerLine(lines[0]) && lines.shift();
1087
+ let visible = lines.join(`
1088
+ `).trim();
1089
+ if (!visible)
1090
+ return "";
1091
+ if (visible.length <= this.maxPreview)
1092
+ return visible;
1093
+ let cut = this.maxPreview - 3, code = visible.charCodeAt(cut - 1);
1094
+ return code >= 55296 && code <= 56319 && (cut -= 1), `${visible.slice(0, cut)}\u2026`;
1080
1095
  }
1081
1096
  schedule(force = !1) {
1082
1097
  this.chain = this.chain.then(() => this.flush(force)).catch(() => {
@@ -1086,12 +1101,15 @@ var StreamConsumer = class {
1086
1101
  if (!(this.buffer.length > this.flushedLen) || !force && this.messageId !== null && this.now() - this.lastFlushAt < this.options.intervalMs)
1087
1102
  return;
1088
1103
  let text = this.preview();
1104
+ if (!text || text === this.lastPreview)
1105
+ return;
1106
+ let length = this.buffer.length;
1089
1107
  if (this.messageId === null) {
1090
1108
  if (this.messageId = await this.options.sendInitial(text), this.messageId === null)
1091
1109
  return;
1092
1110
  } else
1093
1111
  await this.options.edit(this.messageId, text);
1094
- this.flushedLen = this.buffer.length, this.lastFlushAt = this.now();
1112
+ this.flushedLen = length, this.lastPreview = text, this.lastFlushAt = this.now();
1095
1113
  }
1096
1114
  };
1097
1115
 
@@ -1118,10 +1136,12 @@ function createRouter(deps) {
1118
1136
  }
1119
1137
  return initialCfg;
1120
1138
  }
1121
- async function sendError(adapter, event, message) {
1122
- await adapter.send(event.source.chatId, `\u26A0 ${oneLine(message)}`, {
1139
+ async function sendError(adapter, event, key, cfg, message, epoch) {
1140
+ await queueGatewayText(key, event.source, adapter, `\u26A0 ${oneLine(message)}`, {
1141
+ kind: "notice",
1123
1142
  replyTo: event.messageId,
1124
- threadId: event.source.threadId
1143
+ cfg,
1144
+ epoch
1125
1145
  });
1126
1146
  }
1127
1147
  function isGroupGated(event, cfg) {
@@ -1141,7 +1161,23 @@ function createRouter(deps) {
1141
1161
  if (source.chatType !== "dm" || cfg.unauthorizedDmBehavior !== "pair")
1142
1162
  return !0;
1143
1163
  let code = pairing.issueCode(source.platform, source.userId);
1144
- return code === null || await adapter.send(source.chatId, `Your lunR pairing code: ${formatPairingCode(code)} \u2014 ask the owner to run: lunr gateway pair approve ${source.platform} ${formatPairingCode(code)}`, { replyTo: event.messageId, threadId: source.threadId }), !0;
1164
+ return code === null || await adapter.send(source.chatId, `Your lunR pairing code: ${formatPairingCode(code)}. Ask the computer's owner to run lunr gateway pair approve ${source.platform} ${formatPairingCode(code)} --owner if this is their account. Approval without --owner grants chat access only.`, { replyTo: event.messageId, threadId: source.threadId }), !0;
1165
+ }
1166
+ function workspaceReadiness(event, key, cfg) {
1167
+ if (getSession(key) || conversationBinding(key)?.cwd)
1168
+ return;
1169
+ if (!isGatewayOwner(event.source, cfg))
1170
+ return "This chat is paired but has no project. Ask the computer's gateway owner to configure your access locally. /project and /continue require owner access.";
1171
+ let root = cfg.defaultProject;
1172
+ if (!root)
1173
+ return "No default project selected. Use /project in this private chat to choose an approved folder.";
1174
+ try {
1175
+ let cwd = resolveWithinRoots(root, cfg.projectRoots ?? []);
1176
+ bindConversation(key, event.source, { cwd, owner: event.source.userId });
1177
+ return;
1178
+ } catch {
1179
+ return "Default project is no longer an approved folder. Use /project to choose an approved folder.";
1180
+ }
1145
1181
  }
1146
1182
  async function handleSlash(adapter, event, key) {
1147
1183
  let text = event.text.trim();
@@ -1149,7 +1185,7 @@ function createRouter(deps) {
1149
1185
  return !1;
1150
1186
  let firstToken = text.split(/\s+/, 1)[0].toLowerCase(), commandWord = firstToken.split("@")[0].slice(1), args = text.slice(firstToken.length).trim();
1151
1187
  if (deps.remoteControls) {
1152
- let { handleMobileCommand, cancelMobileTransfer } = await import("./mobile-commands-LVHDAUDP.js");
1188
+ let { handleMobileCommand, cancelMobileTransfer } = await import("./mobile-commands-J7OJEKFO.js");
1153
1189
  if (["stop", "stopall", "new", "cancel"].includes(commandWord) && cancelMobileTransfer(key), commandWord === "cancel")
1154
1190
  return invalidateGatewayDialogs(key), await adapter.send(event.source.chatId, "Cancelled the pending selection or transfer.", {
1155
1191
  threadId: event.source.threadId
@@ -1159,6 +1195,23 @@ function createRouter(deps) {
1159
1195
  if (!event.text.startsWith("/"))
1160
1196
  return !1;
1161
1197
  }
1198
+ if (commandWord === "start") {
1199
+ let issue = deps.remoteControls ? workspaceReadiness(event, key, freshCfg()) : void 0;
1200
+ if (issue)
1201
+ return await sendCommandReply(adapter, event, issue), !0;
1202
+ try {
1203
+ let session = await bridge.getSession(key, !0), models = await session?.modelRuntime.getAvailable();
1204
+ models?.length ? !session?.model || !models.some((model) => model.id === session.model?.id && model.provider === session.model.provider) ? await sendCommandReply(adapter, event, "No available model selected. Use /model here to choose one.") : await sendCommandReply(adapter, event, "Ready. Send a message to begin, or use /model to choose a model.") : await sendCommandReply(adapter, event, "No authenticated model available. Use /login on your computer, then try /start again.");
1205
+ } catch {
1206
+ await sendCommandReply(adapter, event, "Session setup failed. Run lunr gateway doctor on your computer, then try /start again.");
1207
+ }
1208
+ return !0;
1209
+ }
1210
+ if (deps.remoteControls && commandWord === "model") {
1211
+ let issue = workspaceReadiness(event, key, freshCfg());
1212
+ if (issue)
1213
+ return await sendCommandReply(adapter, event, issue), !0;
1214
+ }
1162
1215
  let cmd = CHAT_COMMANDS.find((c) => c.name === commandWord || c.aliases?.includes(commandWord));
1163
1216
  if (!cmd)
1164
1217
  return event.source.chatType !== "dm";
@@ -1167,36 +1220,37 @@ function createRouter(deps) {
1167
1220
  key,
1168
1221
  adapter,
1169
1222
  bridge,
1223
+ cfg: freshCfg(),
1170
1224
  args,
1171
1225
  reply: (message) => sendCommandReply(adapter, event, message)
1172
1226
  };
1173
1227
  return runWithApprovalContext({ key, adapter, source: event.source }, () => runChatCommand(cmd, ctx));
1174
1228
  }
1175
- async function deliver(adapter, event, text, opts) {
1229
+ async function deliver(adapter, event, text, key, cfg, opts) {
1176
1230
  let filtered = applySilenceFilter(text);
1177
- if (filtered === null)
1178
- return;
1179
- let chunks = splitMessage(filtered, adapter.maxMessageLength), startIndex = 0;
1180
- if (opts.editMessageId) {
1181
- if (!opts.previewTruncated) {
1182
- await adapter.editMessage(event.source.chatId, opts.editMessageId, filtered);
1183
- return;
1231
+ if (filtered !== null) {
1232
+ if (opts.editMessageId) {
1233
+ let chunks = splitMessage(filtered, adapter.maxMessageLength);
1234
+ if ((await adapter.editMessage(event.source.chatId, opts.editMessageId, opts.previewTruncated ? chunks[0] : filtered).catch(() => ({ success: !1 }))).success) {
1235
+ if (!opts.previewTruncated)
1236
+ return;
1237
+ await queueGatewayText(key, event.source, adapter, chunks.slice(1).join(""), {
1238
+ kind: "result",
1239
+ cfg,
1240
+ chunks: chunks.slice(1)
1241
+ });
1242
+ return;
1243
+ }
1184
1244
  }
1185
- await adapter.editMessage(event.source.chatId, opts.editMessageId, chunks[0]), startIndex = 1;
1186
- }
1187
- for (let index = startIndex; index < chunks.length; index++) {
1188
- let result = await adapter.send(event.source.chatId, chunks[index], {
1189
- replyTo: opts.reply && index === 0 ? event.messageId : void 0,
1190
- threadId: event.source.threadId
1245
+ await queueGatewayText(key, event.source, adapter, filtered, {
1246
+ kind: "result",
1247
+ replyTo: opts.reply ? event.messageId : void 0,
1248
+ cfg
1191
1249
  });
1192
- if (!result.success) {
1193
- console.error(`[gateway] send failed on ${adapter.platform}: ${result.error ?? "unknown error"}`);
1194
- return;
1195
- }
1196
1250
  }
1197
1251
  }
1198
1252
  async function runTurn(adapter, event, key, cfg) {
1199
- let streaming = cfg.streaming.enabled && typeof adapter.editMessage == "function", consumer;
1253
+ let epoch = gatewayEpoch(key), streaming = cfg.streaming.enabled && typeof adapter.editMessage == "function", consumer;
1200
1254
  streaming && (consumer = new StreamConsumer({
1201
1255
  sendInitial: async (text) => {
1202
1256
  let result2 = await adapter.send(event.source.chatId, text, {
@@ -1206,7 +1260,9 @@ function createRouter(deps) {
1206
1260
  return result2.success ? result2.messageId ?? null : null;
1207
1261
  },
1208
1262
  edit: async (messageId, text) => {
1209
- await adapter.editMessage(event.source.chatId, messageId, text);
1263
+ let result2 = await adapter.editMessage(event.source.chatId, messageId, text);
1264
+ if (!result2.success)
1265
+ throw new Error(result2.error ?? "Preview edit failed");
1210
1266
  },
1211
1267
  intervalMs: cfg.streaming.editIntervalMs,
1212
1268
  threshold: cfg.streaming.bufferThreshold,
@@ -1215,13 +1271,13 @@ function createRouter(deps) {
1215
1271
  let callbacks = {
1216
1272
  onDelta: consumer ? (delta) => consumer.push(delta) : void 0,
1217
1273
  onFollowUpResult: (text) => {
1218
- deliver(adapter, event, text, { reply: !1 });
1274
+ deliver(adapter, event, text, key, cfg, { reply: !1 }).catch((error) => console.error("[gateway] follow-up delivery failed:", error));
1219
1275
  },
1220
1276
  onError: (message) => {
1221
- sendError(adapter, event, message);
1277
+ sendError(adapter, event, key, cfg, message, epoch).catch((error) => console.error("[gateway] error delivery failed:", error));
1222
1278
  }
1223
1279
  }, result = await runWithApprovalContext({ key, adapter, source: event.source }, () => bridge.runTurn(key, event, callbacks));
1224
- result !== QUEUED && (consumer && await consumer.finalize(), await deliver(adapter, event, result, {
1280
+ result !== QUEUED && (consumer && await consumer.finalize(), await deliver(adapter, event, result, key, cfg, {
1225
1281
  reply: !consumer,
1226
1282
  editMessageId: consumer?.sentMessageId ?? void 0,
1227
1283
  previewTruncated: consumer?.truncated ?? !1
@@ -1232,11 +1288,10 @@ function createRouter(deps) {
1232
1288
  let adapter = adapters.get(event.source.platform);
1233
1289
  if (!adapter)
1234
1290
  return;
1235
- let cfg = freshCfg();
1291
+ let cfg = freshCfg(), key = buildSessionKey(event.source, { groupSessionsPerUser: cfg.groupSessionsPerUser }), epoch = gatewayEpoch(key);
1236
1292
  try {
1237
- if (isGroupGated(event, cfg) || await isDenied(adapter, event, cfg))
1293
+ if (isGroupGated(event, cfg) || (rememberGatewayRole(key, event.source), await isDenied(adapter, event, cfg)))
1238
1294
  return;
1239
- let key = buildSessionKey(event.source, { groupSessionsPerUser: cfg.groupSessionsPerUser });
1240
1295
  if (deps.remoteControls) {
1241
1296
  let binding = conversationBinding(key);
1242
1297
  if (binding?.owner && (requireGatewayOwner(event.source, cfg), binding.owner !== event.source.userId))
@@ -1246,10 +1301,15 @@ function createRouter(deps) {
1246
1301
  }
1247
1302
  if (await handleSlash(adapter, event, key))
1248
1303
  return;
1304
+ let issue = deps.remoteControls ? workspaceReadiness(event, key, cfg) : void 0;
1305
+ if (issue) {
1306
+ await sendCommandReply(adapter, event, issue);
1307
+ return;
1308
+ }
1249
1309
  await adapter.sendTyping(event.source.chatId, event.source.threadId).catch(() => {
1250
1310
  }), await runTurn(adapter, event, key, cfg);
1251
1311
  } catch (err) {
1252
- await sendError(adapter, event, err instanceof Error ? err.message : String(err)).catch(() => {
1312
+ await sendError(adapter, event, key, cfg, err instanceof Error ? err.message : String(err), epoch).catch(() => {
1253
1313
  });
1254
1314
  }
1255
1315
  }
@@ -1261,16 +1321,8 @@ var ADAPTER_FACTORIES = {
1261
1321
  telegram: (cfg) => new TelegramAdapter(cfg),
1262
1322
  discord: (cfg) => new DiscordAdapter(cfg)
1263
1323
  }, KNOWN_PLATFORMS = ["telegram", "discord"], SETUP_INSTRUCTIONS = {
1264
- telegram: [
1265
- "Telegram: talk to @BotFather \u2192 /newbot \u2192 copy the token into",
1266
- " <agentDir>/gateway.json (telegram.token) or export LUNR_TELEGRAM_BOT_TOKEN,",
1267
- " then set telegram.enabled = true."
1268
- ],
1269
- discord: [
1270
- "Discord: discord.com/developers \u2192 New Application \u2192 Bot \u2192 copy the token into",
1271
- " <agentDir>/gateway.json (discord.token) or export LUNR_DISCORD_BOT_TOKEN,",
1272
- " enable the MESSAGE CONTENT intent, then set discord.enabled = true."
1273
- ]
1324
+ telegram: ["Telegram: run lunr gateway setup locally to configure the bot token and owner ID."],
1325
+ discord: ["Discord: run lunr gateway setup locally to configure the bot token and owner ID."]
1274
1326
  };
1275
1327
  function printSetupInstructions(enabledButUnrunnable) {
1276
1328
  console.log("lunR gateway: no runnable platforms configured.");
@@ -1280,18 +1332,24 @@ function printSetupInstructions(enabledButUnrunnable) {
1280
1332
  for (let line of SETUP_INSTRUCTIONS[platform])
1281
1333
  console.log(line);
1282
1334
  }
1283
- async function runPairApprove(platform, code) {
1335
+ async function runPairApprove(platform, code, owner = !1) {
1284
1336
  if (!code)
1285
- return console.error("Usage: lunr gateway pair approve <platform> <code>"), 1;
1337
+ return console.error("Usage: lunr gateway pair approve <platform> <code> [--owner]"), 1;
1286
1338
  let userId = createPairingStore().approve(platform, code);
1287
1339
  if (userId === null)
1288
1340
  return console.error(`Pairing failed: no valid pending code "${code}" for ${platform} (wrong, expired, or locked out).`), 1;
1289
1341
  try {
1290
- addAllowedUser(platform, userId);
1342
+ if (owner) {
1343
+ let cfg = loadGatewayConfig();
1344
+ if (platform !== "telegram" && platform !== "discord")
1345
+ throw new Error("Unknown platform.");
1346
+ cfg.owners ??= { telegram: [], discord: [] }, cfg.owners[platform] = [.../* @__PURE__ */ new Set([...cfg.owners[platform], userId])], cfg[platform].allowedUsers = [.../* @__PURE__ */ new Set([...cfg[platform].allowedUsers, userId])], saveGatewayConfig(cfg);
1347
+ } else
1348
+ addAllowedUser(platform, userId);
1291
1349
  } catch (err) {
1292
1350
  return console.error(`Paired ${platform} user ${userId}, but could not persist allowedUsers: ${err}`), 1;
1293
1351
  }
1294
- return console.log(`Approved ${platform} user ${userId} (added to ${platform}.allowedUsers in gateway.json).`), 0;
1352
+ return console.log(`Approved ${platform} user ${userId}${owner ? " as owner with local project and TUI access" : " for chat only; owner access requires local --owner approval"}.`), 0;
1295
1353
  }
1296
1354
  function runPairList() {
1297
1355
  let pairing = createPairingStore(), pending = pairing.listPending(), approved = pairing.listApproved();
@@ -1359,19 +1417,17 @@ async function runDaemon() {
1359
1417
  await bridge.shutdown(), await Promise.all([...adapters.values()].map((adapter) => adapter.disconnect().catch(() => {
1360
1418
  }))), stopGatewayPresenter(), owner.release(), process.removeListener("SIGINT", shutdown), process.removeListener("SIGTERM", shutdown), finish();
1361
1419
  })().catch((error) => {
1362
- console.error("Gateway shutdown failed:", error instanceof Error ? error.message : String(error)), stopping = !1, owner.update(platformStatus, "ready"), startButtonSweeper(), cron = startGatewayCron({ adapters, cfg });
1420
+ console.error("Gateway shutdown failed:", error instanceof Error ? error.message : String(error)), stopping = !1, owner.update(platformStatus, Object.values(platformStatus).includes("connected") ? "ready" : "starting"), startButtonSweeper(), cron = startGatewayCron({ adapters, cfg });
1363
1421
  for (let [platform, adapter] of adapters)
1364
1422
  platformStatus[platform] !== "connected" && connect(platform, adapter);
1365
1423
  });
1366
1424
  }
1367
1425
  }, owner = claimGateway(shutdown);
1368
- process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown), startGatewayPresenter(adapters);
1369
- let connected = [];
1370
- startButtonSweeper();
1426
+ process.on("SIGINT", shutdown), process.on("SIGTERM", shutdown), startGatewayPresenter(adapters), startButtonSweeper();
1371
1427
  let connect = async (platform, adapter) => {
1372
1428
  if (!stopping) {
1373
1429
  try {
1374
- if (platformStatus[platform] = "connecting", owner.update(platformStatus, "starting"), !await adapter.connect())
1430
+ if (platformStatus[platform] = "connecting", owner.update(platformStatus, Object.values(platformStatus).includes("connected") ? "ready" : "starting"), !await adapter.connect())
1375
1431
  throw new Error("Connection failed");
1376
1432
  adapter.onMessage((event) => {
1377
1433
  router.handleEvent(event);
@@ -1387,9 +1443,9 @@ async function runDaemon() {
1387
1443
  await adapter.disconnect();
1388
1444
  return;
1389
1445
  }
1390
- connected.push(adapter), platformStatus[platform] = "connected", console.log(`lunR gateway: ${platform} connected`);
1446
+ platformStatus[platform] = "connected", console.log(`lunR gateway: ${platform} connected`);
1391
1447
  } catch {
1392
- if (platformStatus[platform] = "disconnected, retrying", await adapter.disconnect().catch(() => {
1448
+ if (platformStatus[platform] = "disconnected, retrying (check gateway logs)", await adapter.disconnect().catch(() => {
1393
1449
  }), !stopping) {
1394
1450
  let retry = setTimeout(() => {
1395
1451
  retries.delete(retry), connect(platform, adapter);
@@ -1397,18 +1453,18 @@ async function runDaemon() {
1397
1453
  retries.add(retry);
1398
1454
  }
1399
1455
  }
1400
- stopping || owner.update(platformStatus);
1456
+ stopping || owner.update(platformStatus, Object.values(platformStatus).includes("connected") ? "ready" : "starting");
1401
1457
  }
1402
1458
  };
1403
1459
  for (let [platform, adapter] of adapters)
1404
1460
  connect(platform, adapter);
1405
- return cron = startGatewayCron({ adapters, cfg }), console.log(`lunR gateway: cron scheduler started (${cron.intervalMs / 1e3}s interval)`), owner.update(platformStatus), await stopped, 0;
1461
+ return cron = startGatewayCron({ adapters, cfg }), console.log(`lunR gateway: cron scheduler started (${cron.intervalMs / 1e3}s interval)`), owner.update(platformStatus, "starting"), await stopped, 0;
1406
1462
  }
1407
1463
  async function runGateway(args) {
1408
1464
  let [sub, ...rest] = args;
1409
1465
  if (sub === "pair") {
1410
- let [action, platform, code] = rest;
1411
- return action === "approve" && platform ? runPairApprove(platform, code) : action === "list" ? runPairList() : (console.error("Usage: lunr gateway pair approve <platform> <code> | lunr gateway pair list"), 1);
1466
+ let [action, platform, code, flag] = rest;
1467
+ return action === "approve" && platform && (flag === void 0 || flag === "--owner") ? runPairApprove(platform, code, flag === "--owner") : action === "list" ? runPairList() : (console.error("Usage: lunr gateway pair approve <platform> <code> [--owner] | lunr gateway pair list"), 1);
1412
1468
  }
1413
1469
  return sub === "status" ? runStatus() : sub === void 0 ? runDaemon() : (console.error(`Unknown gateway sub-command "${sub}". Expected: pair approve | pair list | status`), 1);
1414
1470
  }
@@ -19,7 +19,7 @@ import {
19
19
  TreeSelectorComponent,
20
20
  UserMessageComponent,
21
21
  UserMessageSelectorComponent
22
- } from "./chunk-LLUIPGDR.js";
22
+ } from "./chunk-RC7DMV45.js";
23
23
  import {
24
24
  attachJsonlLineReader,
25
25
  runRpcMode,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./chunk-OCVIXVTZ.js";
31
31
  import "./chunk-KWA4OC2J.js";
32
32
  import "./chunk-US544NN6.js";
33
- import "./chunk-TQGPP4SC.js";
33
+ import "./chunk-CDVHZOOK.js";
34
34
  import {
35
35
  copyToClipboard
36
36
  } from "./chunk-Q5ZU2VRT.js";
@@ -39,13 +39,14 @@ import "./chunk-RWTKOC3B.js";
39
39
  import "./chunk-7N3YHTYF.js";
40
40
  import {
41
41
  main
42
- } from "./chunk-YHQ3NBB3.js";
43
- import "./chunk-X3URCYCU.js";
44
- import "./chunk-W64JC4E7.js";
42
+ } from "./chunk-IJIFHRTB.js";
43
+ import "./chunk-WF7PGWRZ.js";
44
+ import "./chunk-7S3T6YEA.js";
45
+ import "./chunk-2HHLJWGD.js";
45
46
  import "./chunk-YPHAIRZT.js";
46
47
  import "./chunk-PL6JKXWI.js";
47
48
  import "./chunk-5ZH3ZFIZ.js";
48
- import "./chunk-CSUZVNYE.js";
49
+ import "./chunk-OVX6X377.js";
49
50
  import {
50
51
  AgentSession,
51
52
  AgentSessionRuntime,
@@ -57,10 +58,9 @@ import {
57
58
  parseSkillBlock,
58
59
  wrapRegisteredTool,
59
60
  wrapRegisteredTools
60
- } from "./chunk-DQMGU675.js";
61
+ } from "./chunk-VQFSUJJG.js";
61
62
  import "./chunk-CCCN2UCX.js";
62
63
  import {
63
- DefaultPackageManager,
64
64
  DefaultResourceLoader,
65
65
  createEventBus,
66
66
  createExtensionRuntime,
@@ -70,7 +70,10 @@ import {
70
70
  loadProjectContextFiles,
71
71
  loadSkills,
72
72
  loadSkillsFromDir
73
- } from "./chunk-TVJUOJZJ.js";
73
+ } from "./chunk-YCUZEGJG.js";
74
+ import {
75
+ DefaultPackageManager
76
+ } from "./chunk-LQP3RB67.js";
74
77
  import "./chunk-OBMWP3I5.js";
75
78
  import "./chunk-DVGWF6A2.js";
76
79
  import {
@@ -119,14 +122,13 @@ import {
119
122
  AuthStorage,
120
123
  ModelRuntime,
121
124
  readStoredCredential
122
- } from "./chunk-GS66LV4M.js";
125
+ } from "./chunk-KJ6DWS3K.js";
126
+ import "./chunk-NRKGMJYU.js";
123
127
  import {
124
128
  SettingsManager
125
- } from "./chunk-QAZOULTU.js";
126
- import "./chunk-UP2XBVH5.js";
127
- import "./chunk-VWCE2HSZ.js";
128
- import "./chunk-LISUTZS3.js";
129
- import "./chunk-GMHJCCEN.js";
129
+ } from "./chunk-6XL67VVY.js";
130
+ import "./chunk-UOEDI7RP.js";
131
+ import "./chunk-2HMIRK7W.js";
130
132
  import {
131
133
  ProjectTrustStore,
132
134
  hasTrustRequiringProjectResources
@@ -148,13 +150,13 @@ import {
148
150
  resolveModelScopeWithDiagnostics,
149
151
  serializeConversation,
150
152
  shouldCompact
151
- } from "./chunk-OFKSVRV7.js";
153
+ } from "./chunk-GYIXXQAO.js";
152
154
  import {
153
155
  ExtensionRunner
154
156
  } from "./chunk-GJ2RDBRL.js";
155
157
  import "./chunk-CGBXPL3E.js";
156
158
  import "./chunk-BBUVIEZB.js";
157
- import "./chunk-5D7LC2ZQ.js";
159
+ import "./chunk-ZXSGTGJ6.js";
158
160
  import "./chunk-M3LZLQW2.js";
159
161
  import "./chunk-KKUTQQV7.js";
160
162
  import {
@@ -171,7 +173,7 @@ import {
171
173
  recordTuiActivity,
172
174
  registerTransferHandler,
173
175
  requestSessionTransfer
174
- } from "./chunk-AZJHNQKQ.js";
176
+ } from "./chunk-I54LGHWM.js";
175
177
  import {
176
178
  CURRENT_SESSION_VERSION,
177
179
  SessionManager,
@@ -181,7 +183,7 @@ import {
181
183
  migrateSessionEntries,
182
184
  parseSessionEntries,
183
185
  sessionEntryToContextMessages
184
- } from "./chunk-XLTL257W.js";
186
+ } from "./chunk-2KIPT4HJ.js";
185
187
  import {
186
188
  convertToLlm
187
189
  } from "./chunk-FVDOXRUD.js";
@@ -197,7 +199,7 @@ import {
197
199
  SessionOwnershipError
198
200
  } from "./chunk-UAEOTO52.js";
199
201
  import "./chunk-RQ2Q5IYR.js";
200
- import "./chunk-JHYKXIMM.js";
202
+ import "./chunk-MPKSOJBT.js";
201
203
  import {
202
204
  CustomEditor
203
205
  } from "./chunk-H2EOZYMP.js";
@@ -214,7 +216,7 @@ import {
214
216
  isToolCallEventType,
215
217
  isWriteToolResult
216
218
  } from "./chunk-OR4L3IB2.js";
217
- import "./chunk-R3K2F5GI.js";
219
+ import "./chunk-B4HP6ZWM.js";
218
220
  import {
219
221
  parseArgs
220
222
  } from "./chunk-E24EO34J.js";
@@ -8,9 +8,9 @@ import {
8
8
  updateMetadataCache,
9
9
  updateServerMetadata,
10
10
  updateStatusBar
11
- } from "./chunk-YJMMG7C6.js";
11
+ } from "./chunk-DSIKTUPW.js";
12
12
  import "./chunk-4TLO4PO2.js";
13
- import "./chunk-VSELYKWU.js";
13
+ import "./chunk-LWYIVUGV.js";
14
14
  import "./chunk-4HXHDDCF.js";
15
15
  import "./chunk-ARC4KOTI.js";
16
16
  import "./chunk-BI3DHYCN.js";
@@ -12,10 +12,10 @@ import {
12
12
  loadInstallFeatures,
13
13
  parseFeatureFlags,
14
14
  saveInstallFeatures
15
- } from "./chunk-VWCE2HSZ.js";
15
+ } from "./chunk-2HMIRK7W.js";
16
16
  import {
17
17
  loadGatewayConfig
18
- } from "./chunk-R3K2F5GI.js";
18
+ } from "./chunk-B4HP6ZWM.js";
19
19
  import {
20
20
  APP_NAME,
21
21
  NPM_CLI_PACKAGE,
@@ -132,7 +132,7 @@ async function runSetup(argv) {
132
132
  for (let id of applied.disabledIds)
133
133
  await FEATURE_HANDLERS[id].disable({ purgeSecrets: !1 });
134
134
  } else
135
- return await (await import("./setup-5SR2J35A.js")).setupGateway(), 0;
135
+ return await (await import("./setup-CQ2NLVK5.js")).setupGateway(), 0;
136
136
  let { installBrowser } = await import("./setup-JBKOLJ6F.js");
137
137
  return await installBrowser(!1), saveInstallFeatures(next), appendInstallLog(`setup installerVersion=${VERSION}`), console.log(`Writing ${getAgentDir()}/install-features.json`), console.log(`
138
138
  Next:`), console.log(` 1. Restart this shell (or add ${resolveInstallPrefix()}/bin to PATH)`), console.log(` 2. Run: ${APP_NAME}`), console.log(" 3. In the TUI: /login"), 0;