@ashx-j/lunr 0.2.21 → 0.2.23

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 (461) hide show
  1. package/CHANGELOG.md +4 -2
  2. package/README.md +23 -5
  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 +9 -0
  7. package/dist/builtin-extensions/lunr-browser.d.ts.map +1 -0
  8. package/dist/builtin-extensions/lunr-browser.js +169 -0
  9. package/dist/builtin-extensions/lunr-browser.js.map +1 -0
  10. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  11. package/dist/builtin-extensions/lunr-todos.js +15 -0
  12. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  13. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  14. package/dist/builtin-extensions/pi-intercom/index.js +3 -0
  15. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  16. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  17. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js +5 -1
  19. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -2
  21. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  22. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +18 -5
  23. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -3
  25. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +3 -0
  27. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  28. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts +17 -0
  29. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.d.ts.map +1 -0
  30. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js +45 -0
  31. package/dist/builtin-extensions/pi-subagents/src/intercom/communication.js.map +1 -0
  32. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +4 -11
  34. package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +4 -1
  36. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  37. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +160 -51
  38. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.d.ts.map +1 -1
  40. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js +5 -0
  41. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-ask.js.map +1 -1
  42. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts +2 -0
  43. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.d.ts.map +1 -1
  44. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js +3 -2
  45. package/dist/builtin-extensions/pi-subagents/src/intercom/supervisor-questions.js.map +1 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -0
  47. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  48. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js +2 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  50. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +3 -0
  51. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js +11 -0
  53. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js +41 -3
  56. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  57. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +4 -0
  59. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
  61. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +3 -0
  62. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts +1 -0
  64. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.d.ts.map +1 -1
  65. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js +3 -0
  66. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-control.js.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  68. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +1 -1
  69. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  70. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +1 -0
  71. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  72. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  73. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts +18 -0
  74. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -0
  75. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +48 -0
  76. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -0
  77. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  78. package/dist/builtin-extensions/pi-web-access/index.js +11 -7
  79. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  80. package/dist/cli/args.d.ts.map +1 -1
  81. package/dist/cli/args.js +2 -1
  82. package/dist/cli/args.js.map +1 -1
  83. package/dist/cli/install-cli.d.ts.map +1 -1
  84. package/dist/cli/install-cli.js +15 -45
  85. package/dist/cli/install-cli.js.map +1 -1
  86. package/dist/core/agent-session-runtime.d.ts +9 -0
  87. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  88. package/dist/core/agent-session-runtime.js +126 -29
  89. package/dist/core/agent-session-runtime.js.map +1 -1
  90. package/dist/core/agent-session.d.ts +22 -0
  91. package/dist/core/agent-session.d.ts.map +1 -1
  92. package/dist/core/agent-session.js +250 -105
  93. package/dist/core/agent-session.js.map +1 -1
  94. package/dist/core/browser/network.d.ts +9 -0
  95. package/dist/core/browser/network.d.ts.map +1 -0
  96. package/dist/core/browser/network.js +146 -0
  97. package/dist/core/browser/network.js.map +1 -0
  98. package/dist/core/browser/runtime.d.ts +24 -0
  99. package/dist/core/browser/runtime.d.ts.map +1 -0
  100. package/dist/core/browser/runtime.js +289 -0
  101. package/dist/core/browser/runtime.js.map +1 -0
  102. package/dist/core/browser/schema.d.ts +16 -0
  103. package/dist/core/browser/schema.d.ts.map +1 -0
  104. package/dist/core/browser/schema.js +36 -0
  105. package/dist/core/browser/schema.js.map +1 -0
  106. package/dist/core/browser/settings.d.ts +8 -0
  107. package/dist/core/browser/settings.d.ts.map +1 -0
  108. package/dist/core/browser/settings.js +30 -0
  109. package/dist/core/browser/settings.js.map +1 -0
  110. package/dist/core/browser/setup.d.ts +2 -0
  111. package/dist/core/browser/setup.d.ts.map +1 -0
  112. package/dist/core/browser/setup.js +16 -0
  113. package/dist/core/browser/setup.js.map +1 -0
  114. package/dist/core/customize.d.ts.map +1 -1
  115. package/dist/core/customize.js +15 -14
  116. package/dist/core/customize.js.map +1 -1
  117. package/dist/core/export-html/index.d.ts.map +1 -1
  118. package/dist/core/export-html/index.js +1 -1
  119. package/dist/core/export-html/index.js.map +1 -1
  120. package/dist/core/extensions/runner.d.ts +1 -0
  121. package/dist/core/extensions/runner.d.ts.map +1 -1
  122. package/dist/core/extensions/runner.js +1 -1
  123. package/dist/core/extensions/runner.js.map +1 -1
  124. package/dist/core/extensions/types.d.ts +1 -1
  125. package/dist/core/extensions/types.d.ts.map +1 -1
  126. package/dist/core/extensions/types.js.map +1 -1
  127. package/dist/core/install-features.d.ts.map +1 -1
  128. package/dist/core/install-features.js +10 -8
  129. package/dist/core/install-features.js.map +1 -1
  130. package/dist/core/memory-cap.d.ts.map +1 -1
  131. package/dist/core/memory-cap.js +5 -3
  132. package/dist/core/memory-cap.js.map +1 -1
  133. package/dist/core/model-tiers.d.ts.map +1 -1
  134. package/dist/core/model-tiers.js +9 -6
  135. package/dist/core/model-tiers.js.map +1 -1
  136. package/dist/core/permissions.d.ts.map +1 -1
  137. package/dist/core/permissions.js +9 -0
  138. package/dist/core/permissions.js.map +1 -1
  139. package/dist/core/plan-mode.d.ts.map +1 -1
  140. package/dist/core/plan-mode.js +3 -0
  141. package/dist/core/plan-mode.js.map +1 -1
  142. package/dist/core/process-registry.d.ts.map +1 -1
  143. package/dist/core/process-registry.js +6 -4
  144. package/dist/core/process-registry.js.map +1 -1
  145. package/dist/core/runtime-scope.d.ts +11 -0
  146. package/dist/core/runtime-scope.d.ts.map +1 -0
  147. package/dist/core/runtime-scope.js +3 -0
  148. package/dist/core/runtime-scope.js.map +1 -0
  149. package/dist/core/sdk.d.ts.map +1 -1
  150. package/dist/core/sdk.js +13 -0
  151. package/dist/core/sdk.js.map +1 -1
  152. package/dist/core/session-handoff.d.ts +35 -0
  153. package/dist/core/session-handoff.d.ts.map +1 -0
  154. package/dist/core/session-handoff.js +214 -0
  155. package/dist/core/session-handoff.js.map +1 -0
  156. package/dist/core/session-manager.d.ts +20 -0
  157. package/dist/core/session-manager.d.ts.map +1 -1
  158. package/dist/core/session-manager.js +184 -22
  159. package/dist/core/session-manager.js.map +1 -1
  160. package/dist/core/session-ownership.d.ts +28 -0
  161. package/dist/core/session-ownership.d.ts.map +1 -0
  162. package/dist/core/session-ownership.js +138 -0
  163. package/dist/core/session-ownership.js.map +1 -0
  164. package/dist/core/session-retention.d.ts.map +1 -1
  165. package/dist/core/session-retention.js +11 -2
  166. package/dist/core/session-retention.js.map +1 -1
  167. package/dist/core/settings-manager.d.ts +11 -0
  168. package/dist/core/settings-manager.d.ts.map +1 -1
  169. package/dist/core/settings-manager.js +27 -0
  170. package/dist/core/settings-manager.js.map +1 -1
  171. package/dist/core/slash-commands.d.ts.map +1 -1
  172. package/dist/core/slash-commands.js +2 -0
  173. package/dist/core/slash-commands.js.map +1 -1
  174. package/dist/core/subagent-wait-interruption.d.ts +11 -0
  175. package/dist/core/subagent-wait-interruption.d.ts.map +1 -0
  176. package/dist/core/subagent-wait-interruption.js +19 -0
  177. package/dist/core/subagent-wait-interruption.js.map +1 -0
  178. package/dist/core/system-prompt.d.ts.map +1 -1
  179. package/dist/core/system-prompt.js +7 -2
  180. package/dist/core/system-prompt.js.map +1 -1
  181. package/dist/core/todo-settings.d.ts +5 -0
  182. package/dist/core/todo-settings.d.ts.map +1 -0
  183. package/dist/core/todo-settings.js +7 -0
  184. package/dist/core/todo-settings.js.map +1 -0
  185. package/dist/core/tools/bash.d.ts.map +1 -1
  186. package/dist/core/tools/bash.js +4 -4
  187. package/dist/core/tools/bash.js.map +1 -1
  188. package/dist/core/tools/edit.d.ts.map +1 -1
  189. package/dist/core/tools/edit.js +5 -3
  190. package/dist/core/tools/edit.js.map +1 -1
  191. package/dist/core/tools/find.d.ts.map +1 -1
  192. package/dist/core/tools/find.js +4 -4
  193. package/dist/core/tools/find.js.map +1 -1
  194. package/dist/core/tools/grep.d.ts.map +1 -1
  195. package/dist/core/tools/grep.js +4 -4
  196. package/dist/core/tools/grep.js.map +1 -1
  197. package/dist/core/tools/ls.d.ts.map +1 -1
  198. package/dist/core/tools/ls.js +4 -4
  199. package/dist/core/tools/ls.js.map +1 -1
  200. package/dist/core/tools/read.d.ts.map +1 -1
  201. package/dist/core/tools/read.js +4 -4
  202. package/dist/core/tools/read.js.map +1 -1
  203. package/dist/core/tools/render-utils.d.ts +14 -5
  204. package/dist/core/tools/render-utils.d.ts.map +1 -1
  205. package/dist/core/tools/render-utils.js +34 -7
  206. package/dist/core/tools/render-utils.js.map +1 -1
  207. package/dist/core/tools/write.d.ts.map +1 -1
  208. package/dist/core/tools/write.js +4 -4
  209. package/dist/core/tools/write.js.map +1 -1
  210. package/dist/core/usage-service.d.ts.map +1 -1
  211. package/dist/core/usage-service.js +5 -3
  212. package/dist/core/usage-service.js.map +1 -1
  213. package/dist/gateway/adapters/discord.d.ts +12 -1
  214. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  215. package/dist/gateway/adapters/discord.js +112 -17
  216. package/dist/gateway/adapters/discord.js.map +1 -1
  217. package/dist/gateway/adapters/telegram.d.ts +4 -2
  218. package/dist/gateway/adapters/telegram.d.ts.map +1 -1
  219. package/dist/gateway/adapters/telegram.js +34 -11
  220. package/dist/gateway/adapters/telegram.js.map +1 -1
  221. package/dist/gateway/agent-bridge.d.ts +14 -3
  222. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  223. package/dist/gateway/agent-bridge.js +252 -60
  224. package/dist/gateway/agent-bridge.js.map +1 -1
  225. package/dist/gateway/approval.d.ts +1 -0
  226. package/dist/gateway/approval.d.ts.map +1 -1
  227. package/dist/gateway/approval.js +60 -18
  228. package/dist/gateway/approval.js.map +1 -1
  229. package/dist/gateway/authz.d.ts +2 -0
  230. package/dist/gateway/authz.d.ts.map +1 -1
  231. package/dist/gateway/authz.js +13 -0
  232. package/dist/gateway/authz.js.map +1 -1
  233. package/dist/gateway/buttons.d.ts +3 -1
  234. package/dist/gateway/buttons.d.ts.map +1 -1
  235. package/dist/gateway/buttons.js +18 -3
  236. package/dist/gateway/buttons.js.map +1 -1
  237. package/dist/gateway/command.d.ts.map +1 -1
  238. package/dist/gateway/command.js +49 -4
  239. package/dist/gateway/command.js.map +1 -1
  240. package/dist/gateway/commands.d.ts.map +1 -1
  241. package/dist/gateway/commands.js +18 -3
  242. package/dist/gateway/commands.js.map +1 -1
  243. package/dist/gateway/config.d.ts +5 -0
  244. package/dist/gateway/config.d.ts.map +1 -1
  245. package/dist/gateway/config.js +5 -0
  246. package/dist/gateway/config.js.map +1 -1
  247. package/dist/gateway/conversations.d.ts +14 -0
  248. package/dist/gateway/conversations.d.ts.map +1 -0
  249. package/dist/gateway/conversations.js +30 -0
  250. package/dist/gateway/conversations.js.map +1 -0
  251. package/dist/gateway/download.d.ts +2 -0
  252. package/dist/gateway/download.d.ts.map +1 -0
  253. package/dist/gateway/download.js +36 -0
  254. package/dist/gateway/download.js.map +1 -0
  255. package/dist/gateway/index.d.ts.map +1 -1
  256. package/dist/gateway/index.js +85 -26
  257. package/dist/gateway/index.js.map +1 -1
  258. package/dist/gateway/mobile-commands.d.ts +24 -0
  259. package/dist/gateway/mobile-commands.d.ts.map +1 -0
  260. package/dist/gateway/mobile-commands.js +422 -0
  261. package/dist/gateway/mobile-commands.js.map +1 -0
  262. package/dist/gateway/presenter.d.ts +16 -0
  263. package/dist/gateway/presenter.d.ts.map +1 -0
  264. package/dist/gateway/presenter.js +210 -0
  265. package/dist/gateway/presenter.js.map +1 -0
  266. package/dist/gateway/router.d.ts +1 -0
  267. package/dist/gateway/router.d.ts.map +1 -1
  268. package/dist/gateway/router.js +32 -3
  269. package/dist/gateway/router.js.map +1 -1
  270. package/dist/gateway/service.d.ts +46 -0
  271. package/dist/gateway/service.d.ts.map +1 -0
  272. package/dist/gateway/service.js +395 -0
  273. package/dist/gateway/service.js.map +1 -0
  274. package/dist/gateway/setup.d.ts +4 -0
  275. package/dist/gateway/setup.d.ts.map +1 -0
  276. package/dist/gateway/setup.js +146 -0
  277. package/dist/gateway/setup.js.map +1 -0
  278. package/dist/gateway/types.d.ts +4 -2
  279. package/dist/gateway/types.d.ts.map +1 -1
  280. package/dist/gateway/types.js.map +1 -1
  281. package/dist/index.d.ts +2 -0
  282. package/dist/index.d.ts.map +1 -1
  283. package/dist/index.js +2 -0
  284. package/dist/index.js.map +1 -1
  285. package/dist/main.d.ts.map +1 -1
  286. package/dist/main.js +2 -1
  287. package/dist/main.js.map +1 -1
  288. package/dist/modes/interactive/components/assistant-message.d.ts +19 -2
  289. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  290. package/dist/modes/interactive/components/assistant-message.js +78 -17
  291. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  292. package/dist/modes/interactive/components/copyable-text.d.ts +27 -0
  293. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -0
  294. package/dist/modes/interactive/components/copyable-text.js +156 -0
  295. package/dist/modes/interactive/components/copyable-text.js.map +1 -0
  296. package/dist/modes/interactive/components/custom-entry.d.ts +1 -0
  297. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  298. package/dist/modes/interactive/components/custom-entry.js +8 -0
  299. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  300. package/dist/modes/interactive/components/custom-message.d.ts +1 -0
  301. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  302. package/dist/modes/interactive/components/custom-message.js +8 -0
  303. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  304. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  305. package/dist/modes/interactive/components/session-selector.js +16 -0
  306. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  307. package/dist/modes/interactive/components/settings-selector.d.ts +8 -1
  308. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  309. package/dist/modes/interactive/components/settings-selector.js +51 -0
  310. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  311. package/dist/modes/interactive/components/thinking-tail.d.ts +9 -2
  312. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  313. package/dist/modes/interactive/components/thinking-tail.js +43 -1
  314. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  315. package/dist/modes/interactive/components/tool-execution.d.ts +4 -3
  316. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  317. package/dist/modes/interactive/components/tool-execution.js +34 -45
  318. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  319. package/dist/modes/interactive/interactive-mode.d.ts +9 -0
  320. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  321. package/dist/modes/interactive/interactive-mode.js +267 -44
  322. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  323. package/dist/modes/interactive/theme/theme.d.ts +1 -0
  324. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  325. package/dist/modes/interactive/theme/theme.js +23 -0
  326. package/dist/modes/interactive/theme/theme.js.map +1 -1
  327. package/dist/node-runtime/agent-session-services-GZVSOGYR.js +49 -0
  328. package/dist/node-runtime/{builtin-extensions-JCOPAAB5.js → builtin-extensions-QVCXNQT4.js} +6 -5
  329. package/dist/node-runtime/{chunk-LTYWTR3V.js → chunk-2MI5OPMN.js} +17 -2
  330. package/dist/node-runtime/{chunk-W3CVH5RX.js → chunk-2TKODGBZ.js} +11 -6
  331. package/dist/node-runtime/chunk-4EULYYR4.js +62 -0
  332. package/dist/node-runtime/{chunk-6N22HULO.js → chunk-5D7LC2ZQ.js} +7 -2
  333. package/dist/node-runtime/{chunk-KBKMCJDU.js → chunk-5ZQXRPMC.js} +19 -4
  334. package/dist/node-runtime/{chunk-BOHIDQT4.js → chunk-6VYZ5UFP.js} +1 -1
  335. package/dist/node-runtime/chunk-AZJHNQKQ.js +205 -0
  336. package/dist/node-runtime/{chunk-A3KMVBZV.js → chunk-BBUVIEZB.js} +1 -10
  337. package/dist/node-runtime/{chunk-IRPJXI6U.js → chunk-BX2RB477.js} +1 -1
  338. package/dist/node-runtime/chunk-CCCN2UCX.js +14 -0
  339. package/dist/node-runtime/{chunk-25I2BHAA.js → chunk-CSUZVNYE.js} +1 -1
  340. package/dist/node-runtime/chunk-DD5YWFSJ.js +708 -0
  341. package/dist/node-runtime/chunk-DQMGU675.js +3409 -0
  342. package/dist/node-runtime/{chunk-QZMODZQ2.js → chunk-E24EO34J.js} +2 -1
  343. package/dist/node-runtime/chunk-EKVFP6YF.js +355 -0
  344. package/dist/node-runtime/chunk-GJ2RDBRL.js +672 -0
  345. package/dist/node-runtime/{chunk-W3SILANP.js → chunk-GMHJCCEN.js} +8 -8
  346. package/dist/node-runtime/{chunk-DDWHZ633.js → chunk-GS42T6MX.js} +1 -1
  347. package/dist/node-runtime/chunk-GS66LV4M.js +2830 -0
  348. package/dist/node-runtime/chunk-H4K3JDRB.js +47 -0
  349. package/dist/node-runtime/{chunk-2SJB2AWP.js → chunk-HMBGROQK.js} +3 -3
  350. package/dist/node-runtime/{chunk-GB2MGFLI.js → chunk-HPUP7E4T.js} +216 -201
  351. package/dist/node-runtime/{chunk-YMEAYRBE.js → chunk-HTFRRDSF.js} +2 -7
  352. package/dist/node-runtime/{chunk-OPEK5RRY.js → chunk-IF24A3FH.js} +1 -1
  353. package/dist/node-runtime/chunk-IMLCWLPI.js +9 -0
  354. package/dist/node-runtime/chunk-KKUTQQV7.js +144 -0
  355. package/dist/node-runtime/chunk-LFZDVKSP.js +521 -0
  356. package/dist/node-runtime/{chunk-2BUAYZ7K.js → chunk-LLUIPGDR.js} +581 -197
  357. package/dist/node-runtime/{chunk-7NBZ5P7I.js → chunk-NAY6UUQZ.js} +1 -1
  358. package/dist/node-runtime/chunk-OAR4TYZE.js +146 -0
  359. package/dist/node-runtime/{chunk-STERBGUB.js → chunk-OFKSVRV7.js} +2 -2
  360. package/dist/node-runtime/{chunk-JZQ7F36T.js → chunk-PCEW76PM.js} +19 -3
  361. package/dist/node-runtime/{chunk-WLLDXJRT.js → chunk-QAZOULTU.js} +29 -1014
  362. package/dist/node-runtime/{chunk-6KDIOJL3.js → chunk-QH6YL7VK.js} +3 -3
  363. package/dist/node-runtime/chunk-R3K2F5GI.js +122 -0
  364. package/dist/node-runtime/{chunk-RNBHABBA.js → chunk-RDDAZOMU.js} +23 -0
  365. package/dist/node-runtime/{chunk-SY2TFMLO.js → chunk-RIR5EDDJ.js} +46 -151
  366. package/dist/node-runtime/chunk-RMQZU2YU.js +117 -0
  367. package/dist/node-runtime/{chunk-6BEIBLQ3.js → chunk-RWTKOC3B.js} +1 -1
  368. package/dist/node-runtime/{chunk-G6LRAP36.js → chunk-TQGPP4SC.js} +1 -1
  369. package/dist/node-runtime/{chunk-Y5KOEMBH.js → chunk-TVJUOJZJ.js} +9 -674
  370. package/dist/node-runtime/chunk-UAEOTO52.js +119 -0
  371. package/dist/node-runtime/{chunk-AY6CAJSL.js → chunk-UJOCPOMX.js} +6 -3
  372. package/dist/node-runtime/chunk-UP2XBVH5.js +40 -0
  373. package/dist/node-runtime/{chunk-WJVFOIB5.js → chunk-UQUCFAJ3.js} +1 -1
  374. package/dist/node-runtime/chunk-URD2SLIT.js +1019 -0
  375. package/dist/node-runtime/chunk-US544NN6.js +13 -0
  376. package/dist/node-runtime/chunk-UWPJL22I.js +341 -0
  377. package/dist/node-runtime/{chunk-4I23VTC4.js → chunk-VWCE2HSZ.js} +21 -124
  378. package/dist/node-runtime/{chunk-VZR3NCM7.js → chunk-W64JC4E7.js} +18 -14
  379. package/dist/node-runtime/{chunk-AWVD5IEY.js → chunk-X3URCYCU.js} +23 -12
  380. package/dist/node-runtime/{chunk-GKLEQ3I4.js → chunk-XLTL257W.js} +126 -27
  381. package/dist/node-runtime/{chunk-WKDK4C5P.js → chunk-YDO2F2IA.js} +38 -164
  382. package/dist/node-runtime/{chunk-PDNXVXMD.js → chunk-YHQ3NBB3.js} +58 -48
  383. package/dist/node-runtime/chunk-YPHAIRZT.js +10 -0
  384. package/dist/node-runtime/cli-runtime.js +2 -2
  385. package/dist/node-runtime/command-PDVTBRWA.js +45 -0
  386. package/dist/node-runtime/{commands-MV5KOZ64.js → commands-KAMO2T6P.js} +10 -10
  387. package/dist/node-runtime/commands-XDCFGIGW.js +36 -0
  388. package/dist/node-runtime/config-RORQUQFG.js +20 -0
  389. package/dist/node-runtime/{customize-LF5VST47.js → customize-VFJV3U6A.js} +2 -1
  390. package/dist/node-runtime/{direct-tool-executor-BK7CLEBX.js → direct-tool-executor-YAVOLDFY.js} +8 -8
  391. package/dist/node-runtime/{export-html-TEXVV5RP.js → export-html-KSOIMVPI.js} +4 -3
  392. package/dist/node-runtime/{extension-input-O4HSAEM4.js → extension-input-E7BJZ35H.js} +4 -4
  393. package/dist/node-runtime/{extension-selector-X5FCX43D.js → extension-selector-WU42XDTU.js} +4 -4
  394. package/dist/node-runtime/{extract-XLQSJN4V.js → extract-EQJE7FZZ.js} +2 -2
  395. package/dist/node-runtime/{gateway-BM6NLOH4.js → gateway-AYWM5DIO.js} +275 -994
  396. package/dist/node-runtime/{gemini-search-U7SUMPQA.js → gemini-search-35OCRFLN.js} +1 -1
  397. package/dist/node-runtime/{gemini-url-context-PXWCBQHK.js → gemini-url-context-UQY3PHHW.js} +2 -2
  398. package/dist/node-runtime/index.js +104 -65
  399. package/dist/node-runtime/{init-3C7Z24OI.js → init-X2LIUB2H.js} +3 -3
  400. package/dist/node-runtime/{install-cli-EXMJQESX.js → install-cli-3BO4MMQ6.js} +21 -82
  401. package/dist/node-runtime/interactive-mode-4MFRKAHG.js +72 -0
  402. package/dist/node-runtime/{interactive-view-ILS6TAN5.js → interactive-view-TUZHCQM3.js} +8 -8
  403. package/dist/node-runtime/lunr-browser-RYFIIVJN.js +174 -0
  404. package/dist/node-runtime/{lunr-cron-4VHP4E4B.js → lunr-cron-YWXEPZMQ.js} +19 -5
  405. package/dist/node-runtime/main.js +44 -31
  406. package/dist/node-runtime/{memory-cap-3S4XRLNP.js → memory-cap-EL3KL4JJ.js} +2 -1
  407. package/dist/node-runtime/mobile-commands-LVHDAUDP.js +32 -0
  408. package/dist/node-runtime/model-runtime-PLQKAG4B.js +16 -0
  409. package/dist/node-runtime/{model-tiers-NJLHUEGK.js → model-tiers-OU3U5CZG.js} +2 -1
  410. package/dist/node-runtime/{package-manager-cli-N37546V5.js → package-manager-cli-6GT3Z3CK.js} +22 -15
  411. package/dist/node-runtime/{pi-intercom-NV2LW6X7.js → pi-intercom-HBPK5HSJ.js} +4 -1
  412. package/dist/node-runtime/{pi-mcp-adapter-GUFZWW54.js → pi-mcp-adapter-E6WULBKF.js} +4 -4
  413. package/dist/node-runtime/{pi-subagents-6MUIFNDM.js → pi-subagents-CDWK2AKY.js} +236 -79
  414. package/dist/node-runtime/{pi-web-access-2CQGFLT2.js → pi-web-access-WTGMNZ32.js} +15 -15
  415. package/dist/node-runtime/process-registry-4FAKZQOL.js +31 -0
  416. package/dist/node-runtime/{proxy-modes-V6YVFH3C.js → proxy-modes-OSQCWRBI.js} +9 -9
  417. package/dist/node-runtime/rpc-entry.js +44 -31
  418. package/dist/node-runtime/{rpc-mode-W5ZTLTMZ.js → rpc-mode-O3XV4SID.js} +2 -2
  419. package/dist/node-runtime/runtime-4VA6JKNF.js +373 -0
  420. package/dist/node-runtime/{runtime-bridges-2VQTLPOZ.js → runtime-bridges-3XUQ46XW.js} +6 -5
  421. package/dist/node-runtime/service-ISSP6VHE.js +36 -0
  422. package/dist/node-runtime/session-handoff-HC7R5E24.js +33 -0
  423. package/dist/node-runtime/{session-manager-E7AREDTV.js → session-manager-CFN4UFM2.js} +2 -1
  424. package/dist/node-runtime/{session-selector-FJ7M2AIX.js → session-selector-GIM4DHQ2.js} +5 -4
  425. package/dist/node-runtime/{settings-manager-CUGAZWAB.js → settings-manager-6VEMXRDL.js} +7 -2
  426. package/dist/node-runtime/setup-5SR2J35A.js +155 -0
  427. package/dist/node-runtime/setup-JBKOLJ6F.js +18 -0
  428. package/dist/node-runtime/{subagent-executor-MH4A7CCF.js → subagent-executor-M5VWB3D3.js} +26 -18
  429. package/dist/node-runtime/theme-UOO5RVFN.js +68 -0
  430. package/dist/node-runtime/trust-manager-MMISNCYO.js +17 -0
  431. package/dist/node-runtime/{update-cli-XTZMZGOL.js → update-cli-UVKJWRRJ.js} +7 -2
  432. package/dist/node-runtime/usage-service-LFB2SWYV.js +37 -0
  433. package/dist/node-runtime/{video-extract-OYT5WKS5.js → video-extract-OOZHR7SU.js} +2 -2
  434. package/dist/node-runtime/{youtube-extract-TQYKGFGS.js → youtube-extract-FNPAUNHU.js} +6 -6
  435. package/docs/browser.md +86 -0
  436. package/docs/extensions.md +2 -0
  437. package/docs/features.md +96 -16
  438. package/docs/interactive-startup.md +2 -1
  439. package/docs/sessions.md +10 -0
  440. package/docs/settings.md +2 -0
  441. package/docs/tui.md +2 -0
  442. package/docs/usage.md +16 -0
  443. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  444. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  445. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  446. package/examples/extensions/gondolin/package-lock.json +2 -2
  447. package/examples/extensions/gondolin/package.json +1 -1
  448. package/examples/extensions/sandbox/package-lock.json +2 -2
  449. package/examples/extensions/sandbox/package.json +1 -1
  450. package/examples/extensions/with-deps/package-lock.json +2 -2
  451. package/examples/extensions/with-deps/package.json +1 -1
  452. package/package.json +7 -4
  453. package/scripts/install-browser.mjs +20 -0
  454. package/dist/node-runtime/agent-session-services-C743TYQE.js +0 -37
  455. package/dist/node-runtime/chunk-VGYZ3APQ.js +0 -59
  456. package/dist/node-runtime/chunk-XI77KVKA.js +0 -6009
  457. package/dist/node-runtime/command-P4NYCJ2M.js +0 -13
  458. package/dist/node-runtime/interactive-mode-EVVBA64D.js +0 -59
  459. package/dist/node-runtime/{chunk-UWQYRSYQ.js → chunk-YJMMG7C6.js} +25 -25
  460. package/dist/node-runtime/{mcp-panel-IIGMXQGP.js → mcp-panel-KTTFXJZ4.js} +3 -3
  461. package/dist/node-runtime/{src-BPQFJR76.js → src-IVPNZ2BX.js} +9 -9
@@ -1,14 +1,17 @@
1
1
  import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
2
+ import {
3
+ typebox_exports
4
+ } from "./chunk-PL6JKXWI.js";
2
5
  import {
3
6
  spinners
4
7
  } from "./chunk-5ZH3ZFIZ.js";
5
8
  import {
6
- typebox_exports
7
- } from "./chunk-PL6JKXWI.js";
9
+ TODOS_ENABLED_CHANGED_SYMBOL
10
+ } from "./chunk-CCCN2UCX.js";
8
11
  import {
9
12
  isPlanModeActive,
10
13
  requestPlanApproval
11
- } from "./chunk-6N22HULO.js";
14
+ } from "./chunk-5D7LC2ZQ.js";
12
15
  import {
13
16
  ashxj_tui_default
14
17
  } from "./chunk-JHYKXIMM.js";
@@ -17,7 +20,7 @@ import {
17
20
  } from "./chunk-PVCDKGR6.js";
18
21
  import {
19
22
  keyText
20
- } from "./chunk-DDWHZ633.js";
23
+ } from "./chunk-GS42T6MX.js";
21
24
  import {
22
25
  getAgentDir
23
26
  } from "./chunk-FQMM2EZ2.js";
@@ -802,17 +805,24 @@ function lunr_todos_default(pi) {
802
805
  let next = todos.filter((t) => t.status !== "completed");
803
806
  next.length !== todos.length && (todos = next, refreshWidget());
804
807
  }
808
+ let handleEnabledChanged = (enabled) => {
809
+ enabled || (todos = [], refreshWidget());
810
+ };
811
+ function registerEnabledBridge() {
812
+ globalThis[TODOS_ENABLED_CHANGED_SYMBOL] = handleEnabledChanged;
813
+ }
814
+ registerEnabledBridge();
805
815
  function registerExpandedBridge() {
806
816
  globalThis[EXPANDED_BRIDGE_SYMBOL] = (value) => {
807
817
  expanded = !!value, refreshWidget();
808
818
  };
809
819
  }
810
820
  registerExpandedBridge(), pi.on("session_start", (_event, ctx) => {
811
- lastCtx = ctx, todos = [], expanded = ctx.hasUI ? ctx.ui.getToolsExpanded?.() ?? !1 : !1, registerExpandedBridge(), ctx.hasUI && ctx.ui.setWidget(WIDGET_KEY, void 0);
821
+ lastCtx = ctx, todos = [], expanded = ctx.hasUI ? ctx.ui.getToolsExpanded?.() ?? !1 : !1, registerExpandedBridge(), registerEnabledBridge(), ctx.hasUI && ctx.ui.setWidget(WIDGET_KEY, void 0);
812
822
  }), pi.on("message_start", (event, ctx) => {
813
823
  event.message?.role === "user" && (lastCtx = ctx, pruneCompleted());
814
824
  }), pi.on("session_shutdown", () => {
815
- lastCtx?.hasUI && lastCtx.ui.setWidget(WIDGET_KEY, void 0), lastCtx = null, delete globalThis[EXPANDED_BRIDGE_SYMBOL];
825
+ lastCtx?.hasUI && lastCtx.ui.setWidget(WIDGET_KEY, void 0), lastCtx = null, delete globalThis[EXPANDED_BRIDGE_SYMBOL], globalThis[TODOS_ENABLED_CHANGED_SYMBOL] === handleEnabledChanged && delete globalThis[TODOS_ENABLED_CHANGED_SYMBOL];
816
826
  }), pi.registerTool({
817
827
  name: "todo",
818
828
  label: "Todo",
@@ -915,13 +925,14 @@ var lightBuiltinExtensions = [
915
925
  ], DEFERRED_BUILTIN_LOADERS = [
916
926
  { name: "pi-ollama-cloud", load: () => import("./pi-ollama-cloud-2F3Y2QNM.js") },
917
927
  { name: "narumiruna-pi-goal", load: () => import("./goal-NJEE5CTU.js") },
918
- { name: "lunr-cron", load: () => import("./lunr-cron-4VHP4E4B.js") },
919
- { name: "pi-intercom", load: () => import("./pi-intercom-NV2LW6X7.js") },
928
+ { name: "lunr-cron", load: () => import("./lunr-cron-YWXEPZMQ.js") },
929
+ { name: "pi-intercom", load: () => import("./pi-intercom-HBPK5HSJ.js") },
920
930
  { name: "pi-prompt-template-model", load: () => import("./pi-prompt-template-model-QWTCGLJU.js") },
921
- { name: "pi-subagents", load: () => import("./pi-subagents-6MUIFNDM.js") },
922
- { name: "pi-web-access", load: () => import("./pi-web-access-2CQGFLT2.js") },
923
- { name: "pi-lsp-extension", load: () => import("./src-BPQFJR76.js") },
924
- { name: "pi-mcp-adapter", load: () => import("./pi-mcp-adapter-GUFZWW54.js") }
931
+ { name: "pi-subagents", load: () => import("./pi-subagents-CDWK2AKY.js") },
932
+ { name: "pi-web-access", load: () => import("./pi-web-access-WTGMNZ32.js") },
933
+ { name: "lunr-browser", load: () => import("./lunr-browser-RYFIIVJN.js") },
934
+ { name: "pi-lsp-extension", load: () => import("./src-IVPNZ2BX.js") },
935
+ { name: "pi-mcp-adapter", load: () => import("./pi-mcp-adapter-E6WULBKF.js") }
925
936
  ], DEFERRED_BUILTIN_EXTENSION_NAMES = DEFERRED_BUILTIN_LOADERS.map((entry) => entry.name), DEFERRED_BUILTIN_FLAGS = ["mcp-config"];
926
937
  async function loadDeferredBuiltinExtensions() {
927
938
  return await Promise.all(DEFERRED_BUILTIN_LOADERS.map(async ({ name, load }) => {
@@ -4,6 +4,12 @@ import {
4
4
  createCompactionSummaryMessage,
5
5
  createCustomMessage
6
6
  } from "./chunk-FVDOXRUD.js";
7
+ import {
8
+ SessionOwnership,
9
+ SessionOwnershipError,
10
+ canonicalSessionPath,
11
+ writeSessionJson
12
+ } from "./chunk-UAEOTO52.js";
7
13
  import {
8
14
  getAgentDir,
9
15
  getSessionsDir,
@@ -13,8 +19,8 @@ import {
13
19
 
14
20
  // packages/coding-agent/dist/core/session-manager.js
15
21
  import { uuidv7 } from "@ashx-j/lunr-agent";
16
- import { randomUUID } from "crypto";
17
- import { appendFileSync, closeSync, createReadStream, existsSync, mkdirSync, openSync, readdirSync, readSync, statSync, writeFileSync } from "fs";
22
+ import { createHash, randomUUID } from "crypto";
23
+ import { appendFileSync, closeSync, createReadStream, existsSync, mkdirSync, openSync, readdirSync, readFileSync, readSync, statSync, writeFileSync } from "fs";
18
24
  import { readdir, stat } from "fs/promises";
19
25
  import { join, resolve } from "path";
20
26
  import { createInterface } from "readline";
@@ -332,29 +338,107 @@ var SessionManager = class _SessionManager {
332
338
  labelsById = /* @__PURE__ */ new Map();
333
339
  labelTimestampsById = /* @__PURE__ */ new Map();
334
340
  leafId = null;
341
+ ownership;
342
+ readOnly = !1;
343
+ disposed = !1;
344
+ permissionMode;
345
+ getPermissionMode() {
346
+ return this.permissionMode;
347
+ }
348
+ setPermissionMode(mode) {
349
+ this.assertWritable(), this.permissionMode = mode, this.saveLeaf();
350
+ }
351
+ assertWritable() {
352
+ if (this.readOnly || this.disposed)
353
+ throw new SessionOwnershipError(this.sessionFile ?? "in-memory", "Session is read-only or released.");
354
+ if (this.persist && (this.ownership?.assert(), this.ownership && this.sessionFile && canonicalSessionPath(this.sessionFile) !== this.ownership.owner.file))
355
+ throw new SessionOwnershipError(this.sessionFile, "Session ownership does not match the write target.");
356
+ }
357
+ getOwnership() {
358
+ return this.ownership;
359
+ }
360
+ copyInMemory() {
361
+ let copy = _SessionManager.inMemory(this.cwd);
362
+ return copy.sessionId = this.sessionId, copy.fileEntries = structuredClone(this.fileEntries), copy._buildIndex(), copy.leafId = this.leafId, copy;
363
+ }
364
+ dispose() {
365
+ this.disposed || (this.readOnly || this.saveLeaf(), this.ownership?.release(), this.disposed = !0);
366
+ }
367
+ flush() {
368
+ this.assertWritable(), this.persist && (this._rewriteFile(), this.flushed = !0, this.saveLeaf());
369
+ }
370
+ claim(file) {
371
+ this.assertWritable();
372
+ let canonical = canonicalSessionPath(file);
373
+ if (this.ownership?.owner.file === canonical)
374
+ return;
375
+ let next = new SessionOwnership(canonical);
376
+ this.saveLeaf(), this.ownership?.release(), this.ownership = next;
377
+ }
378
+ saveLeaf() {
379
+ !this.persist || !this.sessionFile || !this.flushed || (this.assertWritable(), writeSessionJson(`${this.sessionFile}.leaf.json`, {
380
+ id: this.sessionId,
381
+ leafId: this.leafId,
382
+ permissionMode: this.permissionMode,
383
+ revision: createHash("sha256").update(readFileSync(this.sessionFile)).digest("hex")
384
+ }));
385
+ }
386
+ restoreLeaf() {
387
+ if (this.sessionFile)
388
+ try {
389
+ let saved = JSON.parse(readFileSync(`${this.sessionFile}.leaf.json`, "utf8"));
390
+ saved.id === this.sessionId && ["manual", "yolo", "plan", "auto"].includes(saved.permissionMode) && (this.permissionMode = saved.permissionMode), saved.id === this.sessionId && (saved.leafId === null || this.byId.has(saved.leafId)) && saved.revision === createHash("sha256").update(readFileSync(this.sessionFile)).digest("hex") && (this.leafId = saved.leafId);
391
+ } catch {
392
+ }
393
+ }
335
394
  constructor(cwd, sessionDir, sessionFile, persist, newSessionOptions) {
336
- this.cwd = resolvePath(cwd), this.sessionDir = normalizePath(sessionDir), this.persist = persist, persist && this.sessionDir && !existsSync(this.sessionDir) && mkdirSync(this.sessionDir, { recursive: !0 }), sessionFile ? this.setSessionFile(sessionFile) : this.newSession(newSessionOptions);
395
+ this.cwd = resolvePath(cwd), this.sessionDir = normalizePath(sessionDir), this.persist = persist, persist && this.sessionDir && !existsSync(this.sessionDir) && mkdirSync(this.sessionDir, { recursive: !0 });
396
+ try {
397
+ sessionFile ? this.loadSessionFile(sessionFile) : this.newSession(newSessionOptions), this.ownership?.bindSession(this.sessionId);
398
+ } catch (error) {
399
+ throw this.ownership?.release(), error;
400
+ }
337
401
  }
338
402
  /** Switch to a different session file (used for resume and branching) */
339
403
  setSessionFile(sessionFile) {
340
- if (this.sessionFile = resolvePath(sessionFile), existsSync(this.sessionFile)) {
404
+ if (this.assertWritable(), this.sessionFile && canonicalSessionPath(sessionFile) === canonicalSessionPath(this.sessionFile)) {
405
+ this.loadSessionFile(sessionFile);
406
+ return;
407
+ }
408
+ let next = new _SessionManager(this.cwd, this.sessionDir, sessionFile, this.persist);
409
+ try {
410
+ this.dispose();
411
+ } catch (error) {
412
+ throw next.dispose(), error;
413
+ }
414
+ Object.assign(this, next);
415
+ }
416
+ loadSessionFile(sessionFile) {
417
+ if (this.claim(sessionFile), this.sessionFile = resolvePath(sessionFile), existsSync(this.sessionFile)) {
341
418
  if (this.fileEntries = loadEntriesFromFile(this.sessionFile), this.fileEntries.length === 0) {
342
419
  let explicitPath = this.sessionFile;
343
420
  if (statSync(explicitPath).size > 0)
344
421
  throw new Error(`Session file is not a valid pi session: ${explicitPath}`);
345
- this.newSession(), this.sessionFile = explicitPath, this._rewriteFile(), this.flushed = !0;
422
+ this.initializeSession(), this.sessionFile = explicitPath, this._rewriteFile(), this.flushed = !0;
346
423
  return;
347
424
  }
348
425
  let header = this.fileEntries.find((e) => e.type === "session");
349
- this.sessionId = header?.id ?? createSessionId(), migrateToCurrentVersion(this.fileEntries) && this._rewriteFile(), this._buildIndex(), this.flushed = !0;
426
+ this.sessionId = header?.id ?? createSessionId(), migrateToCurrentVersion(this.fileEntries) && this._rewriteFile(), this._buildIndex(), this.restoreLeaf(), this.flushed = !0;
350
427
  } else {
351
428
  let explicitPath = this.sessionFile;
352
- this.newSession(), this.sessionFile = explicitPath;
429
+ this.initializeSession(), this.sessionFile = explicitPath;
353
430
  }
354
431
  }
355
432
  newSession(options) {
433
+ this.assertWritable();
434
+ let id = options?.id ?? createSessionId();
435
+ assertValidSessionId(id);
436
+ let timestamp = (/* @__PURE__ */ new Date()).toISOString();
437
+ return this.persist && this.claim(join(this.getSessionDir(), `${timestamp.replace(/[:.]/g, "-")}_${id}.jsonl`)), this.initializeSession({ ...options, id }, timestamp), this.ownership?.bindSession(this.sessionId), this.sessionFile;
438
+ }
439
+ initializeSession(options, timestamp = (/* @__PURE__ */ new Date()).toISOString()) {
356
440
  options?.id !== void 0 && assertValidSessionId(options.id), this.sessionId = options?.id ?? createSessionId();
357
- let timestamp = (/* @__PURE__ */ new Date()).toISOString(), header = {
441
+ let header = {
358
442
  type: "session",
359
443
  version: CURRENT_SESSION_VERSION,
360
444
  id: this.sessionId,
@@ -362,7 +446,7 @@ var SessionManager = class _SessionManager {
362
446
  cwd: this.cwd,
363
447
  parentSession: options?.parentSession
364
448
  };
365
- if (this.fileEntries = [header], this.byId.clear(), this.labelsById.clear(), this.labelTimestampsById.clear(), this.leafId = null, this.flushed = !1, this.persist) {
449
+ if (this.fileEntries = [header], this.byId.clear(), this.labelsById.clear(), this.labelTimestampsById.clear(), this.leafId = null, this.flushed = !1, this.permissionMode = void 0, this.persist) {
366
450
  let fileTimestamp = timestamp.replace(/[:.]/g, "-");
367
451
  this.sessionFile = join(this.getSessionDir(), `${fileTimestamp}_${this.sessionId}.jsonl`);
368
452
  }
@@ -374,7 +458,7 @@ var SessionManager = class _SessionManager {
374
458
  entry.type !== "session" && (this.byId.set(entry.id, entry), this.leafId = entry.id, entry.type === "label" && (entry.label ? (this.labelsById.set(entry.targetId, entry.label), this.labelTimestampsById.set(entry.targetId, entry.timestamp)) : (this.labelsById.delete(entry.targetId), this.labelTimestampsById.delete(entry.targetId))));
375
459
  }
376
460
  _rewriteFile() {
377
- if (!this.persist || !this.sessionFile)
461
+ if (this.assertWritable(), !this.persist || !this.sessionFile)
378
462
  return;
379
463
  let fd = openSync(this.sessionFile, "w");
380
464
  try {
@@ -404,7 +488,7 @@ var SessionManager = class _SessionManager {
404
488
  return this.sessionFile;
405
489
  }
406
490
  _persist(entry) {
407
- if (!this.persist || !this.sessionFile)
491
+ if (this.assertWritable(), !this.persist || !this.sessionFile)
408
492
  return;
409
493
  if (!this.fileEntries.some((e) => e.type === "message" && e.message.role === "assistant")) {
410
494
  this.flushed ? appendFileSync(this.sessionFile, `${JSON.stringify(entry)}
@@ -427,7 +511,7 @@ var SessionManager = class _SessionManager {
427
511
  }
428
512
  }
429
513
  _appendEntry(entry) {
430
- this.fileEntries.push(entry), this.byId.set(entry.id, entry), this.leafId = entry.id, this._persist(entry);
514
+ this.assertWritable(), this.fileEntries.push(entry), this.byId.set(entry.id, entry), this.leafId = entry.id, this._persist(entry);
431
515
  }
432
516
  /** Append a message as child of current leaf, then advance leaf. Returns entry id.
433
517
  * Does not allow writing CompactionSummaryMessage and BranchSummaryMessage directly.
@@ -658,9 +742,9 @@ var SessionManager = class _SessionManager {
658
742
  * are not modified or deleted.
659
743
  */
660
744
  branch(branchFromId) {
661
- if (!this.byId.has(branchFromId))
745
+ if (this.assertWritable(), !this.byId.has(branchFromId))
662
746
  throw new Error(`Entry ${branchFromId} not found`);
663
- this.leafId = branchFromId;
747
+ this.leafId = branchFromId, this.flush();
664
748
  }
665
749
  /**
666
750
  * Reset the leaf pointer to null (before any entries).
@@ -668,7 +752,7 @@ var SessionManager = class _SessionManager {
668
752
  * Use this when navigating to re-edit the first user message.
669
753
  */
670
754
  resetLeaf() {
671
- this.leafId = null;
755
+ this.assertWritable(), this.leafId = null, this.flush();
672
756
  }
673
757
  /**
674
758
  * Start a new branch with a summary of the abandoned path.
@@ -676,7 +760,7 @@ var SessionManager = class _SessionManager {
676
760
  * context from the abandoned conversation path.
677
761
  */
678
762
  branchWithSummary(branchFromId, summary, details, fromHook) {
679
- if (branchFromId !== null && !this.byId.has(branchFromId))
763
+ if (this.assertWritable(), branchFromId !== null && !this.byId.has(branchFromId))
680
764
  throw new Error(`Entry ${branchFromId} not found`);
681
765
  this.leafId = branchFromId;
682
766
  let entry = {
@@ -697,6 +781,7 @@ var SessionManager = class _SessionManager {
697
781
  * Returns the new session file path, or undefined if not persisting.
698
782
  */
699
783
  createBranchedSession(leafId) {
784
+ this.assertWritable();
700
785
  let previousSessionFile = this.sessionFile, path = this.getBranch(leafId);
701
786
  if (path.length === 0)
702
787
  throw new Error(`Entry ${leafId} not found`);
@@ -726,7 +811,7 @@ var SessionManager = class _SessionManager {
726
811
  };
727
812
  pathEntryIds.add(labelEntry.id), labelEntries2.push(labelEntry), parentId2 = labelEntry.id;
728
813
  }
729
- return this.fileEntries = [header, ...pathWithoutLabels, ...labelEntries2], this.sessionId = newSessionId, this.sessionFile = newSessionFile, this._buildIndex(), this.fileEntries.some((e) => e.type === "message" && e.message.role === "assistant") ? (this._rewriteFile(), this.flushed = !0) : this.flushed = !1, newSessionFile;
814
+ return this.claim(newSessionFile), this.fileEntries = [header, ...pathWithoutLabels, ...labelEntries2], this.sessionId = newSessionId, this.ownership?.bindSession(this.sessionId), this.sessionFile = newSessionFile, this._buildIndex(), this.fileEntries.some((e) => e.type === "message" && e.message.role === "assistant") ? (this._rewriteFile(), this.flushed = !0) : this.flushed = !1, newSessionFile;
730
815
  }
731
816
  let labelEntries = [], parentId = pathWithoutLabels[pathWithoutLabels.length - 1]?.id || null;
732
817
  for (let { targetId, label, timestamp: labelTimestamp } of labelsToWrite) {
@@ -758,8 +843,21 @@ var SessionManager = class _SessionManager {
758
843
  * @param cwdOverride Optional cwd override instead of the session header cwd.
759
844
  */
760
845
  static open(path, sessionDir, cwdOverride) {
761
- let resolvedPath = resolvePath(path), header = loadEntriesFromFile(resolvedPath).find((e) => e.type === "session"), cwd = cwdOverride ?? header?.cwd ?? process.cwd(), dir = sessionDir ? normalizePath(sessionDir) : resolve(resolvedPath, "..");
762
- return new _SessionManager(cwd, dir, resolvedPath, !0);
846
+ let resolvedPath = resolvePath(path), dir = sessionDir ? normalizePath(sessionDir) : resolve(resolvedPath, ".."), manager = new _SessionManager(cwdOverride ?? process.cwd(), dir, resolvedPath, !0);
847
+ return manager.cwd = resolvePath(cwdOverride ?? manager.getHeader()?.cwd ?? process.cwd()), manager;
848
+ }
849
+ static forkBranch(path, leafId, sessionDir) {
850
+ let manager = _SessionManager.openReadOnly(path);
851
+ return manager.readOnly = !1, manager.persist = !0, sessionDir && (manager.sessionDir = sessionDir), manager.createBranchedSession(leafId), manager;
852
+ }
853
+ static openReadOnly(path) {
854
+ let file = canonicalSessionPath(path), entries = loadEntriesFromFile(file);
855
+ migrateToCurrentVersion(entries);
856
+ let header = entries.find((entry) => entry.type === "session");
857
+ if (!header)
858
+ throw new Error(`Invalid session: ${file}`);
859
+ let manager = _SessionManager.inMemory(header.cwd);
860
+ return manager.sessionFile = file, manager.sessionDir = resolve(file, ".."), manager.sessionId = header.id, manager.fileEntries = entries, manager._buildIndex(), manager.restoreLeaf(), manager.readOnly = !0, manager;
763
861
  }
764
862
  /**
765
863
  * Continue the most recent session, or create new if none.
@@ -789,20 +887,21 @@ var SessionManager = class _SessionManager {
789
887
  throw new Error(`Cannot fork: source session has no header: ${resolvedSourcePath}`);
790
888
  let dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(resolvedTargetCwd);
791
889
  existsSync(dir) || mkdirSync(dir, { recursive: !0 }), options?.id !== void 0 && assertValidSessionId(options.id);
792
- let newSessionId = options?.id ?? createSessionId(), timestamp = (/* @__PURE__ */ new Date()).toISOString(), fileTimestamp = timestamp.replace(/[:.]/g, "-"), newSessionFile = join(dir, `${fileTimestamp}_${newSessionId}.jsonl`);
793
- writeFileSync(newSessionFile, `${JSON.stringify({
890
+ let newSessionId = options?.id ?? createSessionId(), timestamp = (/* @__PURE__ */ new Date()).toISOString(), fileTimestamp = timestamp.replace(/[:.]/g, "-"), newSessionFile = join(dir, `${fileTimestamp}_${newSessionId}.jsonl`), newHeader = {
794
891
  type: "session",
795
892
  version: CURRENT_SESSION_VERSION,
796
893
  id: newSessionId,
797
894
  timestamp,
798
895
  cwd: resolvedTargetCwd,
799
896
  parentSession: resolvedSourcePath
800
- })}
801
- `, { flag: "wx" });
802
- for (let entry of sourceEntries)
803
- entry.type !== "session" && appendFileSync(newSessionFile, `${JSON.stringify(entry)}
804
- `);
805
- return new _SessionManager(resolvedTargetCwd, dir, newSessionFile, !0);
897
+ }, manager = new _SessionManager(resolvedTargetCwd, dir, newSessionFile, !0);
898
+ try {
899
+ manager.fileEntries = [newHeader, ...sourceEntries.filter((entry) => entry.type !== "session")], manager.sessionId = newSessionId, manager.ownership?.bindSession(newSessionId), manager._buildIndex();
900
+ let snapshot = _SessionManager.openReadOnly(sourcePath);
901
+ return manager.leafId = snapshot.getLeafId(), manager.flush(), manager;
902
+ } catch (error) {
903
+ throw manager.dispose(), error;
904
+ }
806
905
  }
807
906
  /**
808
907
  * List all sessions for a directory.