@ashx-j/lunr 0.2.25 → 0.2.27

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 (729) hide show
  1. package/CHANGELOG.md +31 -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/index.d.ts.map +1 -1
  12. package/dist/builtin-extensions/index.js +1 -0
  13. package/dist/builtin-extensions/index.js.map +1 -1
  14. package/dist/builtin-extensions/lunr-computer-use.d.ts +3 -0
  15. package/dist/builtin-extensions/lunr-computer-use.d.ts.map +1 -0
  16. package/dist/builtin-extensions/lunr-computer-use.js +179 -0
  17. package/dist/builtin-extensions/lunr-computer-use.js.map +1 -0
  18. package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
  19. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-cron.js +94 -108
  21. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  22. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
  24. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  25. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
  26. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
  27. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
  28. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  29. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
  30. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  31. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  34. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  36. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  37. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  38. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
  40. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  41. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  42. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
  43. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  44. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
  45. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
  46. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
  47. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
  48. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
  49. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
  50. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
  51. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
  52. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
  53. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
  55. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  56. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
  57. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
  59. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
  61. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
  63. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
  64. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
  65. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
  67. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  68. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
  71. package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
  72. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
  73. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
  74. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
  75. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
  76. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
  77. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
  78. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  79. package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
  80. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  81. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  82. package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
  83. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  84. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
  85. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
  86. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
  87. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
  88. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
  89. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
  90. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
  91. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
  92. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
  93. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
  94. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
  95. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
  96. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  97. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
  98. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  99. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
  101. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  102. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
  103. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  105. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  106. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
  108. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  109. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
  110. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
  112. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  113. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
  115. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  116. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
  117. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  118. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
  119. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  120. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  121. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
  122. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  123. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  124. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
  125. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  126. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
  127. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +1 -1
  128. package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
  129. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -4
  130. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
  131. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +8 -5
  132. package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
  133. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  134. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +15 -31
  136. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  137. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  138. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
  139. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  140. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts +1 -0
  141. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +21 -4
  143. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  144. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  145. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +11 -4
  146. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  147. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  148. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +121 -25
  149. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  150. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  151. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +25 -5
  152. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  153. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts +1 -0
  154. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js +5 -0
  156. package/dist/builtin-extensions/pi-subagents/src/runs/shared/chain-outputs.js.map +1 -1
  157. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +1 -1
  158. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -1
  159. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +2 -0
  160. package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -1
  161. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
  162. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  163. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
  164. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  165. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
  166. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  167. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
  168. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  169. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
  172. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  173. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
  175. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  176. package/dist/builtin-extensions/pi-subagents/src/tui/communication.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js +1 -1
  178. package/dist/builtin-extensions/pi-subagents/src/tui/communication.js.map +1 -1
  179. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +2 -1
  180. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  181. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +22 -11
  182. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  183. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  184. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  185. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  186. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-tps.js +20 -17
  188. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  189. package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
  190. package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
  192. package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
  193. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
  194. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
  195. package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
  196. package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
  197. package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
  198. package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
  199. package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
  200. package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
  201. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  202. package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
  203. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  204. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
  205. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  206. package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
  207. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  208. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  209. package/dist/builtin-extensions/pi-web-access/index.js +48 -73
  210. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  211. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
  212. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
  214. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
  215. package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
  216. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  217. package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
  218. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  219. package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
  220. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
  221. package/dist/builtin-extensions/simple-pi-memory.js +1 -1
  222. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
  223. package/dist/cli/install-cli.d.ts.map +1 -1
  224. package/dist/cli/install-cli.js +38 -30
  225. package/dist/cli/install-cli.js.map +1 -1
  226. package/dist/core/agent-session-runtime.d.ts +13 -0
  227. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  228. package/dist/core/agent-session-runtime.js +75 -11
  229. package/dist/core/agent-session-runtime.js.map +1 -1
  230. package/dist/core/agent-session-services.d.ts +1 -0
  231. package/dist/core/agent-session-services.d.ts.map +1 -1
  232. package/dist/core/agent-session-services.js +1 -0
  233. package/dist/core/agent-session-services.js.map +1 -1
  234. package/dist/core/agent-session.d.ts +40 -6
  235. package/dist/core/agent-session.d.ts.map +1 -1
  236. package/dist/core/agent-session.js +309 -76
  237. package/dist/core/agent-session.js.map +1 -1
  238. package/dist/core/browser/runtime.d.ts +2 -0
  239. package/dist/core/browser/runtime.d.ts.map +1 -1
  240. package/dist/core/browser/runtime.js +80 -45
  241. package/dist/core/browser/runtime.js.map +1 -1
  242. package/dist/core/browser/setup.d.ts.map +1 -1
  243. package/dist/core/browser/setup.js +12 -1
  244. package/dist/core/browser/setup.js.map +1 -1
  245. package/dist/core/computer-use/adapter.d.ts +28 -0
  246. package/dist/core/computer-use/adapter.d.ts.map +1 -0
  247. package/dist/core/computer-use/adapter.js +138 -0
  248. package/dist/core/computer-use/adapter.js.map +1 -0
  249. package/dist/core/computer-use/image.d.ts +27 -0
  250. package/dist/core/computer-use/image.d.ts.map +1 -0
  251. package/dist/core/computer-use/image.js +84 -0
  252. package/dist/core/computer-use/image.js.map +1 -0
  253. package/dist/core/computer-use/lease.d.ts +18 -0
  254. package/dist/core/computer-use/lease.d.ts.map +1 -0
  255. package/dist/core/computer-use/lease.js +129 -0
  256. package/dist/core/computer-use/lease.js.map +1 -0
  257. package/dist/core/computer-use/macos-runtime.d.ts +14 -0
  258. package/dist/core/computer-use/macos-runtime.d.ts.map +1 -0
  259. package/dist/core/computer-use/macos-runtime.js +148 -0
  260. package/dist/core/computer-use/macos-runtime.js.map +1 -0
  261. package/dist/core/computer-use/policy.d.ts +19 -0
  262. package/dist/core/computer-use/policy.d.ts.map +1 -0
  263. package/dist/core/computer-use/policy.js +67 -0
  264. package/dist/core/computer-use/policy.js.map +1 -0
  265. package/dist/core/computer-use/release.generated.d.ts +31 -0
  266. package/dist/core/computer-use/release.generated.d.ts.map +1 -0
  267. package/dist/core/computer-use/release.generated.js +36 -0
  268. package/dist/core/computer-use/release.generated.js.map +1 -0
  269. package/dist/core/computer-use/runtime.d.ts +13 -0
  270. package/dist/core/computer-use/runtime.d.ts.map +1 -0
  271. package/dist/core/computer-use/runtime.js +158 -0
  272. package/dist/core/computer-use/runtime.js.map +1 -0
  273. package/dist/core/computer-use/schemas.d.ts +100 -0
  274. package/dist/core/computer-use/schemas.d.ts.map +1 -0
  275. package/dist/core/computer-use/schemas.js +96 -0
  276. package/dist/core/computer-use/schemas.js.map +1 -0
  277. package/dist/core/computer-use/windows-desktop.d.ts +3 -0
  278. package/dist/core/computer-use/windows-desktop.d.ts.map +1 -0
  279. package/dist/core/computer-use/windows-desktop.js +48 -0
  280. package/dist/core/computer-use/windows-desktop.js.map +1 -0
  281. package/dist/core/computer-use/workflow.d.ts +38 -0
  282. package/dist/core/computer-use/workflow.d.ts.map +1 -0
  283. package/dist/core/computer-use/workflow.js +900 -0
  284. package/dist/core/computer-use/workflow.js.map +1 -0
  285. package/dist/core/cron/jobs.d.ts +26 -8
  286. package/dist/core/cron/jobs.d.ts.map +1 -1
  287. package/dist/core/cron/jobs.js +357 -232
  288. package/dist/core/cron/jobs.js.map +1 -1
  289. package/dist/core/cron/origin-context.d.ts +1 -0
  290. package/dist/core/cron/origin-context.d.ts.map +1 -1
  291. package/dist/core/cron/origin-context.js.map +1 -1
  292. package/dist/core/cron/scheduler.d.ts +22 -17
  293. package/dist/core/cron/scheduler.d.ts.map +1 -1
  294. package/dist/core/cron/scheduler.js +153 -73
  295. package/dist/core/cron/scheduler.js.map +1 -1
  296. package/dist/core/extensions/index.d.ts +1 -1
  297. package/dist/core/extensions/index.d.ts.map +1 -1
  298. package/dist/core/extensions/index.js.map +1 -1
  299. package/dist/core/extensions/loader.d.ts.map +1 -1
  300. package/dist/core/extensions/loader.js +4 -0
  301. package/dist/core/extensions/loader.js.map +1 -1
  302. package/dist/core/extensions/runner.d.ts +1 -0
  303. package/dist/core/extensions/runner.d.ts.map +1 -1
  304. package/dist/core/extensions/runner.js +8 -0
  305. package/dist/core/extensions/runner.js.map +1 -1
  306. package/dist/core/extensions/types.d.ts +8 -0
  307. package/dist/core/extensions/types.d.ts.map +1 -1
  308. package/dist/core/extensions/types.js.map +1 -1
  309. package/dist/core/footer-data-provider.d.ts +4 -0
  310. package/dist/core/footer-data-provider.d.ts.map +1 -1
  311. package/dist/core/footer-data-provider.js +22 -1
  312. package/dist/core/footer-data-provider.js.map +1 -1
  313. package/dist/core/large-subagent-launch.d.ts +1 -1
  314. package/dist/core/large-subagent-launch.d.ts.map +1 -1
  315. package/dist/core/large-subagent-launch.js +7 -7
  316. package/dist/core/large-subagent-launch.js.map +1 -1
  317. package/dist/core/model-registry.d.ts +2 -0
  318. package/dist/core/model-registry.d.ts.map +1 -1
  319. package/dist/core/model-registry.js +5 -0
  320. package/dist/core/model-registry.js.map +1 -1
  321. package/dist/core/model-runtime.d.ts +4 -1
  322. package/dist/core/model-runtime.d.ts.map +1 -1
  323. package/dist/core/model-runtime.js +40 -4
  324. package/dist/core/model-runtime.js.map +1 -1
  325. package/dist/core/package-manager.d.ts.map +1 -1
  326. package/dist/core/package-manager.js.map +1 -1
  327. package/dist/core/permissions.d.ts +4 -4
  328. package/dist/core/permissions.d.ts.map +1 -1
  329. package/dist/core/permissions.js +25 -38
  330. package/dist/core/permissions.js.map +1 -1
  331. package/dist/core/plan-mode.d.ts +5 -13
  332. package/dist/core/plan-mode.d.ts.map +1 -1
  333. package/dist/core/plan-mode.js +135 -116
  334. package/dist/core/plan-mode.js.map +1 -1
  335. package/dist/core/project-trust.d.ts.map +1 -1
  336. package/dist/core/project-trust.js +1 -1
  337. package/dist/core/project-trust.js.map +1 -1
  338. package/dist/core/prompt-resource-bridge.d.ts +12 -0
  339. package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
  340. package/dist/core/prompt-resource-bridge.js +9 -0
  341. package/dist/core/prompt-resource-bridge.js.map +1 -0
  342. package/dist/core/protected-targets.d.ts +6 -0
  343. package/dist/core/protected-targets.d.ts.map +1 -0
  344. package/dist/core/protected-targets.js +45 -0
  345. package/dist/core/protected-targets.js.map +1 -0
  346. package/dist/core/resource-loader.d.ts.map +1 -1
  347. package/dist/core/resource-loader.js +7 -0
  348. package/dist/core/resource-loader.js.map +1 -1
  349. package/dist/core/rollback.d.ts +19 -3
  350. package/dist/core/rollback.d.ts.map +1 -1
  351. package/dist/core/rollback.js +172 -56
  352. package/dist/core/rollback.js.map +1 -1
  353. package/dist/core/runtime-credentials.d.ts +3 -0
  354. package/dist/core/runtime-credentials.d.ts.map +1 -1
  355. package/dist/core/runtime-credentials.js +14 -1
  356. package/dist/core/runtime-credentials.js.map +1 -1
  357. package/dist/core/sdk.d.ts +3 -0
  358. package/dist/core/sdk.d.ts.map +1 -1
  359. package/dist/core/sdk.js +1 -0
  360. package/dist/core/sdk.js.map +1 -1
  361. package/dist/core/session-manager.d.ts +6 -0
  362. package/dist/core/session-manager.d.ts.map +1 -1
  363. package/dist/core/session-manager.js +95 -32
  364. package/dist/core/session-manager.js.map +1 -1
  365. package/dist/core/session-ownership.d.ts.map +1 -1
  366. package/dist/core/session-ownership.js +8 -3
  367. package/dist/core/session-ownership.js.map +1 -1
  368. package/dist/core/session-retention.d.ts.map +1 -1
  369. package/dist/core/session-retention.js +18 -7
  370. package/dist/core/session-retention.js.map +1 -1
  371. package/dist/core/session-startup-settings.d.ts +10 -0
  372. package/dist/core/session-startup-settings.d.ts.map +1 -0
  373. package/dist/core/session-startup-settings.js +70 -0
  374. package/dist/core/session-startup-settings.js.map +1 -0
  375. package/dist/core/settings-manager.d.ts +6 -0
  376. package/dist/core/settings-manager.d.ts.map +1 -1
  377. package/dist/core/settings-manager.js +19 -0
  378. package/dist/core/settings-manager.js.map +1 -1
  379. package/dist/core/subagent-event-transport.d.ts +3 -0
  380. package/dist/core/subagent-event-transport.d.ts.map +1 -0
  381. package/dist/core/subagent-event-transport.js +61 -0
  382. package/dist/core/subagent-event-transport.js.map +1 -0
  383. package/dist/core/subscriptions.d.ts +16 -7
  384. package/dist/core/subscriptions.d.ts.map +1 -1
  385. package/dist/core/subscriptions.js +96 -55
  386. package/dist/core/subscriptions.js.map +1 -1
  387. package/dist/core/trust-manager.d.ts +2 -1
  388. package/dist/core/trust-manager.d.ts.map +1 -1
  389. package/dist/core/trust-manager.js +6 -1
  390. package/dist/core/trust-manager.js.map +1 -1
  391. package/dist/core/update-check.d.ts.map +1 -1
  392. package/dist/core/update-check.js.map +1 -1
  393. package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
  394. package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
  395. package/dist/core/usage-adapters/kimi-coding.js +2 -2
  396. package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
  397. package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
  398. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  399. package/dist/core/usage-adapters/openai-codex.js +3 -3
  400. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  401. package/dist/core/usage-adapters/xai.d.ts +2 -2
  402. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  403. package/dist/core/usage-adapters/xai.js +3 -3
  404. package/dist/core/usage-adapters/xai.js.map +1 -1
  405. package/dist/core/usage-adapters/zai.d.ts +2 -2
  406. package/dist/core/usage-adapters/zai.d.ts.map +1 -1
  407. package/dist/core/usage-adapters/zai.js +2 -2
  408. package/dist/core/usage-adapters/zai.js.map +1 -1
  409. package/dist/core/usage-service.d.ts +9 -2
  410. package/dist/core/usage-service.d.ts.map +1 -1
  411. package/dist/core/usage-service.js +95 -50
  412. package/dist/core/usage-service.js.map +1 -1
  413. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  414. package/dist/gateway/adapters/discord.js +2 -2
  415. package/dist/gateway/adapters/discord.js.map +1 -1
  416. package/dist/gateway/agent-bridge.d.ts +9 -1
  417. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  418. package/dist/gateway/agent-bridge.js +91 -37
  419. package/dist/gateway/agent-bridge.js.map +1 -1
  420. package/dist/gateway/approval.d.ts.map +1 -1
  421. package/dist/gateway/approval.js +3 -3
  422. package/dist/gateway/approval.js.map +1 -1
  423. package/dist/gateway/authz.d.ts +4 -4
  424. package/dist/gateway/authz.d.ts.map +1 -1
  425. package/dist/gateway/authz.js +8 -12
  426. package/dist/gateway/authz.js.map +1 -1
  427. package/dist/gateway/buttons.d.ts +8 -1
  428. package/dist/gateway/buttons.d.ts.map +1 -1
  429. package/dist/gateway/buttons.js +76 -18
  430. package/dist/gateway/buttons.js.map +1 -1
  431. package/dist/gateway/commands.d.ts +1 -0
  432. package/dist/gateway/commands.d.ts.map +1 -1
  433. package/dist/gateway/commands.js +12 -10
  434. package/dist/gateway/commands.js.map +1 -1
  435. package/dist/gateway/cron.d.ts +12 -11
  436. package/dist/gateway/cron.d.ts.map +1 -1
  437. package/dist/gateway/cron.js +85 -62
  438. package/dist/gateway/cron.js.map +1 -1
  439. package/dist/gateway/index.d.ts.map +1 -1
  440. package/dist/gateway/index.js +5 -4
  441. package/dist/gateway/index.js.map +1 -1
  442. package/dist/gateway/mobile-commands.d.ts +1 -0
  443. package/dist/gateway/mobile-commands.d.ts.map +1 -1
  444. package/dist/gateway/mobile-commands.js +64 -22
  445. package/dist/gateway/mobile-commands.js.map +1 -1
  446. package/dist/gateway/presenter.d.ts +12 -2
  447. package/dist/gateway/presenter.d.ts.map +1 -1
  448. package/dist/gateway/presenter.js +74 -39
  449. package/dist/gateway/presenter.js.map +1 -1
  450. package/dist/gateway/router.d.ts +2 -2
  451. package/dist/gateway/router.d.ts.map +1 -1
  452. package/dist/gateway/router.js +22 -9
  453. package/dist/gateway/router.js.map +1 -1
  454. package/dist/gateway/service.d.ts +2 -0
  455. package/dist/gateway/service.d.ts.map +1 -1
  456. package/dist/gateway/service.js +153 -0
  457. package/dist/gateway/service.js.map +1 -1
  458. package/dist/gateway/setup.d.ts.map +1 -1
  459. package/dist/gateway/setup.js +6 -4
  460. package/dist/gateway/setup.js.map +1 -1
  461. package/dist/main.d.ts.map +1 -1
  462. package/dist/main.js +86 -33
  463. package/dist/main.js.map +1 -1
  464. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  465. package/dist/modes/interactive/components/assistant-message.js +6 -4
  466. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  467. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/copyable-text.js +3 -2
  469. package/dist/modes/interactive/components/copyable-text.js.map +1 -1
  470. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/extension-editor.js +1 -1
  472. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  473. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  474. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  475. package/dist/modes/interactive/components/settings-selector.js +20 -0
  476. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  477. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  478. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  479. package/dist/modes/interactive/interactive-mode.js +104 -109
  480. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  481. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  482. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  483. package/dist/modes/print-mode.d.ts.map +1 -1
  484. package/dist/modes/print-mode.js +9 -1
  485. package/dist/modes/print-mode.js.map +1 -1
  486. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  487. package/dist/modes/rpc/rpc-mode.js +2 -1
  488. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  489. package/dist/node-runtime/adapter-247RTYLS.js +16 -0
  490. package/dist/node-runtime/agent-session-services-KDMSPQDY.js +53 -0
  491. package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
  492. package/dist/node-runtime/{builtin-extensions-ZLAX7TUH.js → builtin-extensions-OX6KELNX.js} +9 -7
  493. package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
  494. package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
  495. package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
  496. package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
  497. package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
  498. package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
  499. package/dist/node-runtime/{chunk-NRKGMJYU.js → chunk-6O3IW3IA.js} +2 -2
  500. package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
  501. package/dist/node-runtime/chunk-A2WO6WIN.js +1197 -0
  502. package/dist/node-runtime/{chunk-ZXSGTGJ6.js → chunk-APVM5NEU.js} +169 -148
  503. package/dist/node-runtime/{chunk-RC7DMV45.js → chunk-AYHH7YSD.js} +205 -144
  504. package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
  505. package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
  506. package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
  507. package/dist/node-runtime/{chunk-KWIYUUZK.js → chunk-C3P6Q3B2.js} +469 -283
  508. package/dist/node-runtime/{chunk-YCUZEGJG.js → chunk-DQSCFU7R.js} +17 -8
  509. package/dist/node-runtime/chunk-EBLAZVSA.js +4170 -0
  510. package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-EPR2F3GU.js} +68 -20
  511. package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
  512. package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
  513. package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
  514. package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
  515. package/dist/node-runtime/chunk-FE3WZI7F.js +290 -0
  516. package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-FIRA54AC.js} +2 -5
  517. package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
  518. package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
  519. package/dist/node-runtime/chunk-FY4A63RK.js +73 -0
  520. package/dist/node-runtime/chunk-FYIFPFXE.js +98 -0
  521. package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
  522. package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
  523. package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
  524. package/dist/node-runtime/{chunk-6XL67VVY.js → chunk-HUD2RFJW.js} +17 -2
  525. package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-I2H5QMWW.js} +3 -3
  526. package/dist/node-runtime/chunk-IAZSK7KK.js +108 -0
  527. package/dist/node-runtime/{chunk-2HHLJWGD.js → chunk-IHHTWSXN.js} +9 -9
  528. package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
  529. package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
  530. package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
  531. package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-JQYNHAKX.js} +1 -1
  532. package/dist/node-runtime/{chunk-WF7PGWRZ.js → chunk-JWEVT363.js} +37 -28
  533. package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
  534. package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
  535. package/dist/node-runtime/{chunk-IJIFHRTB.js → chunk-MQPKUHRN.js} +165 -85
  536. package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
  537. package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
  538. package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
  539. package/dist/node-runtime/{chunk-E4D3IGP2.js → chunk-QNVMKNNN.js} +20 -17
  540. package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
  541. package/dist/node-runtime/{chunk-7S3T6YEA.js → chunk-R4WSB2MQ.js} +5 -5
  542. package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
  543. package/dist/node-runtime/{chunk-3XPLBUEM.js → chunk-RLGY2QIL.js} +49 -59
  544. package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
  545. package/dist/node-runtime/{chunk-AD6VXAO7.js → chunk-TCT6PCUR.js} +47 -115
  546. package/dist/node-runtime/chunk-U5F4IC7R.js +53 -0
  547. package/dist/node-runtime/{chunk-OCVIXVTZ.js → chunk-UBWW2PID.js} +13 -2
  548. package/dist/node-runtime/{chunk-HFVZUPFJ.js → chunk-UNUZICC4.js} +3 -3
  549. package/dist/node-runtime/{chunk-LQP3RB67.js → chunk-UYRKUKFE.js} +1 -1
  550. package/dist/node-runtime/{chunk-DSIKTUPW.js → chunk-VSUEAI7O.js} +2993 -3820
  551. package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
  552. package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
  553. package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
  554. package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
  555. package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
  556. package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
  557. package/dist/node-runtime/{chunk-VQFSUJJG.js → chunk-ZDJUR45D.js} +430 -129
  558. package/dist/node-runtime/{chunk-YDO2F2IA.js → chunk-ZEVFBFNF.js} +95 -142
  559. package/dist/node-runtime/chunk-ZIQUS5QO.js +180 -0
  560. package/dist/node-runtime/cli-runtime.js +4 -4
  561. package/dist/node-runtime/{command-6WDOYKS6.js → command-3HMSY6W2.js} +5 -5
  562. package/dist/node-runtime/{commands-NZLSOHPE.js → commands-D6A6H4TS.js} +11 -16
  563. package/dist/node-runtime/commands-OCSSEEWJ.js +37 -0
  564. package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
  565. package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
  566. package/dist/node-runtime/{direct-tool-executor-77GW4F5P.js → direct-tool-executor-2QJXVQD2.js} +8 -10
  567. package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
  568. package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-BRWF5AHI.js} +4 -4
  569. package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
  570. package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
  571. package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
  572. package/dist/node-runtime/{gateway-INAYBF4Q.js → gateway-6623C2U3.js} +61 -53
  573. package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
  574. package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
  575. package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
  576. package/dist/node-runtime/{goal-NJEE5CTU.js → goal-AIHEDUYA.js} +5 -5
  577. package/dist/node-runtime/index.js +54 -48
  578. package/dist/node-runtime/{init-HS6NQXSK.js → init-JBQJIPYI.js} +3 -4
  579. package/dist/node-runtime/{install-cli-KL4UDDAD.js → install-cli-INGHIVBY.js} +30 -25
  580. package/dist/node-runtime/interactive-mode-FM5DNUSW.js +74 -0
  581. package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
  582. package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
  583. package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
  584. package/dist/node-runtime/lunr-computer-use-VDP2QNRQ.js +158 -0
  585. package/dist/node-runtime/{lunr-cron-LWIZJM2N.js → lunr-cron-LKVA5CZZ.js} +94 -79
  586. package/dist/node-runtime/main.js +42 -39
  587. package/dist/node-runtime/{mobile-commands-J7OJEKFO.js → mobile-commands-XT3NQXLD.js} +13 -12
  588. package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
  589. package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
  590. package/dist/node-runtime/{package-manager-cli-VYZM5WHN.js → package-manager-cli-CYM262SI.js} +20 -19
  591. package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
  592. package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
  593. package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
  594. package/dist/node-runtime/{pi-mcp-adapter-5UKBZP44.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
  595. package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
  596. package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
  597. package/dist/node-runtime/{pi-subagents-DNY7EAIG.js → pi-subagents-LT3CTO4E.js} +114 -116
  598. package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
  599. package/dist/node-runtime/{print-mode-XSFM26EL.js → print-mode-2XHN5SUA.js} +4 -3
  600. package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
  601. package/dist/node-runtime/{proxy-modes-LGEUYD7R.js → proxy-modes-VEGC6QG5.js} +9 -13
  602. package/dist/node-runtime/rpc-entry.js +42 -39
  603. package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
  604. package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
  605. package/dist/node-runtime/runtime-UGXM4NPQ.js +21 -0
  606. package/dist/node-runtime/{runtime-bridges-VRDDR73P.js → runtime-bridges-DNKMNJCF.js} +8 -7
  607. package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
  608. package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LNSPDTKY.js} +4 -4
  609. package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-YIFIAVGC.js} +3 -3
  610. package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
  611. package/dist/node-runtime/{settings-manager-J4SPQPDJ.js → settings-manager-P2TKGYTR.js} +6 -5
  612. package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
  613. package/dist/node-runtime/{setup-CQ2NLVK5.js → setup-OLQ4GXWS.js} +22 -21
  614. package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
  615. package/dist/node-runtime/{subagent-executor-KZZQGAKV.js → subagent-executor-Q5F7DBVM.js} +141 -62
  616. package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
  617. package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
  618. package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
  619. package/dist/node-runtime/{update-cli-GTFJC7XK.js → update-cli-F3XXJANQ.js} +7 -6
  620. package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
  621. package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
  622. package/dist/node-runtime/workflow-ICDI4N3J.js +767 -0
  623. package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
  624. package/dist/utils/clipboard-image.d.ts.map +1 -1
  625. package/dist/utils/clipboard-image.js.map +1 -1
  626. package/dist/utils/exif-orientation.d.ts.map +1 -1
  627. package/dist/utils/exif-orientation.js +25 -10
  628. package/dist/utils/exif-orientation.js.map +1 -1
  629. package/dist/utils/image-resize-core.d.ts +2 -0
  630. package/dist/utils/image-resize-core.d.ts.map +1 -1
  631. package/dist/utils/image-resize-core.js +12 -0
  632. package/dist/utils/image-resize-core.js.map +1 -1
  633. package/dist/utils/paths.d.ts +4 -0
  634. package/dist/utils/paths.d.ts.map +1 -1
  635. package/dist/utils/paths.js +33 -2
  636. package/dist/utils/paths.js.map +1 -1
  637. package/dist/utils/sanitize-terminal-text.d.ts +7 -0
  638. package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
  639. package/dist/utils/sanitize-terminal-text.js +67 -0
  640. package/dist/utils/sanitize-terminal-text.js.map +1 -0
  641. package/docs/browser.md +1 -1
  642. package/docs/computer-use.md +362 -0
  643. package/docs/custom-provider.md +3 -3
  644. package/docs/extensions.md +8 -4
  645. package/docs/features.md +22 -12
  646. package/docs/keybindings.md +1 -1
  647. package/docs/models.md +5 -5
  648. package/docs/packages.md +1 -1
  649. package/docs/providers.md +2 -2
  650. package/docs/rpc.md +7 -7
  651. package/docs/security.md +10 -5
  652. package/docs/sessions.md +2 -2
  653. package/docs/skills.md +1 -1
  654. package/docs/terminal-setup.md +7 -7
  655. package/docs/themes.md +1 -1
  656. package/docs/usage.md +1 -1
  657. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  658. package/examples/extensions/bash-spawn-hook.ts +1 -1
  659. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  660. package/examples/extensions/claude-rules.ts +1 -1
  661. package/examples/extensions/commands.ts +1 -1
  662. package/examples/extensions/custom-compaction.ts +1 -1
  663. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  664. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  665. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  666. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  667. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  668. package/examples/extensions/doom-overlay/index.ts +1 -1
  669. package/examples/extensions/git-merge-and-resolve.ts +2 -2
  670. package/examples/extensions/gondolin/index.ts +1 -1
  671. package/examples/extensions/gondolin/package-lock.json +2 -2
  672. package/examples/extensions/gondolin/package.json +1 -1
  673. package/examples/extensions/hidden-thinking-label.ts +1 -1
  674. package/examples/extensions/inline-bash.ts +2 -2
  675. package/examples/extensions/input-transform-streaming.ts +2 -2
  676. package/examples/extensions/input-transform.ts +2 -2
  677. package/examples/extensions/interactive-shell.ts +1 -1
  678. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  679. package/examples/extensions/mac-system-theme.ts +1 -1
  680. package/examples/extensions/minimal-mode.ts +1 -1
  681. package/examples/extensions/modal-editor.ts +1 -1
  682. package/examples/extensions/model-status.ts +1 -1
  683. package/examples/extensions/notify.ts +3 -3
  684. package/examples/extensions/overlay-qa-tests.ts +1 -1
  685. package/examples/extensions/overlay-test.ts +1 -1
  686. package/examples/extensions/pirate.ts +1 -1
  687. package/examples/extensions/preset.ts +3 -3
  688. package/examples/extensions/project-trust.ts +4 -4
  689. package/examples/extensions/prompt-customizer.ts +1 -1
  690. package/examples/extensions/rainbow-editor.ts +1 -1
  691. package/examples/extensions/rpc-demo.ts +1 -1
  692. package/examples/extensions/sandbox/index.ts +7 -7
  693. package/examples/extensions/sandbox/package-lock.json +2 -2
  694. package/examples/extensions/sandbox/package.json +1 -1
  695. package/examples/extensions/shutdown-command.ts +5 -5
  696. package/examples/extensions/ssh.ts +2 -2
  697. package/examples/extensions/subagent/README.md +3 -3
  698. package/examples/extensions/subagent/index.ts +2 -2
  699. package/examples/extensions/titlebar-spinner.ts +1 -1
  700. package/examples/extensions/tool-override.ts +1 -1
  701. package/examples/extensions/tools.ts +1 -1
  702. package/examples/extensions/with-deps/package-lock.json +2 -2
  703. package/examples/extensions/with-deps/package.json +1 -1
  704. package/examples/extensions/working-indicator.ts +1 -1
  705. package/examples/extensions/working-message-test.ts +1 -1
  706. package/examples/sdk/01-minimal.ts +1 -1
  707. package/examples/sdk/03-custom-prompt.ts +1 -1
  708. package/examples/sdk/04-skills.ts +1 -1
  709. package/examples/sdk/06-extensions.ts +2 -2
  710. package/examples/sdk/08-prompt-templates.ts +1 -1
  711. package/install-lock/package-lock.json +3841 -0
  712. package/install-lock/package.json +18 -0
  713. package/native/computer-use/LICENSE.md +21 -0
  714. package/npm-shrinkwrap.json +3858 -0
  715. package/package.json +15 -9
  716. package/dist/modes/interactive/components/exit-card.d.ts +0 -22
  717. package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
  718. package/dist/modes/interactive/components/exit-card.js +0 -69
  719. package/dist/modes/interactive/components/exit-card.js.map +0 -1
  720. package/dist/node-runtime/agent-session-services-YXXFCP5J.js +0 -49
  721. package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
  722. package/dist/node-runtime/chunk-4TLO4PO2.js +0 -3427
  723. package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
  724. package/dist/node-runtime/chunk-OVX6X377.js +0 -50
  725. package/dist/node-runtime/chunk-QTU6AKNJ.js +0 -773
  726. package/dist/node-runtime/chunk-TORR5XBV.js +0 -356
  727. package/dist/node-runtime/commands-QC6VUZJQ.js +0 -36
  728. package/dist/node-runtime/interactive-mode-Z5M7WYYZ.js +0 -72
  729. package/dist/node-runtime/mcp-auth-flow-QIXHW6QN.js +0 -32
@@ -4,7 +4,7 @@
4
4
  * Jobs persist at `<agentDir>/cron/jobs.json` (`{ jobs: [...], updated_at }`),
5
5
  * agentDir resolved via getAgentDir() (honors PI_CODING_AGENT_DIR, defaults
6
6
  * ~/.lunr/agent). Writes are atomic (tmp file in the same dir + rename) and
7
- * serialized through an in-process promise queue — single-process, no locks.
7
+ * serialized with a cross-process read-modify-write lock over fresh data.
8
8
  *
9
9
  * Per-run output goes to `<agentDir>/cron/output/<jobId>/<YYYY-MM-DD_HH-MM-SS>.md`
10
10
  * with a retention cap of the newest 50 files per job.
@@ -12,20 +12,19 @@
12
12
  * Tests inject a base dir via setCronBaseDir() so no real agent dir is touched.
13
13
  */
14
14
  import { randomUUID } from "node:crypto";
15
- import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
15
+ import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
16
16
  import { homedir } from "node:os";
17
- import { isAbsolute, join, normalize, resolve } from "node:path";
17
+ import { isAbsolute, join, normalize, relative, resolve, sep } from "node:path";
18
18
  import { Cron } from "croner";
19
+ import lockfile from "proper-lockfile";
19
20
  import { getAgentDir } from "../../config.js";
21
+ import { loadGatewayConfig } from "../../gateway/config.js";
20
22
  import { chatPlatformDeliverBlockedMessage, deliverMentionsChatPlatform, isFeatureEnabled, } from "../install-features.js";
21
23
  // ---------------------------------------------------------------------------
22
24
  // Constants
23
25
  // ---------------------------------------------------------------------------
24
26
  /** Flat recovery grace for one-shots: fire up to 120s late. */
25
27
  export const ONE_SHOT_GRACE_MS = 120_000;
26
- /** Recurring grace window clamps: at least 120s, at most 2h. */
27
- const MIN_GRACE_MS = 120_000;
28
- const MAX_GRACE_MS = 7_200_000;
29
28
  /** Per-job output retention. */
30
29
  export const OUTPUT_RETENTION = 50;
31
30
  /** Cap per upstream job output injected via contextFrom. */
@@ -35,15 +34,15 @@ const MAX_NAME_LEN = 50;
35
34
  // Paths + store state
36
35
  // ---------------------------------------------------------------------------
37
36
  let baseDirOverride;
38
- let cache;
37
+ let transactionJobs;
39
38
  let writeQueue = Promise.resolve();
40
39
  /**
41
40
  * Override the base dir (defaults to the agent dir) and reset the in-memory
42
- * cache + write queue. Passing undefined restores the default. For tests.
41
+ * transaction queue. Passing undefined restores the default. For tests.
43
42
  */
44
43
  export function setCronBaseDir(dir) {
45
44
  baseDirOverride = dir;
46
- cache = undefined;
45
+ transactionJobs = undefined;
47
46
  writeQueue = Promise.resolve();
48
47
  }
49
48
  function cronDir() {
@@ -56,33 +55,123 @@ function outputDir(jobId) {
56
55
  return join(cronDir(), "output", jobId);
57
56
  }
58
57
  function loadJobs() {
59
- if (cache)
60
- return cache;
58
+ if (transactionJobs)
59
+ return transactionJobs;
61
60
  const file = jobsFile();
62
- if (!existsSync(file)) {
63
- cache = [];
64
- return cache;
61
+ if (!existsSync(file))
62
+ return [];
63
+ const parsed = JSON.parse(readFileSync(file, "utf-8"));
64
+ if (!Array.isArray(parsed?.jobs))
65
+ throw new Error("invalid cron job store");
66
+ return parsed.jobs;
67
+ }
68
+ /** Each mutation reads the latest snapshot while holding the profile store lock. */
69
+ function mutateJobs(fn) {
70
+ const dir = cronDir();
71
+ const file = join(dir, "jobs.json");
72
+ const operation = writeQueue.then(async () => {
73
+ mkdirSync(dir, { recursive: true });
74
+ const release = await lockfile.lock(file, {
75
+ realpath: false,
76
+ retries: { retries: 100, minTimeout: 10, maxTimeout: 100 },
77
+ });
78
+ try {
79
+ transactionJobs = loadJobs();
80
+ const result = fn();
81
+ const tmp = join(dir, `.jobs.json.${randomUUID()}.tmp`);
82
+ try {
83
+ writeFileSync(tmp, JSON.stringify({ jobs: transactionJobs, updated_at: new Date().toISOString() }, null, 2));
84
+ renameSync(tmp, file);
85
+ }
86
+ finally {
87
+ rmSync(tmp, { force: true });
88
+ }
89
+ return structuredClone(result);
90
+ }
91
+ finally {
92
+ transactionJobs = undefined;
93
+ await release();
94
+ }
95
+ });
96
+ writeQueue = operation.then(() => undefined, () => undefined);
97
+ return operation;
98
+ }
99
+ /** Acquire the non-preemptive profile scheduler lease. A live PID is never displaced. */
100
+ export async function acquireSchedulerLease() {
101
+ const dir = cronDir();
102
+ mkdirSync(dir, { recursive: true });
103
+ const file = join(dir, "scheduler");
104
+ const ownerFile = `${file}.owner.json`;
105
+ const staleMs = 120_000;
106
+ if (existsSync(`${file}.lock`)) {
107
+ let owner;
108
+ try {
109
+ owner = JSON.parse(readFileSync(ownerFile, "utf-8"));
110
+ if (!owner ||
111
+ typeof owner !== "object" ||
112
+ !("pid" in owner) ||
113
+ typeof owner.pid !== "number" ||
114
+ !Number.isInteger(owner.pid) ||
115
+ owner.pid <= 0 ||
116
+ owner.pid > 2_147_483_647)
117
+ throw new Error("invalid scheduler owner PID");
118
+ }
119
+ catch (error) {
120
+ // A competing operator may still be publishing its owner record. Missing
121
+ // or malformed metadata never proves that an existing owner is dead.
122
+ if (!existsSync(`${file}.lock`))
123
+ return acquireSchedulerLease();
124
+ if (error.code === "ENOENT") {
125
+ try {
126
+ if (Date.now() - statSync(`${file}.lock`).mtimeMs < staleMs)
127
+ return null;
128
+ }
129
+ catch (lockError) {
130
+ if (lockError.code === "ENOENT")
131
+ return acquireSchedulerLease();
132
+ }
133
+ }
134
+ throw new Error(`Cron scheduler ownership cannot be verified. Before repairing it, confirm every operator using this profile has stopped. ` +
135
+ `Then remove ${file}.lock and ${ownerFile}, and restart scheduling. Never remove them while an operator may be running.`, { cause: error });
136
+ }
137
+ try {
138
+ process.kill(owner.pid, 0);
139
+ return null;
140
+ }
141
+ catch (error) {
142
+ if (error.code !== "ESRCH")
143
+ return null;
144
+ }
65
145
  }
146
+ let release;
66
147
  try {
67
- const parsed = JSON.parse(readFileSync(file, "utf-8"));
68
- cache = Array.isArray(parsed?.jobs) ? parsed.jobs : [];
148
+ release = await lockfile.lock(file, { realpath: false, stale: staleMs });
69
149
  }
70
- catch {
71
- cache = [];
150
+ catch (error) {
151
+ if (error.code === "ELOCKED")
152
+ return null;
153
+ throw error;
72
154
  }
73
- return cache;
74
- }
75
- /** Queue an atomic write of the in-memory store. Rejects only for the caller; the chain self-heals. */
76
- function persist() {
77
- const snapshot = JSON.stringify({ jobs: cache ?? [], updated_at: new Date().toISOString() }, null, 2);
78
- const p = writeQueue.then(() => {
79
- mkdirSync(cronDir(), { recursive: true });
80
- const tmp = join(cronDir(), `.jobs.json.${process.pid}.${Date.now()}.tmp`);
81
- writeFileSync(tmp, snapshot, "utf-8");
82
- renameSync(tmp, jobsFile());
83
- });
84
- writeQueue = p.then(() => undefined, () => undefined);
85
- return p;
155
+ const ownerTmp = join(dir, `.scheduler.owner.json.${randomUUID()}.tmp`);
156
+ try {
157
+ writeFileSync(ownerTmp, JSON.stringify({ pid: process.pid }));
158
+ renameSync(ownerTmp, ownerFile);
159
+ }
160
+ catch (error) {
161
+ await release();
162
+ throw error;
163
+ }
164
+ finally {
165
+ rmSync(ownerTmp, { force: true });
166
+ }
167
+ return async () => {
168
+ try {
169
+ rmSync(ownerFile, { force: true });
170
+ }
171
+ finally {
172
+ await release();
173
+ }
174
+ };
86
175
  }
87
176
  const INTERVAL_RE = /^every\s+(\d+)\s*([mhd])$/i;
88
177
  const DURATION_RE = /^(\d+)\s*([mhd])$/i;
@@ -166,22 +255,6 @@ export function computeNextRun(job, now = new Date()) {
166
255
  const cron = new Cron(s.expr);
167
256
  return cron.nextRun(job.lastRunAt ? new Date(job.lastRunAt) : now);
168
257
  }
169
- /** Approximate schedule period in ms (recurring jobs only) for grace-window sizing. */
170
- function periodMs(job, now) {
171
- if (job.schedule.kind === "interval")
172
- return (job.schedule.minutes ?? 0) * 60_000;
173
- if (job.schedule.kind === "cron") {
174
- const cron = new Cron(job.schedule.expr);
175
- const a = cron.nextRun(now);
176
- if (!a)
177
- return MAX_GRACE_MS;
178
- const b = cron.nextRun(a);
179
- if (!b)
180
- return MAX_GRACE_MS;
181
- return Math.max(b.getTime() - a.getTime(), 1);
182
- }
183
- return 0;
184
- }
185
258
  /** Next slot strictly after `after` for a recurring job. */
186
259
  function nextSlotAfter(job, after) {
187
260
  if (job.schedule.kind === "interval") {
@@ -226,16 +299,25 @@ export function resetCronValidators() {
226
299
  deliverValidator = undefined;
227
300
  }
228
301
  function isPathUnderRoot(absPath, root) {
229
- const normRoot = normalize(root).replace(/\\$/g, "");
230
- const normPath = normalize(absPath).replace(/\\$/g, "");
231
- return normPath === normRoot || normPath.startsWith(`${normRoot}/`) || normPath.startsWith(`${normRoot}\\`);
232
- }
233
- function validateWorkdir(workdir) {
234
- const candidate = resolve(workdir);
235
- if (isAbsolute(workdir) && !workdirRoots.some((root) => isPathUnderRoot(candidate, root))) {
302
+ const rel = relative(root, absPath);
303
+ return rel === "" || (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel));
304
+ }
305
+ function validateWorkdir(workdir, origin) {
306
+ const candidate = origin ? realpathSync(resolve(workdir)) : resolve(workdir);
307
+ const roots = origin
308
+ ? (loadGatewayConfig().projectRoots ?? []).flatMap((root) => {
309
+ try {
310
+ return [realpathSync(root)];
311
+ }
312
+ catch {
313
+ return [];
314
+ }
315
+ })
316
+ : workdirRoots;
317
+ if (isAbsolute(workdir) && !roots.some((root) => isPathUnderRoot(candidate, root))) {
236
318
  return `workdir ${workdir} is outside allowed roots`;
237
319
  }
238
- if (!workdirRoots.some((root) => isPathUnderRoot(candidate, root))) {
320
+ if (!roots.some((root) => isPathUnderRoot(candidate, root))) {
239
321
  return `workdir ${workdir} resolves outside allowed roots`;
240
322
  }
241
323
  return undefined;
@@ -251,50 +333,51 @@ function deriveName(prompt) {
251
333
  return (first || "cron job").slice(0, MAX_NAME_LEN);
252
334
  }
253
335
  export async function createJob(input) {
254
- const prompt = input.prompt.trim();
255
- if (!prompt)
256
- throw new Error("createJob: prompt is empty");
257
- if (input.workdir) {
258
- const err = validateWorkdir(input.workdir);
259
- if (err)
260
- throw new Error(`createJob: ${err}`);
261
- }
262
- if (input.deliver) {
263
- const err = runDeliverValidation(input.deliver, input.origin);
264
- if (err)
265
- throw new Error(`createJob: ${err}`);
266
- }
267
- const now = new Date();
268
- const parsed = parseSchedule(input.schedule, now);
269
- const isOneShot = parsed.schedule.kind === "once";
270
- const times = isOneShot ? 1 : (input.times ?? null);
271
- if (times !== null && (!Number.isInteger(times) || times < 1)) {
272
- throw new Error(`createJob: times must be a positive integer or null, got ${times}`);
273
- }
274
- const job = {
275
- id: randomUUID().replaceAll("-", "").slice(0, 12),
276
- name: (input.name?.trim() || deriveName(prompt)).slice(0, MAX_NAME_LEN),
277
- prompt,
278
- schedule: parsed.schedule,
279
- scheduleDisplay: parsed.scheduleDisplay,
280
- repeat: { times, completed: 0 },
281
- enabled: true,
282
- state: "scheduled",
283
- createdAt: now.toISOString(),
284
- nextRunAt: null,
285
- lastRunAt: null,
286
- lastStatus: null,
287
- lastError: null,
288
- lastDeliveryError: null,
289
- deliver: input.deliver?.trim() || "local",
290
- origin: input.origin ?? null,
291
- contextFrom: input.contextFrom,
292
- workdir: input.workdir,
293
- };
294
- job.nextRunAt = computeNextRun(job, now)?.toISOString() ?? null;
295
- loadJobs().push(job);
296
- await persist();
297
- return job;
336
+ return mutateJobs(() => {
337
+ const prompt = input.prompt.trim();
338
+ if (!prompt)
339
+ throw new Error("createJob: prompt is empty");
340
+ if (input.workdir) {
341
+ const err = validateWorkdir(input.workdir, input.origin);
342
+ if (err)
343
+ throw new Error(`createJob: ${err}`);
344
+ }
345
+ if (input.deliver) {
346
+ const err = runDeliverValidation(input.deliver, input.origin);
347
+ if (err)
348
+ throw new Error(`createJob: ${err}`);
349
+ }
350
+ const now = new Date();
351
+ const parsed = parseSchedule(input.schedule, now);
352
+ const isOneShot = parsed.schedule.kind === "once";
353
+ const times = isOneShot ? 1 : (input.times ?? null);
354
+ if (times !== null && (!Number.isInteger(times) || times < 1)) {
355
+ throw new Error(`createJob: times must be a positive integer or null, got ${times}`);
356
+ }
357
+ const job = {
358
+ id: randomUUID().replaceAll("-", "").slice(0, 12),
359
+ name: (input.name?.trim() || deriveName(prompt)).slice(0, MAX_NAME_LEN),
360
+ prompt,
361
+ schedule: parsed.schedule,
362
+ scheduleDisplay: parsed.scheduleDisplay,
363
+ repeat: { times, completed: 0 },
364
+ enabled: true,
365
+ state: "scheduled",
366
+ createdAt: now.toISOString(),
367
+ nextRunAt: null,
368
+ lastRunAt: null,
369
+ lastStatus: null,
370
+ lastError: null,
371
+ lastDeliveryError: null,
372
+ deliver: input.deliver?.trim() || "local",
373
+ origin: input.origin ?? null,
374
+ contextFrom: input.contextFrom,
375
+ workdir: input.workdir,
376
+ };
377
+ job.nextRunAt = computeNextRun(job, now)?.toISOString() ?? null;
378
+ loadJobs().push(job);
379
+ return job;
380
+ });
298
381
  }
299
382
  /** Look up a job by id, then by unique name. Throws when not found or when the name is ambiguous. */
300
383
  export function getJob(idOrName) {
@@ -314,79 +397,85 @@ export function listJobs() {
314
397
  return [...loadJobs()];
315
398
  }
316
399
  export async function updateJob(idOrName, patch) {
317
- const job = getJob(idOrName);
318
- if (patch.name !== undefined)
319
- job.name = patch.name.trim().slice(0, MAX_NAME_LEN) || job.name;
320
- if (patch.workdir !== undefined) {
321
- if (patch.workdir) {
322
- const err = validateWorkdir(patch.workdir);
400
+ return mutateJobs(() => {
401
+ const job = getJob(idOrName);
402
+ if (patch.name !== undefined)
403
+ job.name = patch.name.trim().slice(0, MAX_NAME_LEN) || job.name;
404
+ if (patch.workdir !== undefined) {
405
+ if (patch.workdir) {
406
+ const err = validateWorkdir(patch.workdir, patch.origin ?? job.origin);
407
+ if (err)
408
+ throw new Error(`updateJob: ${err}`);
409
+ }
410
+ job.workdir = patch.workdir;
411
+ }
412
+ if (patch.deliver !== undefined) {
413
+ const err = runDeliverValidation(patch.deliver, patch.origin ?? job.origin);
323
414
  if (err)
324
415
  throw new Error(`updateJob: ${err}`);
416
+ job.deliver = patch.deliver.trim() || "local";
325
417
  }
326
- job.workdir = patch.workdir;
327
- }
328
- if (patch.deliver !== undefined) {
329
- const err = runDeliverValidation(patch.deliver, patch.origin ?? job.origin);
330
- if (err)
331
- throw new Error(`updateJob: ${err}`);
332
- job.deliver = patch.deliver.trim() || "local";
333
- }
334
- if (patch.prompt !== undefined) {
335
- const prompt = patch.prompt.trim();
336
- if (!prompt)
337
- throw new Error("updateJob: prompt is empty");
338
- job.prompt = prompt;
339
- }
340
- if (patch.schedule !== undefined) {
341
- const parsed = parseSchedule(patch.schedule);
342
- job.schedule = parsed.schedule;
343
- job.scheduleDisplay = parsed.scheduleDisplay;
344
- if (parsed.schedule.kind === "once")
345
- job.repeat.times = 1;
346
- job.nextRunAt = computeNextRun(job)?.toISOString() ?? null;
347
- }
348
- if (patch.enabled !== undefined)
349
- job.enabled = patch.enabled;
350
- if (patch.times !== undefined) {
351
- if (patch.times !== null && (!Number.isInteger(patch.times) || patch.times < 1)) {
352
- throw new Error(`updateJob: times must be a positive integer or null, got ${patch.times}`);
418
+ if (patch.prompt !== undefined) {
419
+ const prompt = patch.prompt.trim();
420
+ if (!prompt)
421
+ throw new Error("updateJob: prompt is empty");
422
+ job.prompt = prompt;
353
423
  }
354
- if (job.schedule.kind !== "once")
355
- job.repeat.times = patch.times;
356
- }
357
- if (patch.contextFrom !== undefined)
358
- job.contextFrom = patch.contextFrom;
359
- if (patch.origin !== undefined)
360
- job.origin = patch.origin;
361
- if (patch.nextRunAt !== undefined)
362
- job.nextRunAt = patch.nextRunAt;
363
- if (patch.lastDeliveryError !== undefined)
364
- job.lastDeliveryError = patch.lastDeliveryError;
365
- await persist();
366
- return job;
424
+ if (patch.schedule !== undefined) {
425
+ const parsed = parseSchedule(patch.schedule);
426
+ job.schedule = parsed.schedule;
427
+ job.scheduleDisplay = parsed.scheduleDisplay;
428
+ if (parsed.schedule.kind === "once")
429
+ job.repeat.times = 1;
430
+ job.nextRunAt = computeNextRun(job)?.toISOString() ?? null;
431
+ }
432
+ if (patch.enabled !== undefined)
433
+ job.enabled = patch.enabled;
434
+ if (patch.times !== undefined) {
435
+ if (patch.times !== null && (!Number.isInteger(patch.times) || patch.times < 1)) {
436
+ throw new Error(`updateJob: times must be a positive integer or null, got ${patch.times}`);
437
+ }
438
+ if (job.schedule.kind !== "once")
439
+ job.repeat.times = patch.times;
440
+ }
441
+ if (patch.contextFrom !== undefined)
442
+ job.contextFrom = patch.contextFrom;
443
+ if (patch.origin !== undefined)
444
+ job.origin = patch.origin;
445
+ if (patch.nextRunAt !== undefined)
446
+ job.nextRunAt = patch.nextRunAt;
447
+ if (patch.lastDeliveryError !== undefined)
448
+ job.lastDeliveryError = patch.lastDeliveryError;
449
+ return job;
450
+ });
367
451
  }
368
452
  export async function pauseJob(idOrName) {
369
- const job = getJob(idOrName);
370
- if (job.state !== "completed")
371
- job.state = "paused";
372
- await persist();
373
- return job;
453
+ return mutateJobs(() => {
454
+ const job = getJob(idOrName);
455
+ if (job.state !== "completed")
456
+ job.state = "paused";
457
+ return job;
458
+ });
374
459
  }
375
460
  export async function resumeJob(idOrName) {
376
- const job = getJob(idOrName);
377
- if (job.state === "paused") {
378
- job.state = "scheduled";
379
- job.nextRunAt = computeNextRun(job)?.toISOString() ?? null;
380
- }
381
- await persist();
382
- return job;
461
+ return mutateJobs(() => {
462
+ const job = getJob(idOrName);
463
+ if (job.interrupted)
464
+ throw new Error("interrupted run has unknown effects; inspect them and use cron run for a deliberate retry");
465
+ if (job.state === "paused") {
466
+ job.state = "scheduled";
467
+ job.nextRunAt = computeNextRun(job)?.toISOString() ?? null;
468
+ }
469
+ return job;
470
+ });
383
471
  }
384
472
  export async function removeJob(idOrName) {
385
- const job = getJob(idOrName);
386
- const jobs = loadJobs();
387
- jobs.splice(jobs.indexOf(job), 1);
388
- await persist();
389
- return job;
473
+ return mutateJobs(() => {
474
+ const job = getJob(idOrName);
475
+ const jobs = loadJobs();
476
+ jobs.splice(jobs.indexOf(job), 1);
477
+ return job;
478
+ });
390
479
  }
391
480
  // ---------------------------------------------------------------------------
392
481
  // Scheduling
@@ -394,58 +483,51 @@ export async function removeJob(idOrName) {
394
483
  /**
395
484
  * Jobs due to fire now. Skips disabled/paused/completed jobs and jobs without a
396
485
  * nextRunAt. One-shots fire up to 120s late (flat recovery grace); beyond that
397
- * they are marked state "error" and skipped. Recurring jobs whose nextRunAt is
398
- * older than the grace window — min(max(period/2, 120s), 2h) — are fast-forwarded
399
- * to their next future slot but still fire ONCE now (collapse backlog, no burst).
486
+ * they are marked state "error" and skipped. Recurring backlog fires once;
487
+ * claiming the occurrence advances it to the next future slot without a burst.
400
488
  */
401
489
  export async function getDueJobs(now = new Date()) {
402
- const due = [];
403
- let changed = false;
404
- for (const job of loadJobs()) {
405
- if (!job.enabled || job.state === "paused" || job.state === "completed")
406
- continue;
407
- if (!job.nextRunAt)
408
- continue;
409
- const next = new Date(job.nextRunAt).getTime();
410
- if (Number.isNaN(next) || now.getTime() < next)
411
- continue;
412
- if (job.schedule.kind === "once") {
413
- if (now.getTime() - next <= ONE_SHOT_GRACE_MS) {
414
- due.push(job);
415
- }
416
- else {
417
- job.state = "error";
418
- job.lastStatus = "error";
419
- job.lastError = "missed one-shot schedule beyond the 120s recovery grace";
420
- job.nextRunAt = null;
421
- changed = true;
490
+ return mutateJobs(() => {
491
+ const due = [];
492
+ for (const job of loadJobs()) {
493
+ if (!job.enabled || job.state !== "scheduled" || job.activeRun)
494
+ continue;
495
+ if (!job.nextRunAt)
496
+ continue;
497
+ const next = new Date(job.nextRunAt).getTime();
498
+ if (Number.isNaN(next) || now.getTime() < next)
499
+ continue;
500
+ if (job.schedule.kind === "once") {
501
+ if (now.getTime() - next <= ONE_SHOT_GRACE_MS) {
502
+ due.push(job);
503
+ }
504
+ else {
505
+ job.state = "error";
506
+ job.lastStatus = "error";
507
+ job.lastError = "missed one-shot schedule beyond the 120s recovery grace";
508
+ job.nextRunAt = null;
509
+ }
510
+ continue;
422
511
  }
423
- continue;
512
+ due.push(job);
424
513
  }
425
- const grace = Math.min(Math.max(periodMs(job, now) / 2, MIN_GRACE_MS), MAX_GRACE_MS);
426
- if (now.getTime() - next > grace) {
427
- job.nextRunAt = nextSlotAfter(job, now)?.toISOString() ?? null;
428
- changed = true;
429
- }
430
- due.push(job);
431
- }
432
- if (changed)
433
- await persist();
434
- return due;
514
+ return due;
515
+ });
435
516
  }
436
517
  /**
437
- * Advance a recurring job to its next slot. Called by the scheduler BEFORE
438
- * execution so a crash mid-run loses at most that run (at-most-once).
518
+ * Advance a recurring job to its next slot. Scheduler dispatch uses claimJobRun
519
+ * instead so one-shots and recurring work both retain a durable claim.
439
520
  */
440
521
  export async function advanceNextRun(jobId) {
441
- const job = getJob(jobId);
442
- if (job.schedule.kind !== "once") {
443
- // Advance to the first slot strictly after NOW: the job fires once for the
444
- // current slot, and the next fire is the next future slot (no catch-up burst).
445
- job.nextRunAt = nextSlotAfter(job, new Date())?.toISOString() ?? computeNextRun(job)?.toISOString() ?? null;
446
- await persist();
447
- }
448
- return job;
522
+ return mutateJobs(() => {
523
+ const job = getJob(jobId);
524
+ if (job.schedule.kind !== "once") {
525
+ // Advance to the first slot strictly after NOW: the job fires once for the
526
+ // current slot, and the next fire is the next future slot (no catch-up burst).
527
+ job.nextRunAt = nextSlotAfter(job, new Date())?.toISOString() ?? computeNextRun(job)?.toISOString() ?? null;
528
+ }
529
+ return job;
530
+ });
449
531
  }
450
532
  /**
451
533
  * Record a finished run: lastRunAt/lastStatus/lastError, repeat.completed++,
@@ -453,34 +535,77 @@ export async function advanceNextRun(jobId) {
453
535
  * or re-anchor nextRunAt off the previous scheduled slot (no drift).
454
536
  */
455
537
  export async function markJobRun(jobId, result) {
456
- const job = getJob(jobId);
457
- const now = new Date();
458
- job.lastRunAt = now.toISOString();
459
- job.lastStatus = result.status;
460
- job.lastError = result.error ?? null;
461
- job.repeat.completed += 1;
462
- if (job.repeat.times !== null && job.repeat.completed >= job.repeat.times) {
463
- job.state = "completed";
464
- job.nextRunAt = null;
465
- }
466
- else if (job.schedule.kind === "interval") {
467
- // Anchor to the previous scheduled slot + period to avoid cumulative drift.
468
- // If advanceNextRun already moved nextRunAt into the future (scheduler path),
469
- // keep it; otherwise (manual run) step forward from now.
470
- const current = job.nextRunAt ? new Date(job.nextRunAt) : now;
471
- if (current.getTime() > now.getTime()) {
472
- // Already advanced by the scheduler — keep the scheduled slot.
473
- job.nextRunAt = current.toISOString();
538
+ return mutateJobs(() => {
539
+ const job = loadJobs().find((job) => job.id === jobId);
540
+ if (!job || (result.runId && job.activeRun?.id !== result.runId))
541
+ return null;
542
+ delete job.activeRun;
543
+ delete job.interrupted;
544
+ const now = new Date();
545
+ job.lastRunAt = now.toISOString();
546
+ job.lastStatus = result.status;
547
+ job.lastError = result.error ?? null;
548
+ job.repeat.completed += 1;
549
+ if (job.repeat.times !== null && job.repeat.completed >= job.repeat.times) {
550
+ job.state = "completed";
551
+ job.nextRunAt = null;
474
552
  }
475
- else {
476
- job.nextRunAt = nextSlotAfter(job, now)?.toISOString() ?? null;
553
+ else if (!result.runId && job.schedule.kind === "interval") {
554
+ // Anchor to the previous scheduled slot + period to avoid cumulative drift.
555
+ // If advanceNextRun already moved nextRunAt into the future (scheduler path),
556
+ // keep it; otherwise (manual run) step forward from now.
557
+ const current = job.nextRunAt ? new Date(job.nextRunAt) : now;
558
+ if (current.getTime() > now.getTime()) {
559
+ // Already advanced by the scheduler — keep the scheduled slot.
560
+ job.nextRunAt = current.toISOString();
561
+ }
562
+ else {
563
+ job.nextRunAt = nextSlotAfter(job, now)?.toISOString() ?? null;
564
+ }
477
565
  }
478
- }
479
- else if (job.schedule.kind === "cron") {
480
- job.nextRunAt = new Cron(job.schedule.expr).nextRun(now)?.toISOString() ?? null;
481
- }
482
- await persist();
483
- return job;
566
+ else if (!result.runId && job.schedule.kind === "cron") {
567
+ job.nextRunAt = new Cron(job.schedule.expr).nextRun(now)?.toISOString() ?? null;
568
+ }
569
+ return job;
570
+ });
571
+ }
572
+ /** Claim only a still-due, enabled occurrence from the fresh store. */
573
+ export async function claimJobRun(jobId, now, manual = false) {
574
+ return mutateJobs(() => {
575
+ const job = loadJobs().find((job) => job.id === jobId);
576
+ if (!job || job.activeRun)
577
+ return null;
578
+ if (!manual && (!job.enabled || job.state !== "scheduled" || !job.nextRunAt || new Date(job.nextRunAt) > now))
579
+ return null;
580
+ job.activeRun = { id: randomUUID(), scheduledAt: job.nextRunAt, startedAt: now.toISOString() };
581
+ job.nextRunAt = job.schedule.kind === "once" ? null : (nextSlotAfter(job, now)?.toISOString() ?? null);
582
+ job.activeRun.advancedTo = job.nextRunAt;
583
+ return job;
584
+ });
585
+ }
586
+ /** Recover uncertain interrupted work without replaying its external effects. */
587
+ export async function recoverInterruptedRuns() {
588
+ await mutateJobs(() => {
589
+ for (const job of loadJobs()) {
590
+ if (!job.activeRun)
591
+ continue;
592
+ job.state = "paused";
593
+ job.lastStatus = "error";
594
+ job.lastError = "interrupted run has unknown effects; use cron run to retry deliberately";
595
+ job.interrupted = true;
596
+ delete job.activeRun;
597
+ }
598
+ });
599
+ }
600
+ export async function deferJobRun(jobId, runId) {
601
+ await mutateJobs(() => {
602
+ const job = loadJobs().find((job) => job.id === jobId);
603
+ if (job?.activeRun?.id !== runId)
604
+ return;
605
+ if (job.nextRunAt === job.activeRun.advancedTo)
606
+ job.nextRunAt = job.activeRun.scheduledAt;
607
+ delete job.activeRun;
608
+ });
484
609
  }
485
610
  // ---------------------------------------------------------------------------
486
611
  // Per-run output