@ashx-j/lunr 0.2.20 → 0.2.22

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 (528) hide show
  1. package/CHANGELOG.md +14 -2
  2. package/README.md +20 -4
  3. package/dist/builtin-extensions/index.d.ts.map +1 -1
  4. package/dist/builtin-extensions/index.js +1 -0
  5. package/dist/builtin-extensions/index.js.map +1 -1
  6. package/dist/builtin-extensions/lunr-browser.d.ts +3 -0
  7. package/dist/builtin-extensions/lunr-browser.d.ts.map +1 -0
  8. package/dist/builtin-extensions/lunr-browser.js +56 -0
  9. package/dist/builtin-extensions/lunr-browser.js.map +1 -0
  10. package/dist/builtin-extensions/lunr-todos.d.ts +6 -5
  11. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  12. package/dist/builtin-extensions/lunr-todos.js +24 -7
  13. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  14. package/dist/builtin-extensions/pi-intercom/broker/spawn.d.ts.map +1 -1
  15. package/dist/builtin-extensions/pi-intercom/broker/spawn.js +30 -21
  16. package/dist/builtin-extensions/pi-intercom/broker/spawn.js.map +1 -1
  17. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-intercom/index.js +15 -3
  19. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js +5 -1
  23. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  25. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js +2 -2
  26. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +8 -7
  28. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  29. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +78 -31
  30. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  31. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  32. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +2 -2
  33. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  34. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -3
  35. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  36. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +6 -2
  37. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts +17 -0
  39. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts.map +1 -0
  40. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js +45 -0
  41. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js.map +1 -0
  42. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +4 -11
  44. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
  45. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +5 -1
  46. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +186 -58
  48. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.d.ts +1 -0
  50. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.js +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/intercom/result-intercom.js.map +1 -1
  53. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js +5 -0
  55. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts +2 -0
  57. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js +3 -2
  59. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +2 -0
  61. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +4 -3
  63. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  65. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js +2 -0
  66. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -0
  68. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  69. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js +2 -1
  70. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  71. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +6 -2
  72. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +23 -1
  74. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  75. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +1 -0
  77. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  78. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +100 -0
  79. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  80. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +46 -31
  81. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  82. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -0
  83. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  84. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js +2 -0
  85. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  86. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.d.ts +15 -2
  87. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.d.ts.map +1 -1
  88. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.js +14 -4
  89. package/dist/builtin-extensions/pi-subagents/src/runs/background/top-level-async.js.map +1 -1
  90. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  91. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +1 -1
  92. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  93. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  94. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +1 -1
  95. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  96. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +0 -1
  97. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  98. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +9 -9
  99. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  100. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
  101. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
  102. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js +1 -1
  103. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
  104. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
  105. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  106. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  107. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +3 -0
  108. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
  109. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +5 -0
  110. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
  111. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts +1 -0
  112. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts.map +1 -1
  113. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js +3 -0
  114. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js.map +1 -1
  115. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  116. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +1 -1
  117. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  118. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts +2 -2
  119. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.d.ts.map +1 -1
  120. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js +5 -10
  121. package/dist/builtin-extensions/pi-subagents/src/runs/shared/task-intent.js.map +1 -1
  122. package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.d.ts +2 -0
  123. package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.d.ts.map +1 -0
  124. package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.js +3 -0
  125. package/dist/builtin-extensions/pi-subagents/src/shared/async-guidance.js.map +1 -0
  126. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +6 -0
  127. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  128. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  129. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.d.ts.map +1 -1
  130. package/dist/builtin-extensions/pi-subagents/src/slash/delegation-adapters.js.map +1 -1
  131. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +7 -0
  132. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  133. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +11 -7
  134. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  135. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +4 -0
  136. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  137. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +22 -23
  138. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  139. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts +18 -0
  140. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -0
  141. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +47 -0
  142. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -0
  143. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -0
  144. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  145. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +237 -374
  146. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  147. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  148. package/dist/builtin-extensions/pi-web-access/index.js +11 -7
  149. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  150. package/dist/cli/args.d.ts.map +1 -1
  151. package/dist/cli/args.js +2 -1
  152. package/dist/cli/args.js.map +1 -1
  153. package/dist/cli/install-cli.d.ts.map +1 -1
  154. package/dist/cli/install-cli.js +15 -45
  155. package/dist/cli/install-cli.js.map +1 -1
  156. package/dist/core/agent-session-runtime.d.ts +9 -0
  157. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  158. package/dist/core/agent-session-runtime.js +126 -29
  159. package/dist/core/agent-session-runtime.js.map +1 -1
  160. package/dist/core/agent-session.d.ts +3 -0
  161. package/dist/core/agent-session.d.ts.map +1 -1
  162. package/dist/core/agent-session.js +20 -2
  163. package/dist/core/agent-session.js.map +1 -1
  164. package/dist/core/browser/network.d.ts +9 -0
  165. package/dist/core/browser/network.d.ts.map +1 -0
  166. package/dist/core/browser/network.js +146 -0
  167. package/dist/core/browser/network.js.map +1 -0
  168. package/dist/core/browser/runtime.d.ts +24 -0
  169. package/dist/core/browser/runtime.d.ts.map +1 -0
  170. package/dist/core/browser/runtime.js +289 -0
  171. package/dist/core/browser/runtime.js.map +1 -0
  172. package/dist/core/browser/schema.d.ts +16 -0
  173. package/dist/core/browser/schema.d.ts.map +1 -0
  174. package/dist/core/browser/schema.js +36 -0
  175. package/dist/core/browser/schema.js.map +1 -0
  176. package/dist/core/browser/settings.d.ts +8 -0
  177. package/dist/core/browser/settings.d.ts.map +1 -0
  178. package/dist/core/browser/settings.js +30 -0
  179. package/dist/core/browser/settings.js.map +1 -0
  180. package/dist/core/browser/setup.d.ts +2 -0
  181. package/dist/core/browser/setup.d.ts.map +1 -0
  182. package/dist/core/browser/setup.js +16 -0
  183. package/dist/core/browser/setup.js.map +1 -0
  184. package/dist/core/customize.d.ts +2 -0
  185. package/dist/core/customize.d.ts.map +1 -1
  186. package/dist/core/customize.js +17 -13
  187. package/dist/core/customize.js.map +1 -1
  188. package/dist/core/export-html/index.d.ts.map +1 -1
  189. package/dist/core/export-html/index.js +1 -1
  190. package/dist/core/export-html/index.js.map +1 -1
  191. package/dist/core/extensions/runner.d.ts +1 -0
  192. package/dist/core/extensions/runner.d.ts.map +1 -1
  193. package/dist/core/extensions/runner.js +1 -1
  194. package/dist/core/extensions/runner.js.map +1 -1
  195. package/dist/core/extensions/types.d.ts +1 -1
  196. package/dist/core/extensions/types.d.ts.map +1 -1
  197. package/dist/core/extensions/types.js.map +1 -1
  198. package/dist/core/install-features.d.ts.map +1 -1
  199. package/dist/core/install-features.js +10 -8
  200. package/dist/core/install-features.js.map +1 -1
  201. package/dist/core/memory-cap.d.ts.map +1 -1
  202. package/dist/core/memory-cap.js +5 -3
  203. package/dist/core/memory-cap.js.map +1 -1
  204. package/dist/core/model-tiers.d.ts.map +1 -1
  205. package/dist/core/model-tiers.js +9 -6
  206. package/dist/core/model-tiers.js.map +1 -1
  207. package/dist/core/permissions.d.ts.map +1 -1
  208. package/dist/core/permissions.js +9 -0
  209. package/dist/core/permissions.js.map +1 -1
  210. package/dist/core/plan-mode.d.ts.map +1 -1
  211. package/dist/core/plan-mode.js +3 -0
  212. package/dist/core/plan-mode.js.map +1 -1
  213. package/dist/core/process-registry.d.ts.map +1 -1
  214. package/dist/core/process-registry.js +6 -4
  215. package/dist/core/process-registry.js.map +1 -1
  216. package/dist/core/runtime-scope.d.ts +11 -0
  217. package/dist/core/runtime-scope.d.ts.map +1 -0
  218. package/dist/core/runtime-scope.js +3 -0
  219. package/dist/core/runtime-scope.js.map +1 -0
  220. package/dist/core/sdk.d.ts.map +1 -1
  221. package/dist/core/sdk.js +13 -0
  222. package/dist/core/sdk.js.map +1 -1
  223. package/dist/core/session-handoff.d.ts +35 -0
  224. package/dist/core/session-handoff.d.ts.map +1 -0
  225. package/dist/core/session-handoff.js +214 -0
  226. package/dist/core/session-handoff.js.map +1 -0
  227. package/dist/core/session-manager.d.ts +20 -0
  228. package/dist/core/session-manager.d.ts.map +1 -1
  229. package/dist/core/session-manager.js +184 -22
  230. package/dist/core/session-manager.js.map +1 -1
  231. package/dist/core/session-ownership.d.ts +28 -0
  232. package/dist/core/session-ownership.d.ts.map +1 -0
  233. package/dist/core/session-ownership.js +138 -0
  234. package/dist/core/session-ownership.js.map +1 -0
  235. package/dist/core/session-retention.d.ts.map +1 -1
  236. package/dist/core/session-retention.js +11 -2
  237. package/dist/core/session-retention.js.map +1 -1
  238. package/dist/core/settings-manager.d.ts +11 -0
  239. package/dist/core/settings-manager.d.ts.map +1 -1
  240. package/dist/core/settings-manager.js +29 -0
  241. package/dist/core/settings-manager.js.map +1 -1
  242. package/dist/core/slash-commands.d.ts.map +1 -1
  243. package/dist/core/slash-commands.js +2 -0
  244. package/dist/core/slash-commands.js.map +1 -1
  245. package/dist/core/subagent-spinner-setting.d.ts +6 -0
  246. package/dist/core/subagent-spinner-setting.d.ts.map +1 -0
  247. package/dist/core/subagent-spinner-setting.js +12 -0
  248. package/dist/core/subagent-spinner-setting.js.map +1 -0
  249. package/dist/core/subagent-spinner.d.ts +4 -0
  250. package/dist/core/subagent-spinner.d.ts.map +1 -0
  251. package/dist/core/subagent-spinner.js +6 -0
  252. package/dist/core/subagent-spinner.js.map +1 -0
  253. package/dist/core/system-prompt.d.ts.map +1 -1
  254. package/dist/core/system-prompt.js +5 -2
  255. package/dist/core/system-prompt.js.map +1 -1
  256. package/dist/core/todo-settings.d.ts +5 -0
  257. package/dist/core/todo-settings.d.ts.map +1 -0
  258. package/dist/core/todo-settings.js +7 -0
  259. package/dist/core/todo-settings.js.map +1 -0
  260. package/dist/core/tools/bash.d.ts.map +1 -1
  261. package/dist/core/tools/bash.js +4 -4
  262. package/dist/core/tools/bash.js.map +1 -1
  263. package/dist/core/tools/edit.d.ts.map +1 -1
  264. package/dist/core/tools/edit.js +5 -3
  265. package/dist/core/tools/edit.js.map +1 -1
  266. package/dist/core/tools/find.d.ts.map +1 -1
  267. package/dist/core/tools/find.js +4 -4
  268. package/dist/core/tools/find.js.map +1 -1
  269. package/dist/core/tools/grep.d.ts.map +1 -1
  270. package/dist/core/tools/grep.js +4 -4
  271. package/dist/core/tools/grep.js.map +1 -1
  272. package/dist/core/tools/ls.d.ts.map +1 -1
  273. package/dist/core/tools/ls.js +4 -4
  274. package/dist/core/tools/ls.js.map +1 -1
  275. package/dist/core/tools/read.d.ts.map +1 -1
  276. package/dist/core/tools/read.js +4 -4
  277. package/dist/core/tools/read.js.map +1 -1
  278. package/dist/core/tools/render-utils.d.ts +11 -2
  279. package/dist/core/tools/render-utils.d.ts.map +1 -1
  280. package/dist/core/tools/render-utils.js +31 -4
  281. package/dist/core/tools/render-utils.js.map +1 -1
  282. package/dist/core/tools/write.d.ts.map +1 -1
  283. package/dist/core/tools/write.js +4 -4
  284. package/dist/core/tools/write.js.map +1 -1
  285. package/dist/core/usage-service.d.ts.map +1 -1
  286. package/dist/core/usage-service.js +5 -3
  287. package/dist/core/usage-service.js.map +1 -1
  288. package/dist/gateway/adapters/discord.d.ts +12 -1
  289. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  290. package/dist/gateway/adapters/discord.js +112 -17
  291. package/dist/gateway/adapters/discord.js.map +1 -1
  292. package/dist/gateway/adapters/telegram.d.ts +4 -2
  293. package/dist/gateway/adapters/telegram.d.ts.map +1 -1
  294. package/dist/gateway/adapters/telegram.js +34 -11
  295. package/dist/gateway/adapters/telegram.js.map +1 -1
  296. package/dist/gateway/agent-bridge.d.ts +14 -3
  297. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  298. package/dist/gateway/agent-bridge.js +252 -60
  299. package/dist/gateway/agent-bridge.js.map +1 -1
  300. package/dist/gateway/approval.d.ts +1 -0
  301. package/dist/gateway/approval.d.ts.map +1 -1
  302. package/dist/gateway/approval.js +60 -18
  303. package/dist/gateway/approval.js.map +1 -1
  304. package/dist/gateway/authz.d.ts +2 -0
  305. package/dist/gateway/authz.d.ts.map +1 -1
  306. package/dist/gateway/authz.js +13 -0
  307. package/dist/gateway/authz.js.map +1 -1
  308. package/dist/gateway/buttons.d.ts +3 -1
  309. package/dist/gateway/buttons.d.ts.map +1 -1
  310. package/dist/gateway/buttons.js +18 -3
  311. package/dist/gateway/buttons.js.map +1 -1
  312. package/dist/gateway/command.d.ts.map +1 -1
  313. package/dist/gateway/command.js +49 -4
  314. package/dist/gateway/command.js.map +1 -1
  315. package/dist/gateway/commands.d.ts.map +1 -1
  316. package/dist/gateway/commands.js +18 -3
  317. package/dist/gateway/commands.js.map +1 -1
  318. package/dist/gateway/config.d.ts +5 -0
  319. package/dist/gateway/config.d.ts.map +1 -1
  320. package/dist/gateway/config.js +5 -0
  321. package/dist/gateway/config.js.map +1 -1
  322. package/dist/gateway/conversations.d.ts +14 -0
  323. package/dist/gateway/conversations.d.ts.map +1 -0
  324. package/dist/gateway/conversations.js +30 -0
  325. package/dist/gateway/conversations.js.map +1 -0
  326. package/dist/gateway/download.d.ts +2 -0
  327. package/dist/gateway/download.d.ts.map +1 -0
  328. package/dist/gateway/download.js +36 -0
  329. package/dist/gateway/download.js.map +1 -0
  330. package/dist/gateway/index.d.ts.map +1 -1
  331. package/dist/gateway/index.js +85 -26
  332. package/dist/gateway/index.js.map +1 -1
  333. package/dist/gateway/mobile-commands.d.ts +24 -0
  334. package/dist/gateway/mobile-commands.d.ts.map +1 -0
  335. package/dist/gateway/mobile-commands.js +422 -0
  336. package/dist/gateway/mobile-commands.js.map +1 -0
  337. package/dist/gateway/presenter.d.ts +16 -0
  338. package/dist/gateway/presenter.d.ts.map +1 -0
  339. package/dist/gateway/presenter.js +210 -0
  340. package/dist/gateway/presenter.js.map +1 -0
  341. package/dist/gateway/router.d.ts +1 -0
  342. package/dist/gateway/router.d.ts.map +1 -1
  343. package/dist/gateway/router.js +32 -3
  344. package/dist/gateway/router.js.map +1 -1
  345. package/dist/gateway/service.d.ts +46 -0
  346. package/dist/gateway/service.d.ts.map +1 -0
  347. package/dist/gateway/service.js +395 -0
  348. package/dist/gateway/service.js.map +1 -0
  349. package/dist/gateway/setup.d.ts +4 -0
  350. package/dist/gateway/setup.d.ts.map +1 -0
  351. package/dist/gateway/setup.js +146 -0
  352. package/dist/gateway/setup.js.map +1 -0
  353. package/dist/gateway/types.d.ts +4 -2
  354. package/dist/gateway/types.d.ts.map +1 -1
  355. package/dist/gateway/types.js.map +1 -1
  356. package/dist/index.d.ts +2 -0
  357. package/dist/index.d.ts.map +1 -1
  358. package/dist/index.js +2 -0
  359. package/dist/index.js.map +1 -1
  360. package/dist/main.d.ts.map +1 -1
  361. package/dist/main.js +2 -1
  362. package/dist/main.js.map +1 -1
  363. package/dist/modes/interactive/components/assistant-message.d.ts +11 -2
  364. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/assistant-message.js +53 -16
  366. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  367. package/dist/modes/interactive/components/copyable-text.d.ts +31 -0
  368. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -0
  369. package/dist/modes/interactive/components/copyable-text.js +165 -0
  370. package/dist/modes/interactive/components/copyable-text.js.map +1 -0
  371. package/dist/modes/interactive/components/custom-entry.d.ts +1 -0
  372. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  373. package/dist/modes/interactive/components/custom-entry.js +8 -0
  374. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  375. package/dist/modes/interactive/components/custom-message.d.ts +1 -0
  376. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  377. package/dist/modes/interactive/components/custom-message.js +8 -0
  378. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  379. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  380. package/dist/modes/interactive/components/session-selector.js +16 -0
  381. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  382. package/dist/modes/interactive/components/settings-selector.d.ts +9 -0
  383. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  384. package/dist/modes/interactive/components/settings-selector.js +111 -1
  385. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  386. package/dist/modes/interactive/extension-widget-order.d.ts +8 -0
  387. package/dist/modes/interactive/extension-widget-order.d.ts.map +1 -0
  388. package/dist/modes/interactive/extension-widget-order.js +37 -0
  389. package/dist/modes/interactive/extension-widget-order.js.map +1 -0
  390. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  391. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  392. package/dist/modes/interactive/interactive-mode.js +166 -29
  393. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  394. package/dist/node-runtime/agent-session-services-NQ6GKOIK.js +49 -0
  395. package/dist/node-runtime/{builtin-extensions-X4JMM4ZS.js → builtin-extensions-GVC6IFDU.js} +6 -4
  396. package/dist/node-runtime/{chunk-LTYWTR3V.js → chunk-2MI5OPMN.js} +17 -2
  397. package/dist/node-runtime/{chunk-W3CVH5RX.js → chunk-2TKODGBZ.js} +11 -6
  398. package/dist/node-runtime/chunk-4EULYYR4.js +62 -0
  399. package/dist/node-runtime/chunk-5BNJ4JUH.js +672 -0
  400. package/dist/node-runtime/{chunk-6N22HULO.js → chunk-5D7LC2ZQ.js} +7 -2
  401. package/dist/node-runtime/chunk-5ZH3ZFIZ.js +308 -0
  402. package/dist/node-runtime/{chunk-KBKMCJDU.js → chunk-5ZQXRPMC.js} +19 -4
  403. package/dist/node-runtime/{chunk-6KDIOJL3.js → chunk-6427XAWG.js} +3 -3
  404. package/dist/node-runtime/{chunk-BOHIDQT4.js → chunk-6B2POMK7.js} +1 -1
  405. package/dist/node-runtime/{chunk-RNBHABBA.js → chunk-7QWNYZDI.js} +7 -0
  406. package/dist/node-runtime/chunk-AZJHNQKQ.js +205 -0
  407. package/dist/node-runtime/chunk-BFNXONG3.js +521 -0
  408. package/dist/node-runtime/{chunk-IRPJXI6U.js → chunk-BX2RB477.js} +1 -1
  409. package/dist/node-runtime/chunk-CCCN2UCX.js +14 -0
  410. package/dist/node-runtime/{chunk-25I2BHAA.js → chunk-CSUZVNYE.js} +1 -1
  411. package/dist/node-runtime/{chunk-QZMODZQ2.js → chunk-E24EO34J.js} +2 -1
  412. package/dist/node-runtime/{chunk-QKFMBRAL.js → chunk-EQ63ANHL.js} +508 -140
  413. package/dist/node-runtime/{chunk-ELWEXVO5.js → chunk-GJSAD4AB.js} +216 -201
  414. package/dist/node-runtime/{chunk-AOFXZQKA.js → chunk-GMHJCCEN.js} +8 -8
  415. package/dist/node-runtime/{chunk-DDWHZ633.js → chunk-GNN7H3B7.js} +1 -1
  416. package/dist/node-runtime/chunk-GS66LV4M.js +2830 -0
  417. package/dist/node-runtime/{chunk-6BEIBLQ3.js → chunk-H3XF4UVQ.js} +1 -1
  418. package/dist/node-runtime/chunk-H4K3JDRB.js +47 -0
  419. package/dist/node-runtime/{chunk-AROOY4BB.js → chunk-HTFRRDSF.js} +2 -7
  420. package/dist/node-runtime/chunk-IMLCWLPI.js +9 -0
  421. package/dist/node-runtime/{chunk-4CSFRBCN.js → chunk-IQIEU7SB.js} +9 -674
  422. package/dist/node-runtime/{chunk-OPEK5RRY.js → chunk-IVXYUAJE.js} +1 -1
  423. package/dist/node-runtime/{chunk-AL2FMKKM.js → chunk-IWOWXRWU.js} +58 -48
  424. package/dist/node-runtime/chunk-KKUTQQV7.js +144 -0
  425. package/dist/node-runtime/chunk-LISUTZS3.js +19 -0
  426. package/dist/node-runtime/{chunk-K3646JTM.js → chunk-LMBNLFXQ.js} +25 -314
  427. package/dist/node-runtime/{chunk-7NBZ5P7I.js → chunk-NAY6UUQZ.js} +1 -1
  428. package/dist/node-runtime/chunk-OAR4TYZE.js +146 -0
  429. package/dist/node-runtime/{chunk-STERBGUB.js → chunk-OFKSVRV7.js} +2 -2
  430. package/dist/node-runtime/{chunk-JZQ7F36T.js → chunk-ORH324EP.js} +19 -3
  431. package/dist/node-runtime/{chunk-2SJB2AWP.js → chunk-PC2Z5TKZ.js} +3 -3
  432. package/dist/node-runtime/{chunk-46ECNOLF.js → chunk-QDGKKKUM.js} +97 -162
  433. package/dist/node-runtime/chunk-R3K2F5GI.js +122 -0
  434. package/dist/node-runtime/chunk-RMQZU2YU.js +117 -0
  435. package/dist/node-runtime/{chunk-JYNNB7DU.js → chunk-TDL7UWJ7.js} +283 -2999
  436. package/dist/node-runtime/{chunk-G6LRAP36.js → chunk-TQGPP4SC.js} +1 -1
  437. package/dist/node-runtime/chunk-UAEOTO52.js +119 -0
  438. package/dist/node-runtime/{chunk-4DJ6HEGH.js → chunk-UAFLNHSH.js} +18 -14
  439. package/dist/node-runtime/{chunk-AY6CAJSL.js → chunk-UJOCPOMX.js} +6 -3
  440. package/dist/node-runtime/chunk-UP2XBVH5.js +40 -0
  441. package/dist/node-runtime/{chunk-WJVFOIB5.js → chunk-UQUCFAJ3.js} +1 -1
  442. package/dist/node-runtime/chunk-URD2SLIT.js +1019 -0
  443. package/dist/node-runtime/chunk-US544NN6.js +13 -0
  444. package/dist/node-runtime/chunk-UWPJL22I.js +341 -0
  445. package/dist/node-runtime/chunk-V2A7CEXK.js +355 -0
  446. package/dist/node-runtime/chunk-VJPTNWAP.js +708 -0
  447. package/dist/node-runtime/{chunk-WKDK4C5P.js → chunk-VSSXXL36.js} +38 -164
  448. package/dist/node-runtime/{chunk-4I23VTC4.js → chunk-VWCE2HSZ.js} +21 -124
  449. package/dist/node-runtime/{chunk-CBGB57XT.js → chunk-WADV2VDS.js} +32 -1014
  450. package/dist/node-runtime/{chunk-GKLEQ3I4.js → chunk-XLTL257W.js} +126 -27
  451. package/dist/node-runtime/chunk-YPHAIRZT.js +10 -0
  452. package/dist/node-runtime/cli-runtime.js +2 -2
  453. package/dist/node-runtime/command-3JHHXOPX.js +45 -0
  454. package/dist/node-runtime/commands-2JVNFGMQ.js +36 -0
  455. package/dist/node-runtime/{commands-MV5KOZ64.js → commands-KAMO2T6P.js} +10 -10
  456. package/dist/node-runtime/config-RORQUQFG.js +20 -0
  457. package/dist/node-runtime/{customize-XEXL2DGQ.js → customize-VFJV3U6A.js} +2 -1
  458. package/dist/node-runtime/{direct-tool-executor-BK7CLEBX.js → direct-tool-executor-YAVOLDFY.js} +8 -8
  459. package/dist/node-runtime/{export-html-TEXVV5RP.js → export-html-KBFVV63J.js} +4 -3
  460. package/dist/node-runtime/{extension-input-O4HSAEM4.js → extension-input-K24TVKVW.js} +4 -4
  461. package/dist/node-runtime/{extension-selector-X5FCX43D.js → extension-selector-SPNF7EDR.js} +4 -4
  462. package/dist/node-runtime/{extract-XLQSJN4V.js → extract-EQJE7FZZ.js} +2 -2
  463. package/dist/node-runtime/{gateway-L4ANRTVE.js → gateway-VFO6SFKK.js} +275 -994
  464. package/dist/node-runtime/{gemini-search-U7SUMPQA.js → gemini-search-35OCRFLN.js} +1 -1
  465. package/dist/node-runtime/{gemini-url-context-PXWCBQHK.js → gemini-url-context-UQY3PHHW.js} +2 -2
  466. package/dist/node-runtime/index.js +105 -64
  467. package/dist/node-runtime/{init-3C7Z24OI.js → init-X2LIUB2H.js} +3 -3
  468. package/dist/node-runtime/{install-cli-EXMJQESX.js → install-cli-C3CF7O7N.js} +21 -82
  469. package/dist/node-runtime/interactive-mode-LOM6AIF6.js +72 -0
  470. package/dist/node-runtime/{interactive-view-ILS6TAN5.js → interactive-view-IDSCPPK7.js} +8 -8
  471. package/dist/node-runtime/lunr-browser-YNW7FTYX.js +87 -0
  472. package/dist/node-runtime/{lunr-cron-NNYTWTGF.js → lunr-cron-BKHGNBKT.js} +19 -5
  473. package/dist/node-runtime/main.js +45 -30
  474. package/dist/node-runtime/{memory-cap-3S4XRLNP.js → memory-cap-EL3KL4JJ.js} +2 -1
  475. package/dist/node-runtime/mobile-commands-HMP25WBC.js +32 -0
  476. package/dist/node-runtime/model-runtime-PLQKAG4B.js +16 -0
  477. package/dist/node-runtime/{model-tiers-NJLHUEGK.js → model-tiers-OU3U5CZG.js} +2 -1
  478. package/dist/node-runtime/{package-manager-cli-7RKSZGEN.js → package-manager-cli-VCK4E2RC.js} +23 -15
  479. package/dist/node-runtime/{pi-intercom-DDQMRNPJ.js → pi-intercom-HBPK5HSJ.js} +38 -34
  480. package/dist/node-runtime/{pi-mcp-adapter-GUFZWW54.js → pi-mcp-adapter-E6WULBKF.js} +4 -4
  481. package/dist/node-runtime/{pi-subagents-T5WMMLBB.js → pi-subagents-FEUDLJOE.js} +476 -412
  482. package/dist/node-runtime/{pi-web-access-2CQGFLT2.js → pi-web-access-WTGMNZ32.js} +15 -15
  483. package/dist/node-runtime/process-registry-4FAKZQOL.js +31 -0
  484. package/dist/node-runtime/{proxy-modes-V6YVFH3C.js → proxy-modes-OSQCWRBI.js} +9 -9
  485. package/dist/node-runtime/rpc-entry.js +46 -31
  486. package/dist/node-runtime/{rpc-mode-W5ZTLTMZ.js → rpc-mode-P5ODXPEG.js} +2 -2
  487. package/dist/node-runtime/runtime-4VA6JKNF.js +373 -0
  488. package/dist/node-runtime/{runtime-bridges-NJQERQ72.js → runtime-bridges-3XUQ46XW.js} +6 -5
  489. package/dist/node-runtime/service-ISSP6VHE.js +36 -0
  490. package/dist/node-runtime/session-handoff-HC7R5E24.js +33 -0
  491. package/dist/node-runtime/{session-manager-E7AREDTV.js → session-manager-CFN4UFM2.js} +2 -1
  492. package/dist/node-runtime/{session-selector-FJ7M2AIX.js → session-selector-LHRMJOKT.js} +5 -4
  493. package/dist/node-runtime/{settings-manager-GHPTUN7R.js → settings-manager-UUZ6NUXI.js} +8 -2
  494. package/dist/node-runtime/setup-JBKOLJ6F.js +18 -0
  495. package/dist/node-runtime/setup-NRXVZBLJ.js +155 -0
  496. package/dist/node-runtime/{subagent-executor-SRFC26SJ.js → subagent-executor-MLUMBWCP.js} +35 -63
  497. package/dist/node-runtime/theme-U7IGOA7O.js +68 -0
  498. package/dist/node-runtime/trust-manager-MMISNCYO.js +17 -0
  499. package/dist/node-runtime/{update-cli-L3JIBH2U.js → update-cli-4TP25CNW.js} +8 -2
  500. package/dist/node-runtime/usage-service-LFB2SWYV.js +37 -0
  501. package/dist/node-runtime/{video-extract-OYT5WKS5.js → video-extract-OOZHR7SU.js} +2 -2
  502. package/dist/node-runtime/{youtube-extract-TQYKGFGS.js → youtube-extract-FNPAUNHU.js} +6 -6
  503. package/docs/browser.md +86 -0
  504. package/docs/extensions.md +2 -0
  505. package/docs/features.md +99 -17
  506. package/docs/interactive-startup.md +2 -1
  507. package/docs/sessions.md +10 -0
  508. package/docs/settings.md +3 -1
  509. package/docs/tui.md +2 -0
  510. package/docs/usage.md +16 -0
  511. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  512. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  513. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  514. package/examples/extensions/gondolin/package-lock.json +2 -2
  515. package/examples/extensions/gondolin/package.json +1 -1
  516. package/examples/extensions/sandbox/package-lock.json +2 -2
  517. package/examples/extensions/sandbox/package.json +1 -1
  518. package/examples/extensions/with-deps/package-lock.json +2 -2
  519. package/examples/extensions/with-deps/package.json +1 -1
  520. package/package.json +7 -4
  521. package/scripts/install-browser.mjs +20 -0
  522. package/dist/node-runtime/agent-session-services-75JKASCW.js +0 -36
  523. package/dist/node-runtime/chunk-HQCKFM2O.js +0 -56
  524. package/dist/node-runtime/command-RBTRL55A.js +0 -13
  525. package/dist/node-runtime/interactive-mode-HPUNH7SV.js +0 -57
  526. package/dist/node-runtime/{chunk-UWQYRSYQ.js → chunk-YJMMG7C6.js} +25 -25
  527. package/dist/node-runtime/{mcp-panel-IIGMXQGP.js → mcp-panel-KTTFXJZ4.js} +3 -3
  528. package/dist/node-runtime/{src-BPQFJR76.js → src-IVPNZ2BX.js} +9 -9
@@ -36,10 +36,12 @@ import * as processRegistry from "../../core/process-registry.js";
36
36
  import { captureTreeChanges, clearRollback, disableRollbackForSession, enableRollbackForSession, initRollback, isRollbackEnabled, isRollbackSessionForceEnabled, migrateRollbackSession, peekRollbackTurnsConsumed, beginTurn as rollbackBeginTurn, rollbackLastTurn, setRollbackWarningHandler, } from "../../core/rollback.js";
37
37
  import { getSearchCuratorSetting, setSearchCuratorSetting } from "../../core/search-curator.js";
38
38
  import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
39
+ import { cancelSessionHandoff, markSessionHandoff, recordTuiActivity, registerTransferHandler, requestSessionTransfer, } from "../../core/session-handoff.js";
39
40
  import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
40
41
  import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
41
42
  import { getSubagentCancellation, SubagentEscapeSequence } from "../../core/subagent-cancellation.js";
42
43
  import { time } from "../../core/timings.js";
44
+ import { notifyTodosEnabledChanged } from "../../core/todo-settings.js";
43
45
  import { hasTrustRequiringProjectResources, ProjectTrustStore } from "../../core/trust-manager.js";
44
46
  import { checkForUpdate, markUpdateNotified } from "../../core/update-check.js";
45
47
  import { getAllPlanUsageResults, getUsageServiceBridge } from "../../core/usage-service.js";
@@ -88,6 +90,7 @@ import { TrustSelectorComponent } from "./components/trust-selector.js";
88
90
  import { renderUsageBox } from "./components/usage-view.js";
89
91
  import { UserMessageComponent } from "./components/user-message.js";
90
92
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
93
+ import { orderedExtensionWidgets, replaceExtensionWidget, widgetSeparatorNeedsSpacer, } from "./extension-widget-order.js";
91
94
  import { getModelSearchText } from "./model-search.js";
92
95
  import { wrapSkillTagAutocomplete } from "./skill-tag-autocomplete.js";
93
96
  import { computeSmoothRevealStep, countGraphemesBeforeToolCall, countMessageGraphemes, sliceMessageContent, } from "./smooth-streaming.js";
@@ -359,7 +362,9 @@ export class InteractiveMode {
359
362
  await this.rebindCurrentSession({ renderBeforeBind: true });
360
363
  // lunr: re-init rollback for the new session id + re-apply auto force-enable.
361
364
  initRollback(this.settingsManager, this.sessionManager.getSessionId());
362
- this.syncPermissionModeEffects(this.settingsManager.getDefaultPermissionMode());
365
+ const mode = this.sessionManager.getPermissionMode() ?? this.settingsManager.getDefaultPermissionMode();
366
+ resetPermissions(mode);
367
+ this.syncPermissionModeEffects(mode);
363
368
  });
364
369
  this.version = VERSION;
365
370
  this.ui = options.startupView?.ui ?? new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
@@ -370,8 +375,7 @@ export class InteractiveMode {
370
375
  enterGoalAuto: () => this.enterGoalAuto(),
371
376
  leaveGoalAuto: () => this.leaveGoalAuto(),
372
377
  });
373
- // lunr: reset permission mode to configured default on startup.
374
- resetPermissions(this.settingsManager.getDefaultPermissionMode());
378
+ resetPermissions(this.sessionManager.getPermissionMode() ?? this.settingsManager.getDefaultPermissionMode());
375
379
  this.headerContainer = new Container();
376
380
  if (options.startupView) {
377
381
  this.headerContainer.addChild(new Spacer(1));
@@ -626,7 +630,7 @@ export class InteractiveMode {
626
630
  // lunr: initialize rollback service for this session.
627
631
  initRollback(this.settingsManager, this.sessionManager.getSessionId());
628
632
  setRollbackWarningHandler((msg) => this.showStatus(msg));
629
- this.syncPermissionModeEffects(this.settingsManager.getDefaultPermissionMode());
633
+ this.syncPermissionModeEffects(this.sessionManager.getPermissionMode() ?? this.settingsManager.getDefaultPermissionMode());
630
634
  await this.themeController.applyFromSettings();
631
635
  this.headerContainer.clear();
632
636
  // Add boot screen header (unless silenced)
@@ -1451,8 +1455,26 @@ export class InteractiveMode {
1451
1455
  }
1452
1456
  return bootRows;
1453
1457
  }
1458
+ unregisterSessionTransfer;
1459
+ transferInProgress = false;
1460
+ detachedDraft = "";
1454
1461
  async rebindCurrentSession(options = {}) {
1455
1462
  await this.waitForDeferredBuiltins();
1463
+ this.unregisterSessionTransfer?.();
1464
+ recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
1465
+ this.unregisterSessionTransfer = registerTransferHandler(this.sessionManager, async ({ stop, signal }) => {
1466
+ this.transferInProgress = true;
1467
+ try {
1468
+ this.detachedDraft = this.editor.getText();
1469
+ await this.runtimeHost.releaseForTransfer({ stop, signal });
1470
+ this.editor.setText(this.detachedDraft);
1471
+ this.unregisterSessionTransfer?.();
1472
+ this.showStatus("Session released for remote continuation. Draft retained. Use /reclaim to continue here.");
1473
+ }
1474
+ finally {
1475
+ this.transferInProgress = false;
1476
+ }
1477
+ });
1456
1478
  this.unsubscribe?.();
1457
1479
  this.unsubscribe = undefined;
1458
1480
  this.applyRuntimeSettings();
@@ -1616,21 +1638,8 @@ export class InteractiveMode {
1616
1638
  */
1617
1639
  setExtensionWidget(key, content, options) {
1618
1640
  const placement = options?.placement ?? "aboveEditor";
1619
- const removeExisting = (map) => {
1620
- const existing = map.get(key);
1621
- if (existing?.dispose)
1622
- existing.dispose();
1623
- map.delete(key);
1624
- };
1625
- removeExisting(this.extensionWidgetsAbove);
1626
- removeExisting(this.extensionWidgetsBelow);
1627
- if (content === undefined) {
1628
- this.renderWidgets();
1629
- return;
1630
- }
1631
1641
  let component;
1632
1642
  if (Array.isArray(content)) {
1633
- // Wrap string array in a Container with Text components
1634
1643
  const container = new Container();
1635
1644
  for (const line of content.slice(0, InteractiveMode.MAX_WIDGET_LINES)) {
1636
1645
  container.addChild(new Text(line, 1, 0));
@@ -1640,12 +1649,10 @@ export class InteractiveMode {
1640
1649
  }
1641
1650
  component = container;
1642
1651
  }
1643
- else {
1644
- // Factory function - create component
1652
+ else if (content) {
1645
1653
  component = content(this.ui, theme);
1646
1654
  }
1647
- const targetMap = placement === "belowEditor" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;
1648
- targetMap.set(key, component);
1655
+ replaceExtensionWidget(this.extensionWidgetsAbove, this.extensionWidgetsBelow, key, component, placement);
1649
1656
  this.renderWidgets();
1650
1657
  }
1651
1658
  clearExtensionWidgets() {
@@ -1712,13 +1719,14 @@ export class InteractiveMode {
1712
1719
  if (leadingSpacer) {
1713
1720
  container.addChild(new Spacer(1));
1714
1721
  }
1715
- let first = true;
1716
- for (const component of widgets.values()) {
1717
- if (!first) {
1718
- container.addChild(new Spacer(1));
1722
+ let previousKey;
1723
+ for (const [key, component] of orderedExtensionWidgets(widgets)) {
1724
+ if (previousKey !== undefined) {
1725
+ if (widgetSeparatorNeedsSpacer(previousKey, key))
1726
+ container.addChild(new Spacer(1));
1719
1727
  container.addChild(new DynamicBorder((s) => theme.fg("dim", s)));
1720
1728
  }
1721
- first = false;
1729
+ previousKey = key;
1722
1730
  container.addChild(component);
1723
1731
  }
1724
1732
  }
@@ -2407,6 +2415,51 @@ export class InteractiveMode {
2407
2415
  setupEditorSubmitHandler() {
2408
2416
  this.defaultEditor.onSubmit = async (text) => {
2409
2417
  text = text.trim();
2418
+ if (text === "/reclaim" || text === "/reclaim stop") {
2419
+ const file = this.sessionManager.getSessionFile();
2420
+ try {
2421
+ if (!file)
2422
+ throw new Error("This session is not saved.");
2423
+ if (!this.runtimeHost.isDetached) {
2424
+ this.showStatus("This terminal already owns the session.");
2425
+ return;
2426
+ }
2427
+ const draft = this.editor.getText();
2428
+ await requestSessionTransfer(file, { stop: text === "/reclaim stop" });
2429
+ await this.runtimeHost.switchSession(file);
2430
+ this.editor.setText(draft === text ? this.detachedDraft : draft);
2431
+ this.showStatus("Session reclaimed.");
2432
+ }
2433
+ catch (error) {
2434
+ this.showError(error instanceof Error ? error.message : String(error));
2435
+ }
2436
+ return;
2437
+ }
2438
+ if ((this.runtimeHost.isDetached || this.transferInProgress) && !["/quit", "/exit"].includes(text)) {
2439
+ this.showError("Session is detached or transferring. Draft retained. Use /reclaim, /reclaim stop, or /quit.");
2440
+ return;
2441
+ }
2442
+ if (text === "/handoff" || text === "/handoff cancel") {
2443
+ try {
2444
+ if (text === "/handoff cancel")
2445
+ cancelSessionHandoff(this.sessionManager, this.runtimeHost.services.agentDir);
2446
+ else
2447
+ markSessionHandoff(this.sessionManager, this.runtimeHost.services.agentDir);
2448
+ this.showStatus(text === "/handoff cancel"
2449
+ ? "Handoff mark cancelled."
2450
+ : "Marked for phone continuation for 8 hours. Busy work must finish or be explicitly stopped before transfer.");
2451
+ }
2452
+ catch (error) {
2453
+ this.showError(error instanceof Error ? error.message : String(error));
2454
+ }
2455
+ return;
2456
+ }
2457
+ if (text &&
2458
+ !this.runtimeHost.isDetached &&
2459
+ (!text.startsWith("/") ||
2460
+ /^\/(?:model|thinking|effort|reasoning|off|minimal|low|medium|high|xhigh|max|mode|plan|manual|yolo|auto|name|title|undo|edit|redo|tree|compact)(?:\s|$)/.test(text))) {
2461
+ recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
2462
+ }
2410
2463
  if (!text) {
2411
2464
  this.takeSubmittedImages(text);
2412
2465
  return;
@@ -2832,7 +2885,7 @@ export class InteractiveMode {
2832
2885
  this.ui.requestRender();
2833
2886
  }
2834
2887
  else if (event.message.role === "assistant") {
2835
- this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.thinkingCollapse);
2888
+ this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.thinkingCollapse, { requestRender: () => this.ui.requestRender() });
2836
2889
  // lunr: collapsible reasoning — fresh timing array for this message.
2837
2890
  this.thinkingRunTimings = [];
2838
2891
  this.streamingComponent.setThinkingTimings(this.thinkingRunTimings);
@@ -3199,7 +3252,7 @@ export class InteractiveMode {
3199
3252
  break;
3200
3253
  }
3201
3254
  case "assistant": {
3202
- const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.thinkingCollapse);
3255
+ const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.thinkingCollapse, { requestRender: () => this.ui.requestRender() });
3203
3256
  // lunr: collapsible reasoning — re-attach live timings when this
3204
3257
  // message was streamed in this session (undefined = history).
3205
3258
  assistantComponent.setThinkingTimings(this.thinkingTimingsByMessage.get(message));
@@ -3401,6 +3454,7 @@ export class InteractiveMode {
3401
3454
  if (this.isShuttingDown)
3402
3455
  return;
3403
3456
  this.isShuttingDown = true;
3457
+ this.unregisterSessionTransfer?.();
3404
3458
  this.stopSmoothStreaming();
3405
3459
  if (this.planUsageTimer) {
3406
3460
  clearInterval(this.planUsageTimer);
@@ -3588,6 +3642,10 @@ export class InteractiveMode {
3588
3642
  }
3589
3643
  }
3590
3644
  async handleFollowUp() {
3645
+ if (this.runtimeHost.isDetached || this.transferInProgress) {
3646
+ this.showError("Use /reclaim before sending more work. Draft retained.");
3647
+ return;
3648
+ }
3591
3649
  const text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();
3592
3650
  if (!text)
3593
3651
  return;
@@ -3642,6 +3700,9 @@ export class InteractiveMode {
3642
3700
  this.ui.requestRender();
3643
3701
  }
3644
3702
  cycleThinkingLevel() {
3703
+ if (this.runtimeHost.isDetached || this.transferInProgress)
3704
+ return;
3705
+ recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
3645
3706
  const newLevel = this.session.cycleThinkingLevel();
3646
3707
  if (newLevel === undefined) {
3647
3708
  this.showStatus("Current model does not support thinking");
@@ -3655,6 +3716,9 @@ export class InteractiveMode {
3655
3716
  this.applyPermissionMode(nextPermissionMode(getPermissionMode()), { silent: true });
3656
3717
  }
3657
3718
  async cycleModel(direction) {
3719
+ if (this.runtimeHost.isDetached || this.transferInProgress)
3720
+ return;
3721
+ recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
3658
3722
  try {
3659
3723
  const result = await this.session.cycleModel(direction);
3660
3724
  if (result === undefined) {
@@ -4019,6 +4083,7 @@ export class InteractiveMode {
4019
4083
  autocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),
4020
4084
  quietStartup: this.settingsManager.getQuietStartup(),
4021
4085
  smoothStreaming: this.settingsManager.getSmoothStreaming(),
4086
+ subagentSpinner: this.settingsManager.getSubagentSpinner(),
4022
4087
  sessionRetentionDays: this.settingsManager.getSessionRetentionDays(),
4023
4088
  clearOnShrink: this.settingsManager.getClearOnShrink(),
4024
4089
  showTerminalProgress: this.settingsManager.getShowTerminalProgress(),
@@ -4027,8 +4092,10 @@ export class InteractiveMode {
4027
4092
  globalInstructionsPath: getGlobalInstructionsPath(getAgentDir()),
4028
4093
  modelInstructionsPath: getModelInstructionsPath(getAgentDir(), this.session.model?.id ?? "no-model-selected"),
4029
4094
  confirmLargeSubagentLaunches: this.settingsManager.getConfirmLargeSubagentLaunches(),
4095
+ browserEnabled: this.settingsManager.getBrowserEnabled(),
4030
4096
  memoryEnabled: this.settingsManager.getMemoryEnabled(),
4031
4097
  memoryCharCap: this.settingsManager.getMemoryCharCap(),
4098
+ todosEnabled: this.settingsManager.getTodosEnabled(),
4032
4099
  searchCurator: getSearchCuratorSetting(),
4033
4100
  // lunr: TUI customize settings
4034
4101
  footerMcp: this.settingsManager.getFooterMcp(),
@@ -4145,6 +4212,10 @@ export class InteractiveMode {
4145
4212
  onSmoothStreamingChange: (enabled) => {
4146
4213
  this.applySmoothStreamingSettingChange(enabled);
4147
4214
  },
4215
+ onSubagentSpinnerChange: (spinner) => {
4216
+ this.settingsManager.setSubagentSpinner(spinner);
4217
+ this.ui.requestRender();
4218
+ },
4148
4219
  onSessionRetentionDaysChange: (days) => {
4149
4220
  this.settingsManager.setSessionRetentionDays(days);
4150
4221
  },
@@ -4232,11 +4303,20 @@ export class InteractiveMode {
4232
4303
  onMemoryCharCapChange: (cap) => {
4233
4304
  this.settingsManager.setMemoryCharCap(cap);
4234
4305
  },
4306
+ onBrowserEnabledChange: (enabled) => {
4307
+ this.settingsManager.setBrowserEnabled(enabled);
4308
+ this.session.refreshToolRegistry();
4309
+ },
4235
4310
  onMemoryEnabledChange: (enabled) => {
4236
4311
  this.settingsManager.setMemoryEnabled(enabled);
4237
4312
  this.session.refreshToolRegistry();
4238
4313
  this.showStatus(`Agent memory: ${enabled ? "on" : "off"}`);
4239
4314
  },
4315
+ onTodosEnabledChange: (enabled) => {
4316
+ this.settingsManager.setTodosEnabled(enabled);
4317
+ notifyTodosEnabledChanged(enabled);
4318
+ this.session.refreshToolRegistry();
4319
+ },
4240
4320
  onSearchCuratorChange: (setting) => {
4241
4321
  if (!setSearchCuratorSetting(setting)) {
4242
4322
  this.showError("pi-web-access is not loaded; curator setting unavailable.");
@@ -4276,6 +4356,36 @@ export class InteractiveMode {
4276
4356
  onPlanUsageWindowChange: (window) => {
4277
4357
  this.settingsManager.setPlanUsageWindow(window);
4278
4358
  },
4359
+ onGatewayAction: (action) => {
4360
+ void (async () => {
4361
+ if (this.session.isStreaming) {
4362
+ this.showStatus("Wait for the current turn before managing the gateway.");
4363
+ return;
4364
+ }
4365
+ if (action === "status") {
4366
+ this.showStatus((await import("../../gateway/service.js")).serviceStatusText());
4367
+ return;
4368
+ }
4369
+ this.ui.stop();
4370
+ try {
4371
+ await new Promise((resolve, reject) => {
4372
+ const child = spawn(process.execPath, [process.argv[1], "gateway", ...action.split(" ")], {
4373
+ stdio: "inherit",
4374
+ env: process.env,
4375
+ });
4376
+ child.once("error", reject);
4377
+ child.once("exit", (code) => code === 0
4378
+ ? resolve()
4379
+ : reject(new Error(`Gateway command exited with code ${code}. Run lunr gateway doctor.`)));
4380
+ });
4381
+ }
4382
+ finally {
4383
+ this.ui.start();
4384
+ this.ui.requestRender(true);
4385
+ }
4386
+ this.showStatus((await import("../../gateway/service.js")).serviceStatusText());
4387
+ })().catch((error) => this.showStatus(error instanceof Error ? error.message : String(error)));
4388
+ },
4279
4389
  onDefaultPermissionModeChange: (mode) => {
4280
4390
  this.settingsManager.setDefaultPermissionMode(mode);
4281
4391
  },
@@ -4305,6 +4415,7 @@ export class InteractiveMode {
4305
4415
  autoManage: () => this.settingsManager.getAutoManageSubscriptions(),
4306
4416
  requestRender: () => this.ui.requestRender(),
4307
4417
  },
4418
+ requestRender: () => this.ui.requestRender(),
4308
4419
  createModelTierPicker: (_tier, currentModelRef, done) => {
4309
4420
  const selector = new ModelSelectorComponent(this.ui, this.resolveModelReference(currentModelRef), this.settingsManager, this.session.modelRuntime, this.session.scopedModels, (model) => {
4310
4421
  done(`${model.provider}/${model.id}`);
@@ -4505,6 +4616,8 @@ export class InteractiveMode {
4505
4616
  });
4506
4617
  }
4507
4618
  async showModelSelector(initialSearchInput) {
4619
+ if (this.runtimeHost.isDetached || this.transferInProgress)
4620
+ return;
4508
4621
  // lunr: prefetch active subscription names so row rendering stays synchronous.
4509
4622
  const subscriptionNames = await this.getActiveSubscriptionNames();
4510
4623
  this.showSelector((done) => {
@@ -4697,6 +4810,8 @@ export class InteractiveMode {
4697
4810
  });
4698
4811
  }
4699
4812
  showUserMessageSelector() {
4813
+ if (this.runtimeHost.isDetached || this.transferInProgress)
4814
+ return;
4700
4815
  const userMessages = this.session.getUserMessagesForForking();
4701
4816
  if (userMessages.length === 0) {
4702
4817
  this.showStatus("No messages to fork from");
@@ -4745,6 +4860,8 @@ export class InteractiveMode {
4745
4860
  }
4746
4861
  }
4747
4862
  showTreeSelector(initialSelectedId) {
4863
+ if (this.runtimeHost.isDetached || this.transferInProgress)
4864
+ return;
4748
4865
  const tree = this.sessionManager.getTree();
4749
4866
  const realLeafId = this.sessionManager.getLeafId();
4750
4867
  const initialFilterMode = this.settingsManager.getTreeFilterMode();
@@ -4875,8 +4992,17 @@ export class InteractiveMode {
4875
4992
  const next = (nextName ?? "").trim();
4876
4993
  if (!next)
4877
4994
  return;
4995
+ if (sessionFilePath === this.sessionManager.getSessionFile() && !this.runtimeHost.isDetached) {
4996
+ this.sessionManager.appendSessionInfo(next);
4997
+ return;
4998
+ }
4878
4999
  const mgr = SessionManager.open(sessionFilePath);
4879
- mgr.appendSessionInfo(next);
5000
+ try {
5001
+ mgr.appendSessionInfo(next);
5002
+ }
5003
+ finally {
5004
+ mgr.dispose();
5005
+ }
4880
5006
  },
4881
5007
  showRenameHint: true,
4882
5008
  keybindings: this.keybindings,
@@ -6307,6 +6433,9 @@ export class InteractiveMode {
6307
6433
  }
6308
6434
  /** Apply addendum + auto-rollback for a mode without a status toast. */
6309
6435
  syncPermissionModeEffects(mode) {
6436
+ if (this.runtimeHost.isDetached || this.transferInProgress)
6437
+ return;
6438
+ this.sessionManager.setPermissionMode(mode);
6310
6439
  if (mode === "plan") {
6311
6440
  this.session.setSystemPromptAppend(PLAN_MODE_ADDENDUM);
6312
6441
  }
@@ -6334,6 +6463,10 @@ export class InteractiveMode {
6334
6463
  }
6335
6464
  }
6336
6465
  applyPermissionMode(mode, opts) {
6466
+ if (this.runtimeHost.isDetached || this.transferInProgress)
6467
+ return;
6468
+ this.sessionManager.setPermissionMode(mode);
6469
+ recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
6337
6470
  const prev = getPermissionMode();
6338
6471
  if (mode === "plan" && prev !== "plan") {
6339
6472
  this.previousPermissionMode = prev;
@@ -6672,6 +6805,10 @@ ${toggleThinking ? `| \`${toggleThinking}\` | Toggle thinking block visibility |
6672
6805
  this.ui.requestRender();
6673
6806
  }
6674
6807
  async handleClearCommand() {
6808
+ if (this.runtimeHost.isDetached || this.transferInProgress) {
6809
+ this.showError("Use /reclaim first, or /quit to leave this terminal.");
6810
+ return;
6811
+ }
6675
6812
  this.clearStatusIndicator();
6676
6813
  this.ui.setChatScroll(0);
6677
6814
  // Deferred factories must be on builtinRoster before /new rebuilds the runtime.