@ashx-j/lunr 0.2.26 → 0.2.28

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 (697) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/LICENSE +22 -0
  3. package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-thinking.js +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  7. package/dist/builtin-extensions/ashxj-tui.d.ts +11 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  9. package/dist/builtin-extensions/ashxj-tui.js +6 -10
  10. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  11. package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
  12. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  13. package/dist/builtin-extensions/lunr-cron.js +94 -108
  14. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  16. package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
  17. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  18. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
  19. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js +5 -2
  20. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
  21. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
  22. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
  23. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
  24. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  25. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
  26. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  27. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  28. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  29. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  30. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  31. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  32. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  33. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  34. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
  36. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  37. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  38. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
  39. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  40. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
  41. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
  43. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
  44. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
  45. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
  46. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
  47. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
  48. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
  49. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
  51. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  52. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
  53. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
  55. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
  56. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
  57. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
  59. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
  60. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
  61. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
  63. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  64. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
  65. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
  67. package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
  68. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
  69. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
  70. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
  71. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
  72. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
  73. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
  74. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  75. package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
  76. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  77. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  78. package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
  79. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  80. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
  81. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
  82. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
  83. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
  84. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
  85. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
  86. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
  87. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
  88. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
  89. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
  90. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
  91. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
  92. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  93. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
  94. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  95. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  96. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
  97. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  98. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
  99. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  101. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  102. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  103. package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
  104. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  105. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
  106. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
  108. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  109. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  110. package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
  111. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  112. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
  113. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
  115. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  116. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  117. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
  118. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  119. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  120. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
  121. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  122. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts +4 -1
  123. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
  124. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +2 -0
  125. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
  126. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +6 -1
  127. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  128. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +17 -31
  129. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  130. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  131. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
  132. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  133. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +5 -1
  134. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +78 -42
  136. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  137. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  138. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +8 -1
  139. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  140. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts +0 -3
  141. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +134 -28
  143. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  144. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  145. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +26 -5
  146. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  147. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
  148. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  149. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
  150. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  151. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
  152. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  153. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
  154. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  155. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts +7 -1
  156. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.d.ts.map +1 -1
  157. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js +70 -38
  158. package/dist/builtin-extensions/pi-subagents/src/shared/session-tokens.js.map +1 -1
  159. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +9 -0
  160. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  161. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  162. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  163. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  164. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
  165. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  166. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  167. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
  168. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  169. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  170. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +13 -62
  171. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  172. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +1 -1
  173. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +18 -9
  175. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  176. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  178. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  179. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  180. package/dist/builtin-extensions/pi-tps.js +28 -17
  181. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  182. package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
  183. package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
  184. package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
  185. package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
  186. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
  187. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
  188. package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
  189. package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
  190. package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
  191. package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
  192. package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
  193. package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
  194. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  195. package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
  196. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  197. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
  198. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  199. package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
  200. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  201. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  202. package/dist/builtin-extensions/pi-web-access/index.js +48 -73
  203. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  204. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
  205. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
  206. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
  207. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
  208. package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
  209. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  210. package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
  211. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  212. package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
  213. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
  214. package/dist/builtin-extensions/simple-pi-memory.js +1 -1
  215. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
  216. package/dist/catalog/models.json +1 -1
  217. package/dist/catalog/providers/google-vertex.json +1 -1
  218. package/dist/catalog/providers/google.json +1 -1
  219. package/dist/catalog/publication.json +3 -3
  220. package/dist/cli/install-cli.d.ts.map +1 -1
  221. package/dist/cli/install-cli.js +38 -30
  222. package/dist/cli/install-cli.js.map +1 -1
  223. package/dist/core/agent-session-runtime.d.ts +13 -0
  224. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  225. package/dist/core/agent-session-runtime.js +75 -11
  226. package/dist/core/agent-session-runtime.js.map +1 -1
  227. package/dist/core/agent-session-services.d.ts +1 -0
  228. package/dist/core/agent-session-services.d.ts.map +1 -1
  229. package/dist/core/agent-session-services.js +1 -0
  230. package/dist/core/agent-session-services.js.map +1 -1
  231. package/dist/core/agent-session.d.ts +46 -21
  232. package/dist/core/agent-session.d.ts.map +1 -1
  233. package/dist/core/agent-session.js +344 -126
  234. package/dist/core/agent-session.js.map +1 -1
  235. package/dist/core/browser/runtime.d.ts +2 -0
  236. package/dist/core/browser/runtime.d.ts.map +1 -1
  237. package/dist/core/browser/runtime.js +80 -45
  238. package/dist/core/browser/runtime.js.map +1 -1
  239. package/dist/core/browser/setup.d.ts.map +1 -1
  240. package/dist/core/browser/setup.js +12 -1
  241. package/dist/core/browser/setup.js.map +1 -1
  242. package/dist/core/cache-stats.d.ts +1 -1
  243. package/dist/core/cache-stats.d.ts.map +1 -1
  244. package/dist/core/cache-stats.js +1 -1
  245. package/dist/core/cache-stats.js.map +1 -1
  246. package/dist/core/compaction/branch-summarization.d.ts +2 -1
  247. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  248. package/dist/core/compaction/branch-summarization.js +1 -0
  249. package/dist/core/compaction/branch-summarization.js.map +1 -1
  250. package/dist/core/compaction/compaction.d.ts +5 -11
  251. package/dist/core/compaction/compaction.d.ts.map +1 -1
  252. package/dist/core/compaction/compaction.js +38 -92
  253. package/dist/core/compaction/compaction.js.map +1 -1
  254. package/dist/core/computer-use/adapter.d.ts.map +1 -1
  255. package/dist/core/computer-use/adapter.js +7 -2
  256. package/dist/core/computer-use/adapter.js.map +1 -1
  257. package/dist/core/computer-use/image.d.ts.map +1 -1
  258. package/dist/core/computer-use/image.js +17 -5
  259. package/dist/core/computer-use/image.js.map +1 -1
  260. package/dist/core/computer-use/schemas.d.ts.map +1 -1
  261. package/dist/core/computer-use/schemas.js +23 -6
  262. package/dist/core/computer-use/schemas.js.map +1 -1
  263. package/dist/core/computer-use/workflow.d.ts.map +1 -1
  264. package/dist/core/computer-use/workflow.js +459 -119
  265. package/dist/core/computer-use/workflow.js.map +1 -1
  266. package/dist/core/context-breakdown.d.ts +2 -2
  267. package/dist/core/context-breakdown.d.ts.map +1 -1
  268. package/dist/core/context-breakdown.js +22 -20
  269. package/dist/core/context-breakdown.js.map +1 -1
  270. package/dist/core/cron/jobs.d.ts +26 -8
  271. package/dist/core/cron/jobs.d.ts.map +1 -1
  272. package/dist/core/cron/jobs.js +357 -232
  273. package/dist/core/cron/jobs.js.map +1 -1
  274. package/dist/core/cron/origin-context.d.ts +1 -0
  275. package/dist/core/cron/origin-context.d.ts.map +1 -1
  276. package/dist/core/cron/origin-context.js.map +1 -1
  277. package/dist/core/cron/scheduler.d.ts +22 -17
  278. package/dist/core/cron/scheduler.d.ts.map +1 -1
  279. package/dist/core/cron/scheduler.js +153 -73
  280. package/dist/core/cron/scheduler.js.map +1 -1
  281. package/dist/core/extensions/index.d.ts +1 -1
  282. package/dist/core/extensions/index.d.ts.map +1 -1
  283. package/dist/core/extensions/index.js.map +1 -1
  284. package/dist/core/extensions/runner.d.ts +1 -0
  285. package/dist/core/extensions/runner.d.ts.map +1 -1
  286. package/dist/core/extensions/runner.js +8 -0
  287. package/dist/core/extensions/runner.js.map +1 -1
  288. package/dist/core/extensions/types.d.ts +11 -1
  289. package/dist/core/extensions/types.d.ts.map +1 -1
  290. package/dist/core/extensions/types.js.map +1 -1
  291. package/dist/core/footer-data-provider.d.ts +4 -0
  292. package/dist/core/footer-data-provider.d.ts.map +1 -1
  293. package/dist/core/footer-data-provider.js +22 -1
  294. package/dist/core/footer-data-provider.js.map +1 -1
  295. package/dist/core/large-subagent-launch.d.ts +1 -1
  296. package/dist/core/large-subagent-launch.d.ts.map +1 -1
  297. package/dist/core/large-subagent-launch.js +7 -7
  298. package/dist/core/large-subagent-launch.js.map +1 -1
  299. package/dist/core/model-registry.d.ts +2 -0
  300. package/dist/core/model-registry.d.ts.map +1 -1
  301. package/dist/core/model-registry.js +5 -0
  302. package/dist/core/model-registry.js.map +1 -1
  303. package/dist/core/model-runtime.d.ts +4 -1
  304. package/dist/core/model-runtime.d.ts.map +1 -1
  305. package/dist/core/model-runtime.js +40 -4
  306. package/dist/core/model-runtime.js.map +1 -1
  307. package/dist/core/package-manager.d.ts.map +1 -1
  308. package/dist/core/package-manager.js.map +1 -1
  309. package/dist/core/permissions.d.ts +3 -3
  310. package/dist/core/permissions.d.ts.map +1 -1
  311. package/dist/core/permissions.js +11 -35
  312. package/dist/core/permissions.js.map +1 -1
  313. package/dist/core/plan-mode.d.ts +5 -13
  314. package/dist/core/plan-mode.d.ts.map +1 -1
  315. package/dist/core/plan-mode.js +126 -116
  316. package/dist/core/plan-mode.js.map +1 -1
  317. package/dist/core/project-trust.d.ts.map +1 -1
  318. package/dist/core/project-trust.js +1 -1
  319. package/dist/core/project-trust.js.map +1 -1
  320. package/dist/core/prompt-resource-bridge.d.ts +12 -0
  321. package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
  322. package/dist/core/prompt-resource-bridge.js +9 -0
  323. package/dist/core/prompt-resource-bridge.js.map +1 -0
  324. package/dist/core/protected-targets.d.ts +6 -0
  325. package/dist/core/protected-targets.d.ts.map +1 -0
  326. package/dist/core/protected-targets.js +45 -0
  327. package/dist/core/protected-targets.js.map +1 -0
  328. package/dist/core/resource-loader.d.ts.map +1 -1
  329. package/dist/core/resource-loader.js +7 -0
  330. package/dist/core/resource-loader.js.map +1 -1
  331. package/dist/core/rollback.d.ts +19 -3
  332. package/dist/core/rollback.d.ts.map +1 -1
  333. package/dist/core/rollback.js +172 -56
  334. package/dist/core/rollback.js.map +1 -1
  335. package/dist/core/runtime-credentials.d.ts +3 -0
  336. package/dist/core/runtime-credentials.d.ts.map +1 -1
  337. package/dist/core/runtime-credentials.js +14 -1
  338. package/dist/core/runtime-credentials.js.map +1 -1
  339. package/dist/core/sdk.d.ts +3 -0
  340. package/dist/core/sdk.d.ts.map +1 -1
  341. package/dist/core/sdk.js +1 -0
  342. package/dist/core/sdk.js.map +1 -1
  343. package/dist/core/session-manager.d.ts +11 -1
  344. package/dist/core/session-manager.d.ts.map +1 -1
  345. package/dist/core/session-manager.js +111 -33
  346. package/dist/core/session-manager.js.map +1 -1
  347. package/dist/core/session-ownership.d.ts.map +1 -1
  348. package/dist/core/session-ownership.js +8 -3
  349. package/dist/core/session-ownership.js.map +1 -1
  350. package/dist/core/session-retention.d.ts.map +1 -1
  351. package/dist/core/session-retention.js +18 -7
  352. package/dist/core/session-retention.js.map +1 -1
  353. package/dist/core/session-startup-settings.d.ts +10 -0
  354. package/dist/core/session-startup-settings.d.ts.map +1 -0
  355. package/dist/core/session-startup-settings.js +70 -0
  356. package/dist/core/session-startup-settings.js.map +1 -0
  357. package/dist/core/subscriptions.d.ts +16 -7
  358. package/dist/core/subscriptions.d.ts.map +1 -1
  359. package/dist/core/subscriptions.js +96 -55
  360. package/dist/core/subscriptions.js.map +1 -1
  361. package/dist/core/trust-manager.d.ts +2 -1
  362. package/dist/core/trust-manager.d.ts.map +1 -1
  363. package/dist/core/trust-manager.js +6 -1
  364. package/dist/core/trust-manager.js.map +1 -1
  365. package/dist/core/update-check.d.ts.map +1 -1
  366. package/dist/core/update-check.js.map +1 -1
  367. package/dist/core/usage-accounting.d.ts +47 -0
  368. package/dist/core/usage-accounting.d.ts.map +1 -0
  369. package/dist/core/usage-accounting.js +205 -0
  370. package/dist/core/usage-accounting.js.map +1 -0
  371. package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
  372. package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
  373. package/dist/core/usage-adapters/kimi-coding.js +2 -2
  374. package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
  375. package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
  376. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  377. package/dist/core/usage-adapters/openai-codex.js +3 -3
  378. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  379. package/dist/core/usage-adapters/xai.d.ts +2 -2
  380. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  381. package/dist/core/usage-adapters/xai.js +3 -3
  382. package/dist/core/usage-adapters/xai.js.map +1 -1
  383. package/dist/core/usage-adapters/zai.d.ts +2 -2
  384. package/dist/core/usage-adapters/zai.d.ts.map +1 -1
  385. package/dist/core/usage-adapters/zai.js +2 -2
  386. package/dist/core/usage-adapters/zai.js.map +1 -1
  387. package/dist/core/usage-history.d.ts +1 -18
  388. package/dist/core/usage-history.d.ts.map +1 -1
  389. package/dist/core/usage-history.js +46 -114
  390. package/dist/core/usage-history.js.map +1 -1
  391. package/dist/core/usage-service.d.ts +9 -2
  392. package/dist/core/usage-service.d.ts.map +1 -1
  393. package/dist/core/usage-service.js +95 -50
  394. package/dist/core/usage-service.js.map +1 -1
  395. package/dist/gateway/agent-bridge.d.ts +9 -1
  396. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  397. package/dist/gateway/agent-bridge.js +91 -37
  398. package/dist/gateway/agent-bridge.js.map +1 -1
  399. package/dist/gateway/buttons.d.ts +8 -1
  400. package/dist/gateway/buttons.d.ts.map +1 -1
  401. package/dist/gateway/buttons.js +76 -18
  402. package/dist/gateway/buttons.js.map +1 -1
  403. package/dist/gateway/commands.d.ts +1 -0
  404. package/dist/gateway/commands.d.ts.map +1 -1
  405. package/dist/gateway/commands.js +10 -4
  406. package/dist/gateway/commands.js.map +1 -1
  407. package/dist/gateway/cron.d.ts +12 -11
  408. package/dist/gateway/cron.d.ts.map +1 -1
  409. package/dist/gateway/cron.js +65 -56
  410. package/dist/gateway/cron.js.map +1 -1
  411. package/dist/gateway/index.d.ts.map +1 -1
  412. package/dist/gateway/index.js +2 -1
  413. package/dist/gateway/index.js.map +1 -1
  414. package/dist/gateway/mobile-commands.d.ts +1 -0
  415. package/dist/gateway/mobile-commands.d.ts.map +1 -1
  416. package/dist/gateway/mobile-commands.js +69 -15
  417. package/dist/gateway/mobile-commands.js.map +1 -1
  418. package/dist/gateway/presenter.d.ts +12 -2
  419. package/dist/gateway/presenter.d.ts.map +1 -1
  420. package/dist/gateway/presenter.js +73 -38
  421. package/dist/gateway/presenter.js.map +1 -1
  422. package/dist/gateway/router.d.ts +2 -2
  423. package/dist/gateway/router.d.ts.map +1 -1
  424. package/dist/gateway/router.js +17 -2
  425. package/dist/gateway/router.js.map +1 -1
  426. package/dist/gateway/service.d.ts +2 -0
  427. package/dist/gateway/service.d.ts.map +1 -1
  428. package/dist/gateway/service.js +153 -0
  429. package/dist/gateway/service.js.map +1 -1
  430. package/dist/main.d.ts.map +1 -1
  431. package/dist/main.js +86 -33
  432. package/dist/main.js.map +1 -1
  433. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  434. package/dist/modes/interactive/components/assistant-message.js +6 -4
  435. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  436. package/dist/modes/interactive/components/context-view.d.ts.map +1 -1
  437. package/dist/modes/interactive/components/context-view.js +2 -2
  438. package/dist/modes/interactive/components/context-view.js.map +1 -1
  439. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
  440. package/dist/modes/interactive/components/copyable-text.js +3 -2
  441. package/dist/modes/interactive/components/copyable-text.js.map +1 -1
  442. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  443. package/dist/modes/interactive/components/extension-editor.js +1 -1
  444. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  445. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  446. package/dist/modes/interactive/components/footer.js +8 -12
  447. package/dist/modes/interactive/components/footer.js.map +1 -1
  448. package/dist/modes/interactive/components/usage-view.d.ts +5 -0
  449. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
  450. package/dist/modes/interactive/components/usage-view.js +21 -6
  451. package/dist/modes/interactive/components/usage-view.js.map +1 -1
  452. package/dist/modes/interactive/interactive-mode.d.ts +3 -7
  453. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  454. package/dist/modes/interactive/interactive-mode.js +151 -131
  455. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  456. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  457. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  458. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  459. package/dist/modes/rpc/rpc-mode.js +2 -1
  460. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  461. package/dist/node-runtime/{adapter-VFG7WNPX.js → adapter-247RTYLS.js} +4 -5
  462. package/dist/node-runtime/agent-session-services-RTUGP3XR.js +54 -0
  463. package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
  464. package/dist/node-runtime/{builtin-extensions-I2HIFEMY.js → builtin-extensions-N4EUD6SB.js} +8 -7
  465. package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
  466. package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
  467. package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
  468. package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
  469. package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
  470. package/dist/node-runtime/chunk-4QRUZ64T.js +1203 -0
  471. package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
  472. package/dist/node-runtime/{chunk-SPVDBUOS.js → chunk-6O3IW3IA.js} +2 -2
  473. package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
  474. package/dist/node-runtime/{chunk-WIF24I7G.js → chunk-APVM5NEU.js} +149 -144
  475. package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
  476. package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
  477. package/dist/node-runtime/{chunk-LJTIVM7I.js → chunk-BMRXLQWQ.js} +464 -160
  478. package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
  479. package/dist/node-runtime/{chunk-T4DA4XE7.js → chunk-DFMPRAQQ.js} +162 -82
  480. package/dist/node-runtime/{chunk-SN2KSMPQ.js → chunk-DQSCFU7R.js} +13 -7
  481. package/dist/node-runtime/{chunk-UVWCDQYF.js → chunk-E5DQGNJI.js} +455 -278
  482. package/dist/node-runtime/{chunk-4SBQAI4T.js → chunk-EBLAZVSA.js} +2058 -73
  483. package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
  484. package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
  485. package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
  486. package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
  487. package/dist/node-runtime/{chunk-IKU6Y7DL.js → chunk-FE3WZI7F.js} +9 -6
  488. package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
  489. package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
  490. package/dist/node-runtime/{chunk-RGQAEOM5.js → chunk-FYIFPFXE.js} +23 -6
  491. package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
  492. package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
  493. package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
  494. package/dist/node-runtime/{chunk-I74LN5JG.js → chunk-HUD2RFJW.js} +2 -2
  495. package/dist/node-runtime/{chunk-XHIRAZ26.js → chunk-IAZSK7KK.js} +1 -1
  496. package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-ICKGAKWX.js} +23 -59
  497. package/dist/node-runtime/{chunk-X3PGBLQ7.js → chunk-IHHTWSXN.js} +9 -9
  498. package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
  499. package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
  500. package/dist/node-runtime/{chunk-L24TPBS4.js → chunk-JEK35V2M.js} +45 -31
  501. package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
  502. package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
  503. package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
  504. package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
  505. package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
  506. package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-PWHTSQC4.js} +83 -21
  507. package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
  508. package/dist/node-runtime/{chunk-RCR3XAQY.js → chunk-QT3F6UEV.js} +233 -169
  509. package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
  510. package/dist/node-runtime/{chunk-DVQSHCVP.js → chunk-R4WSB2MQ.js} +5 -5
  511. package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
  512. package/dist/node-runtime/{chunk-2CFDTH5B.js → chunk-RLGY2QIL.js} +45 -59
  513. package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-RY3FJ6WI.js} +29 -27
  514. package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
  515. package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-STMX7W5I.js} +3 -3
  516. package/dist/node-runtime/chunk-SWWHZ2RI.js +158 -0
  517. package/dist/node-runtime/{chunk-5Q4A37RB.js → chunk-TCT6PCUR.js} +32 -11
  518. package/dist/node-runtime/{chunk-P7XBVXGT.js → chunk-U3YVZ6UC.js} +18 -14
  519. package/dist/node-runtime/{chunk-D5UCKPBQ.js → chunk-UBWW2PID.js} +1 -1
  520. package/dist/node-runtime/{chunk-E75WFZ33.js → chunk-UNUZICC4.js} +3 -3
  521. package/dist/node-runtime/{chunk-RAK2QA2B.js → chunk-UYRKUKFE.js} +4 -4
  522. package/dist/node-runtime/{chunk-LWJXTA6Z.js → chunk-VSUEAI7O.js} +1377 -45
  523. package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
  524. package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
  525. package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
  526. package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
  527. package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
  528. package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
  529. package/dist/node-runtime/{chunk-YWOJIGFY.js → chunk-ZEVFBFNF.js} +95 -142
  530. package/dist/node-runtime/{chunk-5B6VKFEV.js → chunk-ZIQUS5QO.js} +1 -1
  531. package/dist/node-runtime/cli-runtime.js +4 -4
  532. package/dist/node-runtime/{command-FSBU2EVZ.js → command-YRT7I2BW.js} +5 -5
  533. package/dist/node-runtime/{commands-NAAL7KNT.js → commands-2ETOWWRA.js} +16 -16
  534. package/dist/node-runtime/{commands-EMBQQVVT.js → commands-D6A6H4TS.js} +11 -18
  535. package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
  536. package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
  537. package/dist/node-runtime/{direct-tool-executor-4D7UXYU4.js → direct-tool-executor-2QJXVQD2.js} +6 -11
  538. package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
  539. package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-DBQRRMAY.js} +4 -4
  540. package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
  541. package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
  542. package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
  543. package/dist/node-runtime/{gateway-DQM333YV.js → gateway-V6K2CDWN.js} +51 -42
  544. package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
  545. package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
  546. package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
  547. package/dist/node-runtime/{goal-NJEE5CTU.js → goal-J7TYMOBK.js} +14 -8
  548. package/dist/node-runtime/index.js +51 -48
  549. package/dist/node-runtime/{init-P5AUV77I.js → init-JBQJIPYI.js} +3 -6
  550. package/dist/node-runtime/{install-cli-NN4YAU44.js → install-cli-INGHIVBY.js} +30 -25
  551. package/dist/node-runtime/interactive-mode-ASZ7APYP.js +75 -0
  552. package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
  553. package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
  554. package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
  555. package/dist/node-runtime/{lunr-computer-use-Y23CCDIJ.js → lunr-computer-use-VDP2QNRQ.js} +9 -9
  556. package/dist/node-runtime/{lunr-cron-USHC4LXH.js → lunr-cron-WD3YH4CR.js} +93 -80
  557. package/dist/node-runtime/main.js +43 -41
  558. package/dist/node-runtime/{mobile-commands-O5LCHL32.js → mobile-commands-ICUXFW5V.js} +12 -12
  559. package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
  560. package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
  561. package/dist/node-runtime/{package-manager-cli-Q7BL6KZO.js → package-manager-cli-CYM262SI.js} +20 -20
  562. package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
  563. package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
  564. package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
  565. package/dist/node-runtime/{pi-mcp-adapter-3PHF4KZ4.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
  566. package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
  567. package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
  568. package/dist/node-runtime/{pi-subagents-7IBSSGEW.js → pi-subagents-QPU3OXE4.js} +114 -167
  569. package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
  570. package/dist/node-runtime/{print-mode-XQ76CYMT.js → print-mode-2XHN5SUA.js} +3 -3
  571. package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
  572. package/dist/node-runtime/{proxy-modes-5FAPSZEZ.js → proxy-modes-VEGC6QG5.js} +8 -15
  573. package/dist/node-runtime/rpc-entry.js +43 -41
  574. package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
  575. package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
  576. package/dist/node-runtime/{runtime-EFPPD2UW.js → runtime-UGXM4NPQ.js} +2 -2
  577. package/dist/node-runtime/{runtime-bridges-7WVCLI76.js → runtime-bridges-DNKMNJCF.js} +7 -7
  578. package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
  579. package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LYH53ESV.js} +4 -4
  580. package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-ZJ3N5Q74.js} +3 -3
  581. package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
  582. package/dist/node-runtime/{settings-manager-DJDM5AHM.js → settings-manager-P2TKGYTR.js} +5 -5
  583. package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
  584. package/dist/node-runtime/{setup-PFBWRNUI.js → setup-OLQ4GXWS.js} +17 -17
  585. package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
  586. package/dist/node-runtime/{subagent-executor-LPZ4BHWE.js → subagent-executor-UI6SHG3X.js} +412 -288
  587. package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
  588. package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
  589. package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
  590. package/dist/node-runtime/{update-cli-HNMOTNGX.js → update-cli-F3XXJANQ.js} +6 -6
  591. package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
  592. package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
  593. package/dist/node-runtime/{workflow-OHPBEFO4.js → workflow-ICDI4N3J.js} +208 -78
  594. package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
  595. package/dist/utils/clipboard-image.d.ts.map +1 -1
  596. package/dist/utils/clipboard-image.js.map +1 -1
  597. package/dist/utils/exif-orientation.d.ts.map +1 -1
  598. package/dist/utils/exif-orientation.js +25 -10
  599. package/dist/utils/exif-orientation.js.map +1 -1
  600. package/dist/utils/image-resize-core.d.ts.map +1 -1
  601. package/dist/utils/image-resize-core.js +2 -0
  602. package/dist/utils/image-resize-core.js.map +1 -1
  603. package/dist/utils/paths.d.ts +4 -0
  604. package/dist/utils/paths.d.ts.map +1 -1
  605. package/dist/utils/paths.js +33 -2
  606. package/dist/utils/paths.js.map +1 -1
  607. package/dist/utils/sanitize-terminal-text.d.ts +7 -0
  608. package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
  609. package/dist/utils/sanitize-terminal-text.js +67 -0
  610. package/dist/utils/sanitize-terminal-text.js.map +1 -0
  611. package/docs/browser.md +1 -1
  612. package/docs/custom-provider.md +3 -3
  613. package/docs/extensions.md +8 -4
  614. package/docs/features.md +25 -7
  615. package/docs/keybindings.md +1 -1
  616. package/docs/models.md +5 -5
  617. package/docs/packages.md +1 -1
  618. package/docs/providers.md +2 -2
  619. package/docs/rpc.md +7 -7
  620. package/docs/security.md +10 -5
  621. package/docs/sessions.md +2 -2
  622. package/docs/skills.md +1 -1
  623. package/docs/terminal-setup.md +7 -7
  624. package/docs/themes.md +1 -1
  625. package/docs/usage.md +1 -1
  626. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  627. package/examples/extensions/bash-spawn-hook.ts +1 -1
  628. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  629. package/examples/extensions/claude-rules.ts +1 -1
  630. package/examples/extensions/commands.ts +1 -1
  631. package/examples/extensions/custom-compaction.ts +1 -1
  632. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  633. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  634. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  635. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  636. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  637. package/examples/extensions/doom-overlay/index.ts +1 -1
  638. package/examples/extensions/git-merge-and-resolve.ts +2 -2
  639. package/examples/extensions/gondolin/index.ts +1 -1
  640. package/examples/extensions/gondolin/package-lock.json +2 -2
  641. package/examples/extensions/gondolin/package.json +1 -1
  642. package/examples/extensions/hidden-thinking-label.ts +1 -1
  643. package/examples/extensions/inline-bash.ts +2 -2
  644. package/examples/extensions/input-transform-streaming.ts +2 -2
  645. package/examples/extensions/input-transform.ts +2 -2
  646. package/examples/extensions/interactive-shell.ts +1 -1
  647. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  648. package/examples/extensions/mac-system-theme.ts +1 -1
  649. package/examples/extensions/minimal-mode.ts +1 -1
  650. package/examples/extensions/modal-editor.ts +1 -1
  651. package/examples/extensions/model-status.ts +1 -1
  652. package/examples/extensions/notify.ts +3 -3
  653. package/examples/extensions/overlay-qa-tests.ts +1 -1
  654. package/examples/extensions/overlay-test.ts +1 -1
  655. package/examples/extensions/pirate.ts +1 -1
  656. package/examples/extensions/preset.ts +3 -3
  657. package/examples/extensions/project-trust.ts +4 -4
  658. package/examples/extensions/prompt-customizer.ts +1 -1
  659. package/examples/extensions/rainbow-editor.ts +1 -1
  660. package/examples/extensions/rpc-demo.ts +1 -1
  661. package/examples/extensions/sandbox/index.ts +7 -7
  662. package/examples/extensions/sandbox/package-lock.json +2 -2
  663. package/examples/extensions/sandbox/package.json +1 -1
  664. package/examples/extensions/shutdown-command.ts +5 -5
  665. package/examples/extensions/ssh.ts +2 -2
  666. package/examples/extensions/subagent/README.md +3 -3
  667. package/examples/extensions/subagent/index.ts +2 -2
  668. package/examples/extensions/titlebar-spinner.ts +1 -1
  669. package/examples/extensions/tool-override.ts +1 -1
  670. package/examples/extensions/tools.ts +1 -1
  671. package/examples/extensions/with-deps/package-lock.json +2 -2
  672. package/examples/extensions/with-deps/package.json +1 -1
  673. package/examples/extensions/working-indicator.ts +1 -1
  674. package/examples/extensions/working-message-test.ts +1 -1
  675. package/examples/sdk/01-minimal.ts +1 -1
  676. package/examples/sdk/03-custom-prompt.ts +1 -1
  677. package/examples/sdk/04-skills.ts +1 -1
  678. package/examples/sdk/06-extensions.ts +2 -2
  679. package/examples/sdk/08-prompt-templates.ts +1 -1
  680. package/install-lock/package-lock.json +24 -24
  681. package/install-lock/package.json +2 -2
  682. package/npm-shrinkwrap.json +60 -24
  683. package/package.json +9 -9
  684. package/dist/modes/interactive/components/exit-card.d.ts +0 -22
  685. package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
  686. package/dist/modes/interactive/components/exit-card.js +0 -69
  687. package/dist/modes/interactive/components/exit-card.js.map +0 -1
  688. package/dist/node-runtime/agent-session-services-5YXS2PLF.js +0 -51
  689. package/dist/node-runtime/chunk-2IDTZAG5.js +0 -1415
  690. package/dist/node-runtime/chunk-3MISGG4S.js +0 -769
  691. package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
  692. package/dist/node-runtime/chunk-5B5QN3ZQ.js +0 -356
  693. package/dist/node-runtime/chunk-7IQGBKBJ.js +0 -2033
  694. package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
  695. package/dist/node-runtime/chunk-PTFBPO3C.js +0 -50
  696. package/dist/node-runtime/interactive-mode-YOHZVMKX.js +0 -74
  697. package/dist/node-runtime/mcp-auth-flow-QVLFVLEO.js +0 -33
@@ -2,13 +2,13 @@ import { createRequire as __lunrRequire } from "node:module"; const require = __
2
2
  import {
3
3
  checkForUpdate,
4
4
  markUpdateNotified
5
- } from "./chunk-KWA4OC2J.js";
5
+ } from "./chunk-H6YBCWKG.js";
6
6
  import {
7
7
  getSubagentSpinnerDefinition
8
8
  } from "./chunk-US544NN6.js";
9
9
  import {
10
10
  computeContextBreakdown
11
- } from "./chunk-CDVHZOOK.js";
11
+ } from "./chunk-RY3FJ6WI.js";
12
12
  import {
13
13
  copyToClipboard,
14
14
  readClipboardText
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  BootScreenComponent,
22
22
  registerPermissionModeBridge
23
- } from "./chunk-RWTKOC3B.js";
23
+ } from "./chunk-QBTJG3UM.js";
24
24
  import {
25
25
  nextModeForGoal,
26
26
  registerPermissionModeControlBridge
@@ -34,9 +34,12 @@ import {
34
34
  beginTurn,
35
35
  captureTreeChanges,
36
36
  clearRollback,
37
+ commitRollbackTurn,
37
38
  disableRollbackForSession,
38
39
  enableRollbackForSession,
39
40
  formatMissingSessionCwdPrompt,
41
+ getRollbackRecoveryBlockReason,
42
+ getRollbackTargetUserId,
40
43
  initRollback,
41
44
  isRollbackEnabled,
42
45
  isRollbackSessionForceEnabled,
@@ -45,24 +48,19 @@ import {
45
48
  peekRollbackTurnsConsumed,
46
49
  rollbackLastTurn,
47
50
  setRollbackWarningHandler
48
- } from "./chunk-LJTIVM7I.js";
51
+ } from "./chunk-BMRXLQWQ.js";
49
52
  import {
50
53
  notifyTodosEnabledChanged
51
54
  } from "./chunk-CCCN2UCX.js";
52
55
  import {
53
56
  parseGitUrl
54
- } from "./chunk-RAK2QA2B.js";
57
+ } from "./chunk-UYRKUKFE.js";
55
58
  import {
56
59
  createAllToolDefinitions,
57
60
  ensureTool,
58
61
  getToolPath,
59
62
  truncateToVisualLines
60
- } from "./chunk-YWOJIGFY.js";
61
- import {
62
- DEFAULT_MAX_BYTES,
63
- DEFAULT_MAX_LINES,
64
- truncateTail
65
- } from "./chunk-53YJI7JU.js";
63
+ } from "./chunk-ZEVFBFNF.js";
66
64
  import {
67
65
  formatGroupedCall,
68
66
  getTextOutput,
@@ -70,17 +68,22 @@ import {
70
68
  toolGroupRole,
71
69
  toolGroupTree,
72
70
  toolStatusDot
73
- } from "./chunk-5ZQXRPMC.js";
71
+ } from "./chunk-6ZZHGUSA.js";
72
+ import {
73
+ DEFAULT_MAX_BYTES,
74
+ DEFAULT_MAX_LINES,
75
+ truncateTail
76
+ } from "./chunk-53YJI7JU.js";
74
77
  import {
75
78
  convertToPng,
76
79
  processImage
77
- } from "./chunk-XHIRAZ26.js";
80
+ } from "./chunk-IAZSK7KK.js";
78
81
  import {
79
82
  formatCatalogRefreshSummary,
80
83
  hasGrokCliXaiAuth,
81
84
  refreshModelCandidatesForInit,
82
85
  stripJsonComments
83
- } from "./chunk-KJ6DWS3K.js";
86
+ } from "./chunk-XEOCUEUJ.js";
84
87
  import {
85
88
  HTTP_IDLE_TIMEOUT_CHOICES,
86
89
  SKILL_TAG_CHARACTERS,
@@ -88,38 +91,30 @@ import {
88
91
  SUBAGENT_SPINNER_NAMES,
89
92
  configureHttpDispatcher,
90
93
  formatHttpIdleTimeoutMs
91
- } from "./chunk-I74LN5JG.js";
94
+ } from "./chunk-HUD2RFJW.js";
92
95
  import {
93
96
  ProjectTrustStore,
94
97
  getProjectTrustOptions,
95
98
  hasTrustRequiringProjectResources
96
- } from "./chunk-HTFRRDSF.js";
99
+ } from "./chunk-F2SMQ6ES.js";
97
100
  import {
98
- computeFileLists,
99
- createFileOps,
100
101
  defaultModelPerProvider,
101
- extractFileOpsFromMessage,
102
102
  findExactModelReferenceMatch,
103
103
  resolveModelScope
104
- } from "./chunk-GYIXXQAO.js";
104
+ } from "./chunk-ICKGAKWX.js";
105
105
  import {
106
106
  SubagentEscapeSequence,
107
107
  getSubagentCancellation
108
108
  } from "./chunk-BBUVIEZB.js";
109
109
  import {
110
- AUTO_MODE_ADDENDUM,
111
- READ_ONLY_MODE_ADDENDUM,
112
- getPermissionMode,
113
110
  nextPermissionMode,
114
111
  registerApprovalHandler,
115
- resetPermissions,
116
- restorePermissionModeAfterPlan,
117
- setPermissionMode
118
- } from "./chunk-WIF24I7G.js";
112
+ restorePermissionModeAfterPlan
113
+ } from "./chunk-APVM5NEU.js";
119
114
  import {
120
115
  getGlobalInstructionsPath,
121
116
  getModelInstructionsPath
122
- } from "./chunk-M3LZLQW2.js";
117
+ } from "./chunk-BDRGN3L2.js";
123
118
  import {
124
119
  clearRegistry,
125
120
  isWindows,
@@ -129,21 +124,21 @@ import {
129
124
  pause,
130
125
  restart,
131
126
  resume
132
- } from "./chunk-KKUTQQV7.js";
127
+ } from "./chunk-RYRGL7P4.js";
133
128
  import {
134
129
  killTrackedDetachedChildren
135
- } from "./chunk-CSFI6YXL.js";
130
+ } from "./chunk-ES6PBSIE.js";
136
131
  import {
137
132
  cancelSessionHandoff,
138
133
  markSessionHandoff,
139
134
  recordTuiActivity,
140
135
  registerTransferHandler,
141
136
  requestSessionTransfer
142
- } from "./chunk-I54LGHWM.js";
137
+ } from "./chunk-STMX7W5I.js";
143
138
  import {
144
139
  SessionManager,
145
140
  sessionEntryToContextMessages
146
- } from "./chunk-2KIPT4HJ.js";
141
+ } from "./chunk-PWHTSQC4.js";
147
142
  import {
148
143
  createCompactionSummaryMessage
149
144
  } from "./chunk-FVDOXRUD.js";
@@ -161,41 +156,46 @@ import {
161
156
  import {
162
157
  getAllPlanUsageResults,
163
158
  getUsageServiceBridge
164
- } from "./chunk-2MI5OPMN.js";
159
+ } from "./chunk-HNNHHJAB.js";
165
160
  import {
166
161
  SessionSelectorComponent
167
- } from "./chunk-PCEW76PM.js";
162
+ } from "./chunk-2OIPYKLZ.js";
168
163
  import {
169
164
  CustomEditor
170
165
  } from "./chunk-H2EOZYMP.js";
171
166
  import {
172
167
  KeybindingsManager
173
- } from "./chunk-5EFIU3OM.js";
168
+ } from "./chunk-FTKEZL27.js";
174
169
  import {
175
170
  time
176
171
  } from "./chunk-PVCDKGR6.js";
172
+ import {
173
+ collectUsageRequests,
174
+ totalRequestUsage,
175
+ usageTokens
176
+ } from "./chunk-SWWHZ2RI.js";
177
177
  import {
178
178
  markStartupMilestone
179
179
  } from "./chunk-CCZJ3PYY.js";
180
180
  import {
181
181
  ExtensionSelectorComponent
182
- } from "./chunk-QH6YL7VK.js";
182
+ } from "./chunk-252ZVPPF.js";
183
183
  import {
184
184
  ExtensionInputComponent
185
- } from "./chunk-HMBGROQK.js";
185
+ } from "./chunk-GLDXBBL6.js";
186
186
  import {
187
187
  CountdownTimer
188
188
  } from "./chunk-I6R76AG7.js";
189
189
  import {
190
190
  DynamicBorder
191
- } from "./chunk-6VYZ5UFP.js";
191
+ } from "./chunk-FLGEEH27.js";
192
192
  import {
193
193
  formatKeyText,
194
194
  keyDisplayText,
195
195
  keyHint,
196
196
  keyText,
197
197
  rawKeyHint
198
- } from "./chunk-GS42T6MX.js";
198
+ } from "./chunk-QW3AAHWN.js";
199
199
  import {
200
200
  FS_WATCH_RETRY_DELAY_MS,
201
201
  Theme,
@@ -221,7 +221,7 @@ import {
221
221
  stopThemeWatcher,
222
222
  theme,
223
223
  watchWithErrorHandler
224
- } from "./chunk-RDDAZOMU.js";
224
+ } from "./chunk-JL4HYQXK.js";
225
225
  import {
226
226
  APP_NAME,
227
227
  APP_TITLE,
@@ -235,7 +235,7 @@ import {
235
235
  getDocsPath,
236
236
  getShareViewerUrl,
237
237
  normalizePath
238
- } from "./chunk-FQMM2EZ2.js";
238
+ } from "./chunk-64XTQNLA.js";
239
239
 
240
240
  // packages/coding-agent/dist/modes/interactive/interactive-mode.js
241
241
  import * as crypto from "node:crypto";
@@ -244,7 +244,6 @@ import * as os2 from "node:os";
244
244
  import * as path2 from "node:path";
245
245
  import { getSupportedThinkingLevels } from "@ashx-j/lunr-ai/compat";
246
246
  import { CombinedAutocompleteProvider, Container as Container19, collectImageMarkerIds, formatImageMarker, fuzzyFilter as fuzzyFilter5, isFocusable, Markdown as Markdown10, matchesKey as matchesKey2, ProcessTerminal, Spacer as Spacer19, setKeybindings, Text as Text21, TruncatedText as TruncatedText2, TUI, visibleWidth as visibleWidth6 } from "@ashx-j/lunr-tui";
247
- import chalk from "chalk";
248
247
  import { spawn as spawn3, spawnSync } from "child_process";
249
248
 
250
249
  // packages/coding-agent/dist/core/cache-stats.js
@@ -421,6 +420,9 @@ function shouldPollGitHead(repoDir) {
421
420
  var FooterDataProvider = class _FooterDataProvider {
422
421
  cwd;
423
422
  static WATCH_DEBOUNCE_MS = 500;
423
+ static DIFFSTAT_REFRESH_MS = 2e3;
424
+ diffstatTimer = null;
425
+ diffstatStale = !0;
424
426
  extensionStatuses = /* @__PURE__ */ new Map();
425
427
  cachedBranch = void 0;
426
428
  cachedDiffstat = void 0;
@@ -447,7 +449,9 @@ var FooterDataProvider = class _FooterDataProvider {
447
449
  }
448
450
  /** Staged + unstaged added/removed vs HEAD. Null until the asynchronous lookup completes. */
449
451
  getGitDiffstat() {
450
- return this.cachedDiffstat === void 0 && !this.refreshInFlight && this.refreshGitData(), this.cachedDiffstat ?? null;
452
+ return this.diffstatStale && !this.refreshInFlight && this.refreshGitData(), !this.disposed && !this.diffstatTimer && (this.diffstatTimer = setTimeout(() => {
453
+ this.diffstatTimer = null, this.diffstatStale = !0, this.notifyBranchChange();
454
+ }, _FooterDataProvider.DIFFSTAT_REFRESH_MS), this.diffstatTimer.unref()), this.cachedDiffstat ?? null;
451
455
  }
452
456
  /** Extension status texts set via ctx.ui.setStatus() */
453
457
  getExtensionStatuses() {
@@ -474,11 +478,14 @@ var FooterDataProvider = class _FooterDataProvider {
474
478
  this.availableProviderCount = count;
475
479
  }
476
480
  setCwd(cwd) {
477
- this.cwd !== cwd && (this.cwd = cwd, this.refreshTimer && (clearTimeout(this.refreshTimer), this.refreshTimer = null), this.clearGitWatchers(), this.cachedBranch = void 0, this.cachedDiffstat = void 0, this.gitPaths = void 0, this.refreshInFlight && (this.refreshPending = !0), this.notifyBranchChange());
481
+ this.cwd !== cwd && (this.cwd = cwd, this.clearDiffstatTimer(), this.diffstatStale = !0, this.refreshTimer && (clearTimeout(this.refreshTimer), this.refreshTimer = null), this.clearGitWatchers(), this.cachedBranch = void 0, this.cachedDiffstat = void 0, this.gitPaths = void 0, this.refreshInFlight && (this.refreshPending = !0), this.notifyBranchChange());
478
482
  }
479
483
  /** Internal: cleanup */
480
484
  dispose() {
481
- this.disposed = !0, this.refreshTimer && (clearTimeout(this.refreshTimer), this.refreshTimer = null), this.clearGitWatchers(), this.branchChangeCallbacks.clear();
485
+ this.disposed = !0, this.clearDiffstatTimer(), this.refreshTimer && (clearTimeout(this.refreshTimer), this.refreshTimer = null), this.clearGitWatchers(), this.branchChangeCallbacks.clear();
486
+ }
487
+ clearDiffstatTimer() {
488
+ this.diffstatTimer && clearTimeout(this.diffstatTimer), this.diffstatTimer = null;
482
489
  }
483
490
  notifyBranchChange() {
484
491
  for (let cb of this.branchChangeCallbacks)
@@ -516,7 +523,7 @@ var FooterDataProvider = class _FooterDataProvider {
516
523
  if (this.disposed || this.cwd !== cwd)
517
524
  return;
518
525
  let prevBranch = this.cachedBranch, prevDiff = this.cachedDiffstat, branchChanged = prevBranch !== nextBranch, diffChanged = prevDiff?.added !== nextDiff?.added || prevDiff?.removed !== nextDiff?.removed;
519
- this.cachedBranch = nextBranch, this.cachedDiffstat = nextDiff, (branchChanged || diffChanged) && this.notifyBranchChange();
526
+ this.cachedBranch = nextBranch, this.cachedDiffstat = nextDiff, this.diffstatStale = !1, (branchChanged || diffChanged) && this.notifyBranchChange();
520
527
  } finally {
521
528
  this.refreshInFlight = !1, this.refreshPending && !this.disposed && (this.refreshPending = !1, this.scheduleRefresh());
522
529
  }
@@ -1115,6 +1122,52 @@ var ArminComponent = class {
1115
1122
  // packages/coding-agent/dist/modes/interactive/components/assistant-message.js
1116
1123
  import { Container, Markdown as Markdown2, Spacer, Text } from "@ashx-j/lunr-tui";
1117
1124
 
1125
+ // packages/coding-agent/dist/utils/sanitize-terminal-text.js
1126
+ function sanitizeTerminalText(source) {
1127
+ if (!/[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(source))
1128
+ return source;
1129
+ let parts = [], index = 0, plainStart = 0;
1130
+ for (; index < source.length; ) {
1131
+ let code = source.charCodeAt(index);
1132
+ if (code === 9 || code === 10 || code >= 32 && (code < 127 || code > 159)) {
1133
+ index++;
1134
+ continue;
1135
+ }
1136
+ if (parts.push(source.slice(plainStart, index)), index++, code === 13)
1137
+ source.charCodeAt(index) === 10 && index++, parts.push(`
1138
+ `);
1139
+ else {
1140
+ let sequence = code;
1141
+ if (code === 27 && index < source.length) {
1142
+ let next = source.charCodeAt(index);
1143
+ if (next >= 64 && next <= 95)
1144
+ sequence = next + 64, index++;
1145
+ else {
1146
+ for (; source.charCodeAt(index) >= 32 && source.charCodeAt(index) <= 47; )
1147
+ index++;
1148
+ source.charCodeAt(index) >= 48 && source.charCodeAt(index) <= 126 && index++;
1149
+ }
1150
+ }
1151
+ if (sequence === 155) {
1152
+ for (; source.charCodeAt(index) >= 32 && source.charCodeAt(index) <= 63; )
1153
+ index++;
1154
+ source.charCodeAt(index) >= 64 && source.charCodeAt(index) <= 126 && index++;
1155
+ } else if ([144, 152, 157, 158, 159].includes(sequence))
1156
+ for (; index < source.length; ) {
1157
+ let next = source.charCodeAt(index++);
1158
+ if (next === 156 || sequence === 157 && next === 7)
1159
+ break;
1160
+ if (next === 27 && source.charCodeAt(index) === 92) {
1161
+ index++;
1162
+ break;
1163
+ }
1164
+ }
1165
+ }
1166
+ plainStart = index;
1167
+ }
1168
+ return parts.push(source.slice(plainStart)), parts.join("");
1169
+ }
1170
+
1118
1171
  // packages/coding-agent/dist/modes/interactive/components/copyable-text.js
1119
1172
  import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "@ashx-j/lunr-tui";
1120
1173
  function sourceLines(source) {
@@ -1208,13 +1261,13 @@ var CopyableTextBlockComponent = class {
1208
1261
  let horizontalPad = Math.min(this.outputPad, Math.max(0, width - 1)), pad = " ".repeat(horizontalPad), contentWidth = Math.max(1, width - horizontalPad * 2), paint = (content) => {
1209
1262
  let line = truncateToWidth(`${pad}${content}`, width, "");
1210
1263
  return theme.bg("userMessageBg", `${line}${" ".repeat(Math.max(0, width - visibleWidth(line)))}`);
1211
- }, lines = [paint("")], payloadLines = this.payload.replace(/\t/g, " ").split(`
1264
+ }, lines = [paint("")], payloadLines = sanitizeTerminalText(this.payload).replace(/\t/g, " ").split(`
1212
1265
  `);
1213
1266
  for (let payloadLine of payloadLines)
1214
1267
  for (let wrappedLine of wrapTextWithAnsi(payloadLine, contentWidth))
1215
1268
  lines.push(paint(theme.fg("userMessageText", wrappedLine)));
1216
1269
  if (typeof this.status == "object")
1217
- for (let wrappedLine of wrapTextWithAnsi(`Copy failed: ${this.status.error}`, contentWidth))
1270
+ for (let wrappedLine of wrapTextWithAnsi(`Copy failed: ${sanitizeTerminalText(this.status.error)}`, contentWidth))
1218
1271
  lines.push(paint(theme.fg("error", wrappedLine)));
1219
1272
  return lines.push(paint("")), this.renderedRows = lines.length, lines;
1220
1273
  }
@@ -1405,7 +1458,7 @@ var OSC133_ZONE_START = "\x1B]133;A\x07", OSC133_ZONE_END = "\x1B]133;B\x07", OS
1405
1458
  if (content.type === "text" && content.text.trim())
1406
1459
  for (let segment of parseCopyableTextSegments(content.text)) {
1407
1460
  if (segment.type === "markdown") {
1408
- let trimmed = segment.text.trim();
1461
+ let trimmed = sanitizeTerminalText(segment.text).trim();
1409
1462
  if (!trimmed)
1410
1463
  continue;
1411
1464
  let text = isFirstTextBlock ? `\u25CF ${trimmed}` : trimmed;
@@ -1430,7 +1483,7 @@ var OSC133_ZONE_START = "\x1B]133;A\x07", OSC133_ZONE_END = "\x1B]133;B\x07", OS
1430
1483
  if (i--, displayBlocks.length === 0 || this.hideThinkingBlock)
1431
1484
  continue;
1432
1485
  let sourceBlocks = sourceThinkingRuns[thinkingRunIndex] ?? [], fullyRevealed = displayBlocks.length === sourceBlocks.length && displayBlocks.every((block, index) => block === sourceBlocks[index]);
1433
- this.renderThinkingRun(thinkingRunIndex, displayBlocks, message, i, fullyRevealed);
1486
+ this.renderThinkingRun(thinkingRunIndex, displayBlocks.map(sanitizeTerminalText), message, i, fullyRevealed);
1434
1487
  }
1435
1488
  }
1436
1489
  let hasToolCalls = message.content.some((c) => c.type === "toolCall");
@@ -1439,10 +1492,10 @@ var OSC133_ZONE_START = "\x1B]133;A\x07", OSC133_ZONE_END = "\x1B]133;B\x07", OS
1439
1492
  else if (!hasToolCalls) {
1440
1493
  if (message.stopReason === "aborted") {
1441
1494
  let abortMessage = message.errorMessage && message.errorMessage !== "Request was aborted" ? message.errorMessage : "Operation aborted";
1442
- this.contentContainer.addChild(new Spacer(1)), this.contentContainer.addChild(new Text(theme.fg("error", abortMessage), this.outputPad, 0));
1495
+ this.contentContainer.addChild(new Spacer(1)), this.contentContainer.addChild(new Text(theme.fg("error", sanitizeTerminalText(abortMessage)), this.outputPad, 0));
1443
1496
  } else if (message.stopReason === "error") {
1444
1497
  let errorMsg = message.errorMessage || "Unknown error";
1445
- this.contentContainer.addChild(new Spacer(1)), this.contentContainer.addChild(new Text(theme.fg("error", `Error: ${errorMsg}`), this.outputPad, 0));
1498
+ this.contentContainer.addChild(new Spacer(1)), this.contentContainer.addChild(new Text(theme.fg("error", `Error: ${sanitizeTerminalText(errorMsg)}`), this.outputPad, 0));
1446
1499
  }
1447
1500
  }
1448
1501
  this.onThinkingAnimationChange?.(this.thinkingAnimationActive);
@@ -1735,14 +1788,13 @@ var FooterComponent = class {
1735
1788
  dispose() {
1736
1789
  }
1737
1790
  render(width) {
1738
- let state = this.session.state, totalInput = 0, totalOutput = 0, totalCacheRead = 0, totalCacheWrite = 0, totalCost = 0, latestCacheHitRate;
1791
+ let state = this.session.state, totals = totalRequestUsage(collectUsageRequests(this.session.sessionManager.getEntries())), { input: totalInput, output: totalOutput, cacheRead: totalCacheRead, cacheWrite: totalCacheWrite } = totals, totalCost = totals.cost, latestCacheHitRate;
1739
1792
  for (let entry of this.session.sessionManager.getEntries())
1740
1793
  if (entry.type === "message" && entry.message.role === "assistant") {
1741
- totalInput += entry.message.usage.input, totalOutput += entry.message.usage.output, totalCacheRead += entry.message.usage.cacheRead, totalCacheWrite += entry.message.usage.cacheWrite, totalCost += entry.message.usage.cost.total;
1742
1794
  let latestPromptTokens = entry.message.usage.input + entry.message.usage.cacheRead + entry.message.usage.cacheWrite;
1743
1795
  latestCacheHitRate = latestPromptTokens > 0 ? entry.message.usage.cacheRead / latestPromptTokens * 100 : void 0;
1744
1796
  }
1745
- let contextUsage = this.session.getContextUsage(), contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0, contextPercentValue = contextUsage?.percent ?? 0, contextPercent = contextUsage?.percent !== null ? contextPercentValue.toFixed(1) : "?", pwd = formatCwdForFooter(this.session.sessionManager.getCwd(), process.env.HOME || process.env.USERPROFILE), branch = this.footerData.getGitBranch();
1797
+ let contextUsage = this.session.getContextUsage(), contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0, contextPercentValue = contextUsage?.percent ?? 0, contextPercent = contextUsage?.percent !== null ? `${contextUsage?.estimated ? "~" : ""}${contextPercentValue.toFixed(1)}` : "?", pwd = formatCwdForFooter(this.session.sessionManager.getCwd(), process.env.HOME || process.env.USERPROFILE), branch = this.footerData.getGitBranch();
1746
1798
  branch && (pwd = `${pwd} (${branch})`);
1747
1799
  let sessionName = this.session.sessionManager.getSessionName();
1748
1800
  sessionName && (pwd = `${pwd} \u2022 ${sessionName}`);
@@ -1833,8 +1885,8 @@ function renderThemedBox(headerText, content, maxWidth) {
1833
1885
  }
1834
1886
  function renderUsageBox(data, maxWidth) {
1835
1887
  let content = [];
1836
- if (data.sessionTotals && data.sessionTotals.total > 0 && (content.push("Session usage"), content.push(` input ${formatTokens(data.sessionTotals.input)} output ${formatTokens(data.sessionTotals.output)} total ${formatTokens(data.sessionTotals.total)}${formatCachedSuffix(data.sessionTotals.input, data.sessionTotals.cacheRead ?? 0, data.sessionTotals.cacheWrite ?? 0)}`)), data.breakdown) {
1837
- content.length > 0 && content.push(""), content.push("Context"), content.push(theme.fg("dim", "Estimated (chars/4), current session only \u2014 actual token counts may differ."));
1888
+ if (data.sessionTotals && (data.sessionTotals.total > 0 || data.sessionTotals.requests || data.sessionTotals.unknownRequests || data.sessionTotals.partialRequests) && (content.push("Parent usage including auxiliary requests"), content.push(` input ${formatTokens(data.sessionTotals.input + (data.sessionTotals.cacheRead ?? 0) + (data.sessionTotals.cacheWrite ?? 0))} output ${formatTokens(data.sessionTotals.output)} total ${formatTokens(data.sessionTotals.total)}${formatCachedSuffix(data.sessionTotals.input, data.sessionTotals.cacheRead ?? 0, data.sessionTotals.cacheWrite ?? 0)}`)), data.sessionTotals?.unknownRequests && content.push(` Usage unavailable for ${data.sessionTotals.unknownRequests} request(s).`), data.sessionTotals?.partialRequests && content.push(` Usage incomplete for ${data.sessionTotals.partialRequests} request(s).`), (data.childTotals?.total || data.childTotals?.unknownRequests || data.childTotals?.partialRequests) && content.push(` children ${formatTokens(data.childTotals.total)} combined ${formatTokens(data.combinedTotals?.total ?? 0)}`), data.childTotals?.unknownRequests && content.push(` Child usage unavailable for ${data.childTotals.unknownRequests} request(s).`), data.childTotals?.partialRequests && content.push(` Child usage incomplete for ${data.childTotals.partialRequests} request(s).`), data.breakdown) {
1889
+ content.length > 0 && content.push(""), content.push("Context"), content.push(theme.fg("dim", "Estimated visible context. Tokenization, images and hidden reasoning may differ."));
1838
1890
  let rows = [
1839
1891
  { label: "System prompt", tokens: data.breakdown.systemPrompt },
1840
1892
  ...data.breakdown.contextFiles.map((file) => ({ label: file.label, tokens: file.tokens })),
@@ -1842,7 +1894,7 @@ function renderUsageBox(data, maxWidth) {
1842
1894
  { label: "Tool definitions", tokens: data.breakdown.toolDefinitions },
1843
1895
  { label: "User messages", tokens: data.breakdown.user },
1844
1896
  { label: "Assistant text", tokens: data.breakdown.assistantText },
1845
- { label: "Thinking", tokens: data.breakdown.thinking },
1897
+ { label: "Visible thinking", tokens: data.breakdown.thinking },
1846
1898
  { label: "Tool calls", tokens: data.breakdown.toolCalls },
1847
1899
  { label: "Tool results", tokens: data.breakdown.toolResults },
1848
1900
  { label: "Summaries", tokens: data.breakdown.summaries },
@@ -1865,7 +1917,7 @@ function renderUsageBox(data, maxWidth) {
1865
1917
  continue;
1866
1918
  content.length > 0 && content.push("");
1867
1919
  let planName = plan.planLabel ? `${plan.provider} \xB7 ${plan.planLabel}` : plan.provider;
1868
- content.push(`Plan usage (${planName})`);
1920
+ content.push(`Plan usage (${planName}, cached up to 60s)`);
1869
1921
  let labelWidth = Math.max(...plan.windows.map((window) => window.label.length));
1870
1922
  for (let window of plan.windows)
1871
1923
  content.push(planWindowLine(window, labelWidth));
@@ -1882,7 +1934,7 @@ function rowLine(row, labelWidth) {
1882
1934
  }
1883
1935
  function renderContextBox(data, maxWidth) {
1884
1936
  let { breakdown } = data, content = [];
1885
- data.model && content.push(data.model), content.push(theme.fg("dim", "Estimated (chars/4), current session only \u2014 actual token counts may differ.")), content.push("");
1937
+ data.model && content.push(data.model), content.push(theme.fg("dim", "Estimated visible context, current session only. Actual tokens and hidden reasoning may differ.")), content.push("");
1886
1938
  let rows = [
1887
1939
  { label: "System prompt", tokens: breakdown.systemPrompt },
1888
1940
  ...breakdown.contextFiles.map((file) => ({ label: file.label, tokens: file.tokens })),
@@ -1890,7 +1942,7 @@ function renderContextBox(data, maxWidth) {
1890
1942
  { label: "Tool definitions", tokens: breakdown.toolDefinitions },
1891
1943
  { label: "User messages", tokens: breakdown.user, count: breakdown.counts.user },
1892
1944
  { label: "Assistant text", tokens: breakdown.assistantText, count: breakdown.counts.assistantText },
1893
- { label: "Thinking", tokens: breakdown.thinking, count: breakdown.counts.thinking },
1945
+ { label: "Visible thinking", tokens: breakdown.thinking, count: breakdown.counts.thinking },
1894
1946
  { label: "Tool calls", tokens: breakdown.toolCalls, count: breakdown.counts.toolCalls },
1895
1947
  { label: "Tool results", tokens: breakdown.toolResults, count: breakdown.counts.toolResults },
1896
1948
  { label: "Summaries", tokens: breakdown.summaries, count: breakdown.counts.summaries }
@@ -2059,36 +2111,6 @@ var DaxnutsComponent = class {
2059
2111
  }
2060
2112
  };
2061
2113
 
2062
- // packages/coding-agent/dist/modes/interactive/components/boot-ascii.js
2063
- var MOON_ASCII_SMALL = ["\u263E"];
2064
-
2065
- // packages/coding-agent/dist/modes/interactive/components/exit-card.js
2066
- function formatTokens2(count) {
2067
- return count < 1e3 ? count.toString() : count < 1e4 ? `${(count / 1e3).toFixed(1)}k` : count < 1e6 ? `${Math.round(count / 1e3)}k` : count < 1e7 ? `${(count / 1e6).toFixed(1)}M` : `${Math.round(count / 1e6)}M`;
2068
- }
2069
- function computeExitCardStats(entries) {
2070
- let turns = 0, tokens = 0, fileOps = createFileOps();
2071
- for (let entry of entries) {
2072
- if (entry.type !== "message")
2073
- continue;
2074
- let message = entry.message;
2075
- if (message.role === "user")
2076
- turns++;
2077
- else if (message.role === "assistant") {
2078
- let usage = message.usage;
2079
- usage && (tokens += (usage.input ?? 0) + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) + (usage.output ?? 0)), extractFileOpsFromMessage(message, fileOps);
2080
- }
2081
- }
2082
- let { modifiedFiles } = computeFileLists(fileOps);
2083
- return { turns, tokens, filesChanged: modifiedFiles.length };
2084
- }
2085
- function buildExitCard(stats) {
2086
- if (stats.turns === 0)
2087
- return [];
2088
- let line1 = `${MOON_ASCII_SMALL[0] ?? "\u263E"} ${stats.turns} turn${stats.turns === 1 ? "" : "s"} \xB7 ${formatTokens2(stats.tokens)} tok`, line2 = `${stats.filesChanged} file${stats.filesChanged === 1 ? "" : "s"} changed`, moonPad = " ", innerLeft = ` ${line1}`, innerRight = ` ${moonPad}${line2}`, innerWidth = Math.max(innerLeft.length, innerRight.length), pad = (s) => `${s}${" ".repeat(Math.max(0, innerWidth - s.length))}`, top = `\u256D${"\u2500".repeat(innerWidth + 2)}\u256E`, bottom = `\u2570${"\u2500".repeat(innerWidth + 2)}\u256F`, body1 = `\u2502 ${pad(innerLeft)} \u2502`, body2 = `\u2502 ${pad(innerRight)} \u2502`;
2089
- return [top, body1, body2, bottom];
2090
- }
2091
-
2092
2114
  // packages/coding-agent/dist/modes/interactive/components/extension-editor.js
2093
2115
  import { spawn } from "node:child_process";
2094
2116
  import * as fs from "node:fs";
@@ -2140,7 +2162,7 @@ var ExtensionEditorComponent = class extends Container6 {
2140
2162
  fs.writeFileSync(tmpFile, currentText, "utf-8"), this.tui.stop();
2141
2163
  let [editor, ...editorArgs] = editorCmd.split(" ");
2142
2164
  if (process.stdout.write(`Launching external editor: ${editorCmd}
2143
- Pi will resume when the editor exits.
2165
+ lunR will resume when the editor exits.
2144
2166
  `), await new Promise((resolve4) => {
2145
2167
  let child = spawn(editor, [...editorArgs, tmpFile], {
2146
2168
  stdio: "inherit",
@@ -5601,18 +5623,6 @@ function isAnthropicSubscriptionAuthKey(apiKey) {
5601
5623
  function isUnknownModel(model) {
5602
5624
  return !!model && model.provider === "unknown" && model.id === "unknown" && model.api === "unknown";
5603
5625
  }
5604
- function quoteIfNeeded(value) {
5605
- return value.length > 0 && !/[^a-zA-Z0-9_\-./~:@]/.test(value) ? value : `'${value.replace(/'/g, "'\\''")}'`;
5606
- }
5607
- function formatResumeCommand(sessionManager) {
5608
- if (!process.stdout.isTTY || !sessionManager.isPersisted())
5609
- return;
5610
- let sessionFile = sessionManager.getSessionFile();
5611
- if (!sessionFile || !fs2.existsSync(sessionFile))
5612
- return;
5613
- let args = [APP_NAME];
5614
- return sessionManager.usesDefaultSessionDir() || args.push("--session-dir", quoteIfNeeded(sessionManager.getSessionDir())), args.push("--session", sessionManager.getSessionId()), args.join(" ");
5615
- }
5616
5626
  function hasDefaultModelProvider(providerId) {
5617
5627
  return providerId in defaultModelPerProvider;
5618
5628
  }
@@ -5783,15 +5793,15 @@ var InteractiveMode = class _InteractiveMode {
5783
5793
  }
5784
5794
  constructor(runtimeHost, options = {}) {
5785
5795
  this.runtimeHost = runtimeHost, this.options = options, this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd, this.runtimeHost.setBeforeSessionInvalidate((reason) => {
5786
- this.resetExtensionUI(), this.previousPermissionMode = void 0, this.preGoalPermissionMode = void 0, resetPermissions(this.settingsManager.getDefaultPermissionMode()), clearRegistry(), reason !== "fork" && clearRollback(this.sessionManager.getSessionId());
5796
+ this.stopPlanUsagePolling(), this.resetExtensionUI(), this.previousPermissionMode = void 0, this.preGoalPermissionMode = void 0, clearRegistry(), reason !== "fork" && clearRollback(this.sessionManager.getSessionId());
5787
5797
  }), this.runtimeHost.setRebindSession(async () => {
5788
- await this.rebindCurrentSession({ renderBeforeBind: !0 }), initRollback(this.settingsManager, this.sessionManager.getSessionId());
5789
- let mode = this.sessionManager.getPermissionMode() ?? this.settingsManager.getDefaultPermissionMode();
5790
- resetPermissions(mode), this.syncPermissionModeEffects(mode);
5791
- }), this.version = VERSION, this.ui = options.startupView?.ui ?? new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor()), this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink()), registerPermissionModeBridge(() => getPermissionMode()), registerPermissionModeControlBridge({
5798
+ await this.rebindCurrentSession({ renderBeforeBind: !0 }), this.startPlanUsagePolling(), initRollback(this.settingsManager, this.sessionManager.getSessionId());
5799
+ let mode = this.session.permissionMode;
5800
+ this.syncPermissionModeEffects(mode);
5801
+ }), this.version = VERSION, this.ui = options.startupView?.ui ?? new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor()), this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink()), registerPermissionModeBridge(() => this.session.permissionMode), registerPermissionModeControlBridge({
5792
5802
  enterGoalAuto: () => this.enterGoalAuto(),
5793
5803
  leaveGoalAuto: () => this.leaveGoalAuto()
5794
- }), resetPermissions(this.sessionManager.getPermissionMode() ?? this.settingsManager.getDefaultPermissionMode()), this.headerContainer = new Container19(), options.startupView && (this.headerContainer.addChild(new Spacer19(1)), this.headerContainer.addChild(options.startupView.header), this.customFooter = options.startupView.footer), this.loadedResourcesContainer = new Container19(), this.chatContainer = new Container19(), this.pendingMessagesContainer = new Container19(), this.statusContainer = options.startupView?.statusContainer ?? new Container19(), this.widgetContainerAbove = new Container19(), this.widgetContainerBelow = new Container19(), this.keybindings = options.startupView?.keybindings ?? KeybindingsManager.create(), setKeybindings(this.keybindings);
5804
+ }), this.headerContainer = new Container19(), options.startupView && (this.headerContainer.addChild(new Spacer19(1)), this.headerContainer.addChild(options.startupView.header), this.customFooter = options.startupView.footer), this.loadedResourcesContainer = new Container19(), this.chatContainer = new Container19(), this.pendingMessagesContainer = new Container19(), this.statusContainer = options.startupView?.statusContainer ?? new Container19(), this.widgetContainerAbove = new Container19(), this.widgetContainerBelow = new Container19(), this.keybindings = options.startupView?.keybindings ?? KeybindingsManager.create(), setKeybindings(this.keybindings);
5795
5805
  let editorPaddingX = this.settingsManager.getEditorPaddingX(), autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();
5796
5806
  this.defaultEditor = options.startupView?.editor ?? new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {
5797
5807
  paddingX: editorPaddingX,
@@ -5914,7 +5924,7 @@ var InteractiveMode = class _InteractiveMode {
5914
5924
  return resp;
5915
5925
  }
5916
5926
  return "reject";
5917
- }), initRollback(this.settingsManager, this.sessionManager.getSessionId()), setRollbackWarningHandler((msg) => this.showStatus(msg)), this.syncPermissionModeEffects(this.sessionManager.getPermissionMode() ?? this.settingsManager.getDefaultPermissionMode()), await this.themeController.applyFromSettings(), this.headerContainer.clear(), this.options.verbose || !this.settingsManager.getQuietStartup()) {
5927
+ }), initRollback(this.settingsManager, this.sessionManager.getSessionId()), setRollbackWarningHandler((msg) => this.showStatus(msg)), this.syncPermissionModeEffects(this.session.permissionMode), await this.themeController.applyFromSettings(), this.headerContainer.clear(), this.options.verbose || !this.settingsManager.getQuietStartup()) {
5918
5928
  let header = theme.bold(theme.fg("accent", APP_NAME)) + theme.fg("dim", ` v${this.version}`);
5919
5929
  this.builtInHeader = new BootScreenComponent(header, this.buildBootRows()), this.headerContainer.addChild(new Spacer19(1)), this.headerContainer.addChild(this.builtInHeader);
5920
5930
  } else
@@ -5957,17 +5967,22 @@ var InteractiveMode = class _InteractiveMode {
5957
5967
  this.deferredBuiltinAttachPromise && await this.deferredBuiltinAttachPromise;
5958
5968
  }
5959
5969
  planUsageTimer;
5970
+ planUsageBridge;
5960
5971
  startPlanUsagePolling() {
5961
- let bridge = getUsageServiceBridge();
5972
+ this.stopPlanUsagePolling();
5973
+ let bridge = getUsageServiceBridge(this.session.modelRuntime);
5962
5974
  if (!bridge)
5963
5975
  return;
5964
- bridge.setOnUpdate(() => this.ui.requestRender());
5976
+ this.planUsageBridge = bridge, bridge.setOnUpdate(() => this.ui.requestRender());
5965
5977
  let tick = () => {
5966
5978
  let provider = this.session.model?.provider;
5967
5979
  provider && bridge.prefetch(provider);
5968
5980
  };
5969
5981
  tick(), this.planUsageTimer = setInterval(tick, 6e4), this.planUsageTimer.unref?.();
5970
5982
  }
5983
+ stopPlanUsagePolling() {
5984
+ this.planUsageTimer && (clearInterval(this.planUsageTimer), this.planUsageTimer = void 0), this.planUsageBridge?.setOnUpdate(void 0), this.planUsageBridge = void 0;
5985
+ }
5971
5986
  /** Background npm version check. Never blocks first paint. Workspace installs skip. */
5972
5987
  async maybeNotifyCliUpdate() {
5973
5988
  try {
@@ -6049,7 +6064,7 @@ var InteractiveMode = class _InteractiveMode {
6049
6064
  if (extendedKeys !== "on" && extendedKeys !== "always")
6050
6065
  return "tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.";
6051
6066
  if (extendedKeysFormat === "xterm")
6052
- return "tmux extended-keys-format is xterm. Pi works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.";
6067
+ return "tmux extended-keys-format is xterm. lunR works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.";
6053
6068
  }
6054
6069
  }
6055
6070
  getMarkdownThemeWithSettings() {
@@ -7344,7 +7359,7 @@ ${message}`, ["Yes", "No"], opts) === "Yes";
7344
7359
  break;
7345
7360
  }
7346
7361
  case "agent_end":
7347
- this.session.refreshModelFromRegistry(), this.settingsManager.getShowTerminalProgress() && this.ui.terminal.setProgress(!1), this.clearStatusIndicator("working"), this.stopSmoothStreaming(), this.streamingComponent && (this.chatContainer.removeChild(this.streamingComponent), this.streamingComponent = void 0, this.streamingMessage = void 0), this.pendingTools.clear(), this.browserActivityComponent = void 0, this.maybeAutoNameSession(), captureTreeChanges(this.sessionManager.getCwd(), this.sessionManager.getSessionId()), this.ui.requestRender();
7362
+ this.session.refreshModelFromRegistry(), this.ui.terminal.setProgress(!1), this.clearStatusIndicator("working"), this.stopSmoothStreaming(), this.streamingComponent && (this.chatContainer.removeChild(this.streamingComponent), this.streamingComponent = void 0, this.streamingMessage = void 0), this.pendingTools.clear(), this.browserActivityComponent = void 0, this.maybeAutoNameSession(), captureTreeChanges(this.sessionManager.getCwd(), this.sessionManager.getSessionId()), this.ui.requestRender();
7348
7363
  break;
7349
7364
  case "agent_settled":
7350
7365
  if (this.pendingCompactionRender) {
@@ -7360,7 +7375,7 @@ ${message}`, ["Yes", "No"], opts) === "Yes";
7360
7375
  break;
7361
7376
  }
7362
7377
  case "compaction_end": {
7363
- this.settingsManager.getShowTerminalProgress() && this.ui.terminal.setProgress(!1), this.autoCompactionEscapeHandler && (this.defaultEditor.onEscape = this.autoCompactionEscapeHandler, this.autoCompactionEscapeHandler = void 0), this.clearStatusIndicator("compaction"), event.aborted ? event.reason === "manual" ? this.showError("Compaction cancelled") : this.showStatus("Auto-compaction cancelled") : event.result ? this.session.isIdle ? this.renderCompactionResult(event.result) : this.pendingCompactionRender = event.result : event.errorMessage && (event.reason === "manual" ? this.showError(event.errorMessage) : (this.chatContainer.addChild(new Spacer19(1)), this.chatContainer.addChild(new Text21(theme.fg("error", event.errorMessage), 1, 0)))), this.flushCompactionQueue({ willRetry: event.willRetry }), this.ui.requestRender();
7378
+ this.ui.terminal.setProgress(!1), this.autoCompactionEscapeHandler && (this.defaultEditor.onEscape = this.autoCompactionEscapeHandler, this.autoCompactionEscapeHandler = void 0), this.clearStatusIndicator("compaction"), event.aborted ? event.reason === "manual" ? this.showError("Compaction cancelled") : this.showStatus("Auto-compaction cancelled") : event.result ? this.session.isIdle ? this.renderCompactionResult(event.result) : this.pendingCompactionRender = event.result : event.errorMessage && (event.reason === "manual" ? this.showError(event.errorMessage) : (this.chatContainer.addChild(new Spacer19(1)), this.chatContainer.addChild(new Text21(theme.fg("error", event.errorMessage), 1, 0)))), this.flushCompactionQueue({ willRetry: event.willRetry }), this.ui.requestRender();
7364
7379
  break;
7365
7380
  }
7366
7381
  case "auto_retry_start": {
@@ -7534,7 +7549,7 @@ ${message}`, ["Yes", "No"], opts) === "Yes";
7534
7549
  }
7535
7550
  /**
7536
7551
  * Show a transcript notice when a completed assistant message paid for a
7537
- * significant cache miss. Only states observable facts: the miss itself,
7552
+ * significant cache miss. The overlap estimate cannot establish identical prompt content. It also shows
7538
7553
  * a model switch, or an idle gap past the cache TTL.
7539
7554
  */
7540
7555
  maybeShowCacheMissNotice(message) {
@@ -7546,8 +7561,8 @@ ${message}`, ["Yes", "No"], opts) === "Yes";
7546
7561
  addCacheMissNotice(miss) {
7547
7562
  if (miss.missedTokens < 2e4 && miss.missedCost < 0.1)
7548
7563
  return;
7549
- let cost = miss.missedCost >= 0.01 ? ` (~$${miss.missedCost.toFixed(2)})` : "", reBilled = `${formatTokens(miss.missedTokens)} tokens re-billed${cost}`, label = "Cache miss";
7550
- miss.modelChanged ? label = "Cache miss after model switch" : miss.idleMs >= 3e5 && (label = `Cache miss after ${Math.round(miss.idleMs / 6e4)}m idle`);
7564
+ let cost = miss.missedCost >= 0.01 ? ` (~$${miss.missedCost.toFixed(2)})` : "", reBilled = `~${formatTokens(miss.missedTokens)} tokens may have missed cache${cost}`, label = "Estimated cache miss";
7565
+ miss.modelChanged ? label = "Estimated cache miss after model switch" : miss.idleMs >= 3e5 && (label = `Cache miss after ${Math.round(miss.idleMs / 6e4)}m idle`);
7551
7566
  let text = theme.fg("warning", `${label}: ${reBilled}`);
7552
7567
  this.chatContainer.addChild(new Spacer19(1)), this.chatContainer.addChild(new Text21(text, 1, 0));
7553
7568
  }
@@ -7596,7 +7611,7 @@ ${message}`, ["Yes", "No"], opts) === "Yes";
7596
7611
  async shutdown(options) {
7597
7612
  if (this.isShuttingDown)
7598
7613
  return;
7599
- if (this.isShuttingDown = !0, this.unregisterSessionTransfer?.(), this.stopSmoothStreaming(), this.planUsageTimer && (clearInterval(this.planUsageTimer), this.planUsageTimer = void 0), getUsageServiceBridge()?.setOnUpdate(void 0), options?.fromSignal) {
7614
+ if (this.isShuttingDown = !0, this.session.stopAdmission(), this.unregisterSessionTransfer?.(), this.stopSmoothStreaming(), this.stopPlanUsagePolling(), options?.fromSignal) {
7600
7615
  await this.runtimeHost.dispose(), this.themeController.disableAutoSync(), await this.ui.terminal.drainInput(1e3);
7601
7616
  try {
7602
7617
  killAll();
@@ -7607,14 +7622,7 @@ ${message}`, ["Yes", "No"], opts) === "Yes";
7607
7622
  this.themeController.disableAutoSync(), await this.ui.terminal.drainInput(1e3);
7608
7623
  let tracked = list().filter((p) => p.status !== "exited");
7609
7624
  tracked.length > 0 && await this.confirmDisclaimerWithLabels("Session processes still running", `${tracked.length} process(es) started during this session are still alive.
7610
- Kill them before exit?`) && killAll(), this.stop(), await this.runtimeHost.dispose();
7611
- let entries = this.sessionManager?.getEntries?.(), exitStats = entries ? computeExitCardStats(entries) : { turns: 0, tokens: 0, filesChanged: 0 }, cardLines = buildExitCard(exitStats);
7612
- cardLines.length > 0 && process.stdout.write(`${chalk.dim(cardLines.join(`
7613
- `))}
7614
- `);
7615
- let resumeCommand = this.sessionManager && typeof this.sessionManager.isPersisted == "function" ? formatResumeCommand(this.sessionManager) : void 0;
7616
- resumeCommand && process.stdout.write(`${chalk.dim("To resume this session:")} ${resumeCommand}
7617
- `), process.exit(0);
7625
+ Kill them before exit?`) && killAll(), this.stop(), await this.runtimeHost.dispose(), process.exit(0);
7618
7626
  }
7619
7627
  emergencyTerminalExit() {
7620
7628
  this.isShuttingDown = !0, this.unregisterSignalHandlers(), killTrackedDetachedChildren();
@@ -7740,7 +7748,7 @@ Kill them before exit?`) && killAll(), this.stop(), await this.runtimeHost.dispo
7740
7748
  recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir), this.session.cycleThinkingLevel() === void 0 ? this.showStatus("Current model does not support thinking") : (this.footer.invalidate(), this.updateEditorBorderColor());
7741
7749
  }
7742
7750
  cyclePermissionMode() {
7743
- this.applyPermissionMode(nextPermissionMode(getPermissionMode()), { silent: !0 });
7751
+ this.applyPermissionMode(nextPermissionMode(this.session.permissionMode), { silent: !0 });
7744
7752
  }
7745
7753
  async cycleModel(direction) {
7746
7754
  if (!(this.runtimeHost.isDetached || this.transferInProgress)) {
@@ -7816,7 +7824,7 @@ Kill them before exit?`) && killAll(), this.stop(), await this.runtimeHost.dispo
7816
7824
  fs2.writeFileSync(tmpFile, currentText, "utf-8"), this.ui.stop();
7817
7825
  let [editor, ...editorArgs] = editorCmd.split(" ");
7818
7826
  if (process.stdout.write(`Launching external editor: ${editorCmd}
7819
- Pi will resume when the editor exits.
7827
+ lunR will resume when the editor exits.
7820
7828
  `), await new Promise((resolve4) => {
7821
7829
  let child = spawn3(editor, [...editorArgs, tmpFile], {
7822
7830
  stdio: "inherit",
@@ -8153,7 +8161,7 @@ Pi will resume when the editor exits.
8153
8161
  this.settingsManager.setClearOnShrink(enabled), this.ui.setClearOnShrink(enabled), !enabled && !this.activeStatusIndicator && this.statusContainer.clear();
8154
8162
  },
8155
8163
  onShowTerminalProgressChange: (enabled) => {
8156
- this.settingsManager.setShowTerminalProgress(enabled);
8164
+ this.settingsManager.setShowTerminalProgress(enabled), enabled || this.ui.terminal.setProgress(!1);
8157
8165
  },
8158
8166
  onModelTiersEnabledChange: (enabled) => {
8159
8167
  this.settingsManager.setModelTiersEnabled(enabled), getModelTiersBridge()?.refreshToolDescription();
@@ -8245,7 +8253,7 @@ Pi will resume when the editor exits.
8245
8253
  return;
8246
8254
  }
8247
8255
  if (action === "status") {
8248
- this.showStatus((await import("./service-MDQIPQ26.js")).serviceStatusText());
8256
+ this.showStatus((await import("./service-IHLGFLBT.js")).serviceStatusText());
8249
8257
  return;
8250
8258
  }
8251
8259
  this.ui.stop();
@@ -8260,7 +8268,7 @@ Pi will resume when the editor exits.
8260
8268
  } finally {
8261
8269
  this.ui.start(), this.ui.requestRender(!0);
8262
8270
  }
8263
- this.showStatus((await import("./service-MDQIPQ26.js")).serviceStatusText());
8271
+ this.showStatus((await import("./service-IHLGFLBT.js")).serviceStatusText());
8264
8272
  })().catch((error) => this.showStatus(error instanceof Error ? error.message : String(error)));
8265
8273
  },
8266
8274
  onDefaultPermissionModeChange: (mode) => {
@@ -8336,7 +8344,14 @@ Pi will resume when the editor exits.
8336
8344
  let extraDefaults = result.incomplete.length, asked = [], ollama, runner = this.session.extensionRunner, cloudRefresh = globalThis[/* @__PURE__ */ Symbol.for("@lunr/ollama-cloud-refresh")];
8337
8345
  if (cloudRefresh && allowNetwork)
8338
8346
  try {
8339
- await cloudRefresh({ ui: runner.createCommandContext().ui });
8347
+ let resolution = await runtime.getAuth("ollama-cloud");
8348
+ await cloudRefresh({
8349
+ ui: runner.createCommandContext().ui,
8350
+ auth: resolution ? {
8351
+ apiKey: resolution.auth.apiKey,
8352
+ headers: Object.fromEntries(Object.entries(resolution.auth.headers ?? {}).filter((entry) => entry[1] !== null))
8353
+ } : void 0
8354
+ });
8340
8355
  } catch (error) {
8341
8356
  ollama = `ollama-cloud refresh failed: ${error instanceof Error ? error.message : String(error)}`;
8342
8357
  }
@@ -9517,9 +9532,22 @@ Gist: ${gistUrl}`);
9517
9532
  let prompt = `Generate a title of at most 6 words summarizing this request. Reply with the title only \u2014 no quotes, no trailing punctuation, no prefix.
9518
9533
 
9519
9534
  Request:
9520
- ${firstUserText.slice(0, 2e3)}`, title = (await this.session.modelRuntime.complete(model, {
9535
+ ${firstUserText.slice(0, 2e3)}`, requestSessionId = this.sessionManager.getSessionId(), requestSessionFile = this.sessionManager.getSessionFile(), response = await this.session.modelRuntime.complete(model, {
9521
9536
  messages: [{ role: "user", content: [{ type: "text", text: prompt }], timestamp: Date.now() }]
9522
- })).content.filter((c) => c.type === "text").map((c) => c.text).join(" ").replace(/\s+/g, " ").trim();
9537
+ });
9538
+ if (this.sessionManager.getSessionId() !== requestSessionId) {
9539
+ if (requestSessionFile) {
9540
+ let target = SessionManager.open(requestSessionFile);
9541
+ try {
9542
+ target.appendRequestUsage("title", response);
9543
+ } finally {
9544
+ target.dispose();
9545
+ }
9546
+ }
9547
+ return;
9548
+ }
9549
+ this.sessionManager.appendRequestUsage("title", response);
9550
+ let title = response.content.filter((c) => c.type === "text").map((c) => c.text).join(" ").replace(/\s+/g, " ").trim();
9523
9551
  if (title = title.replace(/^["'`]+|["'`.!?]+$/g, "").trim(), !title || this.sessionManager.getSessionName())
9524
9552
  return;
9525
9553
  this.session.setSessionName(title);
@@ -9529,11 +9557,9 @@ ${firstUserText.slice(0, 2e3)}`, title = (await this.session.modelRuntime.comple
9529
9557
  }
9530
9558
  handleSessionCommand() {
9531
9559
  let stats = this.session.getSessionStats(), sessionName = this.sessionManager.getSessionName(), entries = this.sessionManager.getEntries(), cacheWaste = computeCacheWaste(entries, this.session.modelRuntime), perModelMap = /* @__PURE__ */ new Map();
9532
- for (let entry of entries) {
9533
- if (entry.type !== "message" || entry.message.role !== "assistant")
9534
- continue;
9535
- let message = entry.message, usage = message.usage, key = `${message.provider}/${message.responseModel ?? message.model}`, bucket = perModelMap.get(key);
9536
- bucket || (bucket = { key, cost: 0, tokens: 0 }, perModelMap.set(key, bucket)), bucket.cost += usage.cost.total, bucket.tokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
9560
+ for (let request of collectUsageRequests(entries)) {
9561
+ let key = `${request.provider}/${request.model}`, bucket = perModelMap.get(key) ?? { key, cost: 0, tokens: 0 };
9562
+ bucket.cost += request.usage.cost.total, bucket.tokens += usageTokens(request.usage), perModelMap.set(key, bucket);
9537
9563
  }
9538
9564
  let perModel = Array.from(perModelMap.values()).sort((a, b) => b.cost - a.cost), info = `${theme.bold("Session Info")}
9539
9565
 
@@ -9548,7 +9574,7 @@ ${firstUserText.slice(0, 2e3)}`, title = (await this.session.modelRuntime.comple
9548
9574
  `, info += `${theme.fg("dim", "Assistant:")} ${stats.assistantMessages}
9549
9575
  `, info += `${theme.fg("dim", "Tools:")} ${stats.toolCalls} calls, ${stats.toolResults} results
9550
9576
 
9551
- `, info += `${theme.bold("Tokens")}
9577
+ `, info += `${theme.bold("Parent tokens including auxiliary requests")}
9552
9578
  `;
9553
9579
  let { input, cacheRead, cacheWrite } = stats.tokens, promptTokens = input + cacheRead + cacheWrite;
9554
9580
  if (info += `${theme.fg("dim", "Input:")} ${promptTokens.toLocaleString()}
@@ -9562,6 +9588,12 @@ ${firstUserText.slice(0, 2e3)}`, title = (await this.session.modelRuntime.comple
9562
9588
  }
9563
9589
  if (info += `${theme.fg("dim", "Output:")} ${stats.tokens.output.toLocaleString()}
9564
9590
  `, info += `${theme.fg("dim", "Total:")} ${stats.tokens.total.toLocaleString()}
9591
+ `, stats.childUsage?.total && (info += `Children: ${stats.childUsage.total.toLocaleString()} tokens, $${stats.childUsage.cost.toFixed(3)}
9592
+ `, info += `Combined: ${stats.combinedUsage?.total.toLocaleString()} tokens, $${stats.combinedUsage?.cost.toFixed(3)}
9593
+ `), stats.parentUsage?.unknownRequests && (info += `Usage unavailable for ${stats.parentUsage.unknownRequests} request(s).
9594
+ `), stats.parentUsage?.partialRequests && (info += `Usage incomplete for ${stats.parentUsage.partialRequests} request(s).
9595
+ `), stats.parentUsage?.unknownCosts && (info += `Pricing unavailable for ${stats.parentUsage.unknownCosts} request(s).
9596
+ `), info += `Costs use catalog estimates unless the provider reports its account charge.
9565
9597
  `, stats.cost > 0 || cacheWaste.missedTokens > 0) {
9566
9598
  if (info += `
9567
9599
  ${theme.bold("Cost")}
@@ -9572,8 +9604,8 @@ ${theme.bold("Cost")}
9572
9604
  if (cacheWaste.missedTokens > 0) {
9573
9605
  let missLabel = cacheWaste.missCount === 1 ? "1 miss" : `${cacheWaste.missCount} misses`, detail = `${cacheWaste.missedTokens.toLocaleString()} tokens, ${missLabel}`;
9574
9606
  info += cacheWaste.missedCost >= 1e-4 ? `
9575
- ${theme.fg("dim", "Cache Re-billed:")} $${cacheWaste.missedCost.toFixed(3)} ${theme.fg("dim", `(${detail})`)}` : `
9576
- ${theme.fg("dim", "Cache Re-billed:")} ${detail}`;
9607
+ ${theme.fg("dim", "Estimated cache misses:")} $${cacheWaste.missedCost.toFixed(3)} ${theme.fg("dim", `(${detail})`)}` : `
9608
+ ${theme.fg("dim", "Estimated cache misses:")} ${detail}`;
9577
9609
  }
9578
9610
  }
9579
9611
  this.chatContainer.addChild(new Spacer19(1)), this.chatContainer.addChild(new Text21(info, 1, 0)), this.ui.requestRender();
@@ -9612,13 +9644,23 @@ ${theme.fg("dim", "Cache Re-billed:")} ${detail}`;
9612
9644
  // lunr: /usage — current session only: token totals, live context split,
9613
9645
  // context-window bar, and subscription plan usage.
9614
9646
  async handleUsageCommand() {
9615
- let stats = this.session.getSessionStats(), sessionTotals = stats.tokens.total > 0 ? {
9647
+ let stats = this.session.getSessionStats(), sessionTotals = stats.tokens.total > 0 || stats.parentUsage?.requests || stats.parentUsage?.unknownRequests || stats.parentUsage?.partialRequests ? {
9616
9648
  input: stats.tokens.input,
9617
9649
  output: stats.tokens.output,
9618
9650
  cacheRead: stats.tokens.cacheRead,
9619
9651
  cacheWrite: stats.tokens.cacheWrite,
9620
- total: stats.tokens.total
9621
- } : void 0, context = this.session.getContextUsage(), provider = this.session.model?.provider, planResult = await getAllPlanUsageResults(provider, this.session.modelRuntime), breakdown = this.collectUsageBreakdown(), lines = renderUsageBox({ sessionTotals, context, plan: planResult.usages, breakdown }, this.ui.terminal.columns);
9652
+ total: stats.tokens.total,
9653
+ requests: stats.parentUsage?.requests,
9654
+ unknownRequests: stats.parentUsage?.unknownRequests,
9655
+ partialRequests: stats.parentUsage?.partialRequests
9656
+ } : void 0, context = this.session.getContextUsage(), provider = this.session.model?.provider, planResult = await getAllPlanUsageResults(provider, this.session.modelRuntime), breakdown = this.collectUsageBreakdown(), lines = renderUsageBox({
9657
+ sessionTotals,
9658
+ childTotals: stats.childUsage,
9659
+ combinedTotals: stats.combinedUsage,
9660
+ context,
9661
+ plan: planResult.usages,
9662
+ breakdown
9663
+ }, this.ui.terminal.columns);
9622
9664
  this.chatContainer.addChild(new Spacer19(1)), this.chatContainer.addChild(new Text21(lines.join(`
9623
9665
  `), 1, 0)), planResult.errors.length > 0 && this.showStatus(planResult.errors.join(`
9624
9666
  `)), this.ui.requestRender();
@@ -9644,9 +9686,9 @@ ${theme.fg("dim", "Cache Re-billed:")} ${detail}`;
9644
9686
  }
9645
9687
  // /plan is a shortcut into read-only mode for planning.
9646
9688
  async handlePlanCommand(args) {
9647
- let sub = args.toLowerCase(), inReadOnly = getPermissionMode() === "read-only";
9689
+ let sub = args.toLowerCase(), inReadOnly = this.session.permissionMode === "read-only";
9648
9690
  if (sub === "status") {
9649
- this.showStatus(inReadOnly ? "Read mode is active. /plan off to leave it." : `Permission mode: ${getPermissionMode()}.`);
9691
+ this.showStatus(inReadOnly ? "Read mode is active. /plan off to leave it." : `Permission mode: ${this.session.permissionMode}.`);
9650
9692
  return;
9651
9693
  }
9652
9694
  if (sub !== "" && sub !== "on" && sub !== "off") {
@@ -9663,7 +9705,7 @@ ${theme.fg("dim", "Cache Re-billed:")} ${detail}`;
9663
9705
  handleModeCommand(args) {
9664
9706
  let sub = args.toLowerCase();
9665
9707
  if (sub === "status") {
9666
- this.showStatus(`Permission mode: ${getPermissionMode() === "read-only" ? "read" : getPermissionMode()}`);
9708
+ this.showStatus(`Permission mode: ${this.session.permissionMode === "read-only" ? "read" : this.session.permissionMode}`);
9667
9709
  return;
9668
9710
  }
9669
9711
  if (sub === "yolo" || sub === "auto" || sub === "read-only" || sub === "read") {
@@ -9689,23 +9731,23 @@ ${theme.fg("dim", "Cache Re-billed:")} ${detail}`;
9689
9731
  }
9690
9732
  /** Apply addendum + auto-rollback for a mode without a status toast. */
9691
9733
  syncPermissionModeEffects(mode) {
9692
- this.runtimeHost.isDetached || this.transferInProgress || (this.sessionManager.setPermissionMode(mode), mode === "read-only" ? this.session.setSystemPromptAppend(READ_ONLY_MODE_ADDENDUM) : mode === "auto" ? (this.session.setSystemPromptAppend(AUTO_MODE_ADDENDUM), enableRollbackForSession(this.sessionManager.getSessionId())) : this.session.setSystemPromptAppend(void 0));
9734
+ this.runtimeHost.isDetached || this.transferInProgress || (this.session.setPermissionMode(mode), mode === "auto" && enableRollbackForSession(this.sessionManager.getSessionId()));
9693
9735
  }
9694
9736
  // lunr: `/goal` forces session auto without writing settings.
9695
9737
  enterGoalAuto() {
9696
- let next = nextModeForGoal(getPermissionMode(), "enter", this.preGoalPermissionMode);
9697
- this.preGoalPermissionMode = next.saved, next.mode !== getPermissionMode() && this.applyPermissionMode(next.mode, { silent: !0 });
9738
+ let next = nextModeForGoal(this.session.permissionMode, "enter", this.preGoalPermissionMode);
9739
+ this.preGoalPermissionMode = next.saved, next.mode !== this.session.permissionMode && this.applyPermissionMode(next.mode, { silent: !0 });
9698
9740
  }
9699
9741
  leaveGoalAuto() {
9700
- let next = nextModeForGoal(getPermissionMode(), "leave", this.preGoalPermissionMode);
9701
- this.preGoalPermissionMode = next.saved, next.mode !== getPermissionMode() && this.applyPermissionMode(next.mode, { silent: !0 });
9742
+ let next = nextModeForGoal(this.session.permissionMode, "leave", this.preGoalPermissionMode);
9743
+ this.preGoalPermissionMode = next.saved, next.mode !== this.session.permissionMode && this.applyPermissionMode(next.mode, { silent: !0 });
9702
9744
  }
9703
9745
  applyPermissionMode(mode, opts) {
9704
9746
  if (this.runtimeHost.isDetached || this.transferInProgress)
9705
9747
  return;
9706
- this.sessionManager.setPermissionMode(mode), recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
9707
- let prev = getPermissionMode();
9708
- mode === "read-only" && prev !== "read-only" && (this.previousPermissionMode = prev), setPermissionMode(mode), this.ui.requestRender(), mode === "read-only" ? this.session.setSystemPromptAppend(READ_ONLY_MODE_ADDENDUM) : mode === "auto" ? this.session.setSystemPromptAppend(AUTO_MODE_ADDENDUM) : this.session.setSystemPromptAppend(void 0), mode === "auto" && prev !== "auto" ? enableRollbackForSession(this.sessionManager.getSessionId()) : mode !== "auto" && prev === "auto" && disableRollbackForSession(this.sessionManager.getSessionId()), !opts?.silent && (mode === "auto" && prev !== "auto" ? this.showStatus("Auto mode active \u2014 fully autonomous. Rollback enabled for this session.") : mode === "read-only" ? this.showStatus("Read mode active. Changes are blocked.") : this.showStatus(`Permission mode: ${mode}`));
9748
+ recordTuiActivity(this.sessionManager, this.runtimeHost.services.agentDir);
9749
+ let prev = this.session.permissionMode;
9750
+ mode === "read-only" && prev !== "read-only" && (this.previousPermissionMode = prev), this.session.setPermissionMode(mode), this.ui.requestRender(), mode === "auto" && prev !== "auto" ? enableRollbackForSession(this.sessionManager.getSessionId()) : mode !== "auto" && prev === "auto" && disableRollbackForSession(this.sessionManager.getSessionId()), !opts?.silent && (mode === "auto" && prev !== "auto" ? this.showStatus("Auto mode active \u2014 fully autonomous. Rollback enabled for this session.") : mode === "read-only" ? this.showStatus("Read mode active. Changes are blocked.") : this.showStatus(`Permission mode: ${mode}`));
9709
9751
  }
9710
9752
  // Approval dialog for one subagent call launching more than two children.
9711
9753
  // "Reject with feedback" collects a one-line
@@ -9764,37 +9806,60 @@ ${theme.fg("dim", "Cache Re-billed:")} ${detail}`;
9764
9806
  this.showWarning("Wait for the current response to finish before running /rollback.");
9765
9807
  return;
9766
9808
  }
9767
- if (!isRollbackEnabled()) {
9809
+ if (!isRollbackEnabled(this.sessionManager.getSessionId())) {
9768
9810
  this.showStatus("Rollback is disabled \u2014 enable it in /settings \u2192 Rollback");
9769
9811
  return;
9770
9812
  }
9771
- let turnsToConsume = Math.max(1, peekRollbackTurnsConsumed(this.sessionManager.getSessionId())), branch = this.sessionManager.getBranch(), targetUserId, userMessagesSeen = 0;
9772
- for (let i = branch.length - 1; i >= 0; i--) {
9813
+ let recoveryBlocked = getRollbackRecoveryBlockReason(this.sessionManager.getSessionId());
9814
+ if (recoveryBlocked) {
9815
+ this.showWarning(recoveryBlocked);
9816
+ return;
9817
+ }
9818
+ let turnsToConsume = Math.max(1, peekRollbackTurnsConsumed(this.sessionManager.getSessionId())), branch = this.sessionManager.getBranch(), targetUserId = getRollbackTargetUserId(this.sessionManager.getSessionId());
9819
+ if (targetUserId && !branch.some((entry) => entry.id === targetUserId)) {
9820
+ this.showWarning("Rollback recovery belongs to another chat branch. Return to that branch to retry.");
9821
+ return;
9822
+ }
9823
+ let userMessagesSeen = 0, fallbackUserId;
9824
+ for (let i = branch.length - 1; !targetUserId && i >= 0; i--) {
9773
9825
  let entry = branch[i];
9774
- if (entry.type === "message" && entry.message.role === "user" && (userMessagesSeen++, targetUserId = entry.id, userMessagesSeen >= turnsToConsume))
9826
+ if (entry.type === "message" && entry.message.role === "user" && (userMessagesSeen++, fallbackUserId = entry.id, userMessagesSeen >= turnsToConsume))
9775
9827
  break;
9776
9828
  }
9777
- if (!targetUserId) {
9829
+ if (targetUserId ??= fallbackUserId, !targetUserId) {
9778
9830
  this.showStatus("Nothing to roll back");
9779
9831
  return;
9780
9832
  }
9781
9833
  let result;
9834
+ try {
9835
+ result = rollbackLastTurn(this.sessionManager.getSessionId(), { deferCommit: !0, targetUserId });
9836
+ } catch (error) {
9837
+ this.showError(`Rollback could not prepare recovery: ${error instanceof Error ? error.message : String(error)}`);
9838
+ return;
9839
+ }
9840
+ if (!result.complete) {
9841
+ let failures = result.failed.slice(0, 3).map(({ path: file, error }) => `${path2.basename(file)}: ${error}`).join("; ");
9842
+ this.showWarning(`Rollback incomplete. ${result.restored.length} file(s) restored, ${result.deleted.length} deleted, ${result.failed.length} failed. ${failures}. Chat unchanged. /rollback retries this turn's unfinished recovery.`);
9843
+ return;
9844
+ }
9845
+ let chatRewound = !1;
9782
9846
  try {
9783
9847
  let oldSid = this.sessionManager.getSessionId(), forkResult = await this.runtimeHost.fork(targetUserId, { position: "before" });
9784
9848
  if (forkResult.cancelled) {
9785
- this.showStatus("Rollback cancelled");
9849
+ this.showWarning("File recovery complete. Chat rewind cancelled. /rollback retries the same turn without restoring completed files again.");
9786
9850
  return;
9787
9851
  }
9788
- migrateRollbackSession(oldSid, this.sessionManager.getSessionId()), result = rollbackLastTurn(this.sessionManager.getSessionId()), this.redoStack.length = 0, forkResult.selectedText && !this.editor.getText().trim() && this.editor.setText(forkResult.selectedText);
9852
+ chatRewound = !0, migrateRollbackSession(oldSid, this.sessionManager.getSessionId()), result.turnIndex !== void 0 && commitRollbackTurn(this.sessionManager.getSessionId(), result.turnIndex), this.redoStack.length = 0, forkResult.selectedText && !this.editor.getText().trim() && this.editor.setText(forkResult.selectedText);
9789
9853
  } catch (error) {
9790
- this.showError(error instanceof Error ? error.message : String(error));
9854
+ let message = error instanceof Error ? error.message : String(error);
9855
+ this.showError(chatRewound ? `Chat rewound, but finishing rollback failed: ${message}` : `File recovery complete; chat rewind failed: ${message}. /rollback retries the same turn.`);
9791
9856
  return;
9792
9857
  }
9793
9858
  let names = (paths) => {
9794
9859
  let base = paths.slice(0, 3).map((p) => path2.basename(p)).join(", ");
9795
9860
  return paths.length > 3 ? `${base}, \u2026` : base;
9796
9861
  }, parts = [];
9797
- result.restored.length > 0 && parts.push(`${result.restored.length} file(s) restored (${names(result.restored)})`), result.deleted.length > 0 && parts.push(`${result.deleted.length} file(s) deleted (${names(result.deleted)})`), parts.length === 0 && parts.push("no file changes to restore"), this.showStatus(`Rollback complete \u2014 ${parts.join("; ")}.`);
9862
+ result.restored.length > 0 && parts.push(`${result.restored.length} file(s) restored (${names(result.restored)})`), result.deleted.length > 0 && parts.push(`${result.deleted.length} file(s) deleted (${names(result.deleted)})`), parts.length === 0 && parts.push(result.turnIndex === void 0 ? "no file changes to restore" : "file recovery complete"), this.showStatus(`Rollback complete \u2014 ${parts.join("; ")}.`);
9798
9863
  }
9799
9864
  /**
9800
9865
  * Get capitalized display string for an app keybinding action.
@@ -9949,7 +10014,7 @@ ${theme.fg("muted", debugLogPath)}`, 1, 1)), this.ui.requestRender();
9949
10014
  }
9950
10015
  }
9951
10016
  stop() {
9952
- this.setThinkingAnimation(!1), this.stopCatalogRefresh?.(), this.stopCatalogRefresh = void 0, this.settingsManager.getShowTerminalProgress() && this.ui.terminal.setProgress(!1), this.clearStatusIndicator(), this.themeController.disableAutoSync(), this.clearExtensionTerminalInputListeners(), this.footer.dispose(), this.footerDataProvider.dispose(), this.disposeChatToolComponents(), this.unsubscribe && this.unsubscribe(), this.isInitialized && (this.ui.stop(), this.isInitialized = !1), this.unregisterSignalHandlers();
10017
+ this.setThinkingAnimation(!1), this.stopCatalogRefresh?.(), this.stopCatalogRefresh = void 0, this.ui.terminal.setProgress(!1), this.clearStatusIndicator(), this.themeController.disableAutoSync(), this.clearExtensionTerminalInputListeners(), this.footer.dispose(), this.footerDataProvider.dispose(), this.disposeChatToolComponents(), this.unsubscribe && this.unsubscribe(), this.isInitialized && (this.ui.stop(), this.isInitialized = !1), this.unregisterSignalHandlers();
9953
10018
  }
9954
10019
  };
9955
10020
 
@@ -9972,7 +10037,6 @@ export {
9972
10037
  TreeSelectorComponent,
9973
10038
  UserMessageComponent,
9974
10039
  UserMessageSelectorComponent,
9975
- formatResumeCommand,
9976
10040
  startInteractiveToolInstalls,
9977
10041
  InteractiveMode
9978
10042
  };