@ashx-j/lunr 0.1.0 → 0.1.2

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 (869) hide show
  1. package/dist/builtin-extensions/ashxj-spinners.d.ts +1 -1
  2. package/dist/builtin-extensions/ashxj-spinners.d.ts.map +1 -1
  3. package/dist/builtin-extensions/ashxj-spinners.js.map +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts +5 -5
  5. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js +3 -3
  7. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts +2 -2
  9. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  10. package/dist/builtin-extensions/ashxj-tui.js +2 -2
  11. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  12. package/dist/builtin-extensions/lunr-cron.d.ts +1 -1
  13. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  14. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-local-providers/index.d.ts +1 -1
  16. package/dist/builtin-extensions/lunr-local-providers/index.d.ts.map +1 -1
  17. package/dist/builtin-extensions/lunr-local-providers/index.js.map +1 -1
  18. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts +1 -1
  19. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  20. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  21. package/dist/builtin-extensions/lunr-plan-tools.d.ts +1 -1
  22. package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
  23. package/dist/builtin-extensions/lunr-plan-tools.js +1 -1
  24. package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
  25. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts +1 -1
  26. package/dist/builtin-extensions/lunr-skill-creator/index.d.ts.map +1 -1
  27. package/dist/builtin-extensions/lunr-skill-creator/index.js.map +1 -1
  28. package/dist/builtin-extensions/lunr-todos.d.ts +1 -1
  29. package/dist/builtin-extensions/lunr-todos.d.ts.map +1 -1
  30. package/dist/builtin-extensions/lunr-todos.js +1 -1
  31. package/dist/builtin-extensions/lunr-todos.js.map +1 -1
  32. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.d.ts.map +1 -1
  33. package/dist/builtin-extensions/narumiruna-pi-goal/src/accounting.js.map +1 -1
  34. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts +1 -1
  35. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  36. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  37. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts +2 -2
  38. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  39. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  40. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  41. package/dist/builtin-extensions/pi-intercom/index.d.ts +1 -1
  42. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  44. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  45. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts +2 -2
  46. package/dist/builtin-extensions/pi-intercom/ui/compose.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-intercom/ui/compose.js +1 -1
  48. package/dist/builtin-extensions/pi-intercom/ui/compose.js.map +1 -1
  49. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts +2 -2
  50. package/dist/builtin-extensions/pi-intercom/ui/inline-message.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js +1 -1
  52. package/dist/builtin-extensions/pi-intercom/ui/inline-message.js.map +1 -1
  53. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts +2 -2
  54. package/dist/builtin-extensions/pi-intercom/ui/session-list.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-intercom/ui/session-list.js +1 -1
  56. package/dist/builtin-extensions/pi-intercom/ui/session-list.js.map +1 -1
  57. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  58. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  60. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts +1 -1
  61. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -1
  63. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  64. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts +1 -1
  65. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js +1 -1
  67. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-actions.js.map +1 -1
  68. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts +1 -1
  69. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.d.ts.map +1 -1
  70. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js +1 -1
  71. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-overview.js.map +1 -1
  72. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +1 -1
  73. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  74. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  75. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts +1 -1
  76. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.d.ts.map +1 -1
  77. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-search.js.map +1 -1
  78. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts +1 -1
  79. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.d.ts.map +1 -1
  80. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js +1 -1
  81. package/dist/builtin-extensions/pi-lsp-extension/src/tools/completions.js.map +1 -1
  82. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts +1 -1
  83. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.d.ts.map +1 -1
  84. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js +1 -1
  85. package/dist/builtin-extensions/pi-lsp-extension/src/tools/definition.js.map +1 -1
  86. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts +1 -1
  87. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.d.ts.map +1 -1
  88. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js +1 -1
  89. package/dist/builtin-extensions/pi-lsp-extension/src/tools/diagnostics.js.map +1 -1
  90. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts +1 -1
  91. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.d.ts.map +1 -1
  92. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js +1 -1
  93. package/dist/builtin-extensions/pi-lsp-extension/src/tools/hover.js.map +1 -1
  94. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts +1 -1
  95. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.d.ts.map +1 -1
  96. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js +1 -1
  97. package/dist/builtin-extensions/pi-lsp-extension/src/tools/references.js.map +1 -1
  98. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts +1 -1
  99. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js +1 -1
  101. package/dist/builtin-extensions/pi-lsp-extension/src/tools/rename.js.map +1 -1
  102. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts +1 -1
  103. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js +1 -1
  105. package/dist/builtin-extensions/pi-lsp-extension/src/tools/symbols.js.map +1 -1
  106. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +1 -1
  107. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  108. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  109. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts +1 -1
  110. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
  112. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts +1 -1
  113. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-mcp-adapter/elicitation-handler.js.map +1 -1
  115. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts +1 -1
  116. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  117. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  118. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts +1 -1
  119. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  120. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  121. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.d.ts.map +1 -1
  122. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js +1 -1
  123. package/dist/builtin-extensions/pi-mcp-adapter/mcp-panel.js.map +1 -1
  124. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.d.ts.map +1 -1
  125. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js +1 -1
  126. package/dist/builtin-extensions/pi-mcp-adapter/mcp-setup-panel.js.map +1 -1
  127. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.d.ts.map +1 -1
  128. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js +1 -1
  129. package/dist/builtin-extensions/pi-mcp-adapter/panel-keys.js.map +1 -1
  130. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts +1 -1
  131. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  132. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  133. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts +2 -2
  134. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.d.ts.map +1 -1
  135. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js +1 -1
  136. package/dist/builtin-extensions/pi-mcp-adapter/sampling-handler.js.map +1 -1
  137. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +1 -1
  138. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  139. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  140. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts +2 -2
  141. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.d.ts.map +1 -1
  142. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js +1 -1
  143. package/dist/builtin-extensions/pi-mcp-adapter/tool-result-renderer.js.map +1 -1
  144. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts +1 -1
  145. package/dist/builtin-extensions/pi-mcp-adapter/types.d.ts.map +1 -1
  146. package/dist/builtin-extensions/pi-mcp-adapter/types.js.map +1 -1
  147. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts +1 -1
  148. package/dist/builtin-extensions/pi-mcp-adapter/utils.d.ts.map +1 -1
  149. package/dist/builtin-extensions/pi-mcp-adapter/utils.js.map +1 -1
  150. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  151. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  152. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  153. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +1 -1
  154. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts +1 -1
  156. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.d.ts.map +1 -1
  157. package/dist/builtin-extensions/pi-ollama-cloud/models.generated.js.map +1 -1
  158. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  159. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts +1 -1
  160. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.d.ts.map +1 -1
  161. package/dist/builtin-extensions/pi-ollama-cloud/thinking-levels.js.map +1 -1
  162. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts +2 -2
  163. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.d.ts.map +1 -1
  164. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js +1 -1
  165. package/dist/builtin-extensions/pi-prompt-template-model/deterministic-renderer.js.map +1 -1
  166. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts +1 -1
  167. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  168. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  169. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts +1 -1
  170. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.d.ts.map +1 -1
  171. package/dist/builtin-extensions/pi-prompt-template-model/loop-utils.js.map +1 -1
  172. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts +1 -1
  173. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.d.ts.map +1 -1
  174. package/dist/builtin-extensions/pi-prompt-template-model/model-selection.js.map +1 -1
  175. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts +1 -1
  176. package/dist/builtin-extensions/pi-prompt-template-model/notifications.d.ts.map +1 -1
  177. package/dist/builtin-extensions/pi-prompt-template-model/notifications.js.map +1 -1
  178. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts +1 -1
  179. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.d.ts.map +1 -1
  180. package/dist/builtin-extensions/pi-prompt-template-model/prompt-execution.js.map +1 -1
  181. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +1 -1
  182. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  183. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +1 -1
  184. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  185. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts +2 -2
  186. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js +1 -1
  188. package/dist/builtin-extensions/pi-prompt-template-model/skill-loaded-renderer.js.map +1 -1
  189. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts +2 -2
  190. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js +1 -1
  192. package/dist/builtin-extensions/pi-prompt-template-model/subagent-renderer.js.map +1 -1
  193. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts +3 -3
  194. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.d.ts.map +1 -1
  195. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js +1 -1
  196. package/dist/builtin-extensions/pi-prompt-template-model/subagent-step.js.map +1 -1
  197. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts +2 -2
  198. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.d.ts.map +1 -1
  199. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js +1 -1
  200. package/dist/builtin-extensions/pi-prompt-template-model/subagent-widget.js.map +1 -1
  201. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts +1 -1
  202. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  203. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +1 -1
  204. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  205. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts +2 -2
  206. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.d.ts.map +1 -1
  207. package/dist/builtin-extensions/pi-subagents/src/agents/agent-management.js.map +1 -1
  208. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts +1 -1
  209. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.d.ts.map +1 -1
  210. package/dist/builtin-extensions/pi-subagents/src/extension/control-notices.js.map +1 -1
  211. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts +1 -1
  212. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.d.ts.map +1 -1
  213. package/dist/builtin-extensions/pi-subagents/src/extension/fanout-child.js.map +1 -1
  214. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +1 -1
  215. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  216. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +2 -2
  217. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  218. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts +2 -2
  219. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.d.ts.map +1 -1
  220. package/dist/builtin-extensions/pi-subagents/src/extension/rpc.js.map +1 -1
  221. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts +1 -1
  222. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.d.ts.map +1 -1
  223. package/dist/builtin-extensions/pi-subagents/src/extension/steering-notices.js.map +1 -1
  224. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts +1 -1
  225. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
  226. package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
  227. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts +1 -1
  228. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.d.ts.map +1 -1
  229. package/dist/builtin-extensions/pi-subagents/src/profiles/profiles.js.map +1 -1
  230. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +1 -1
  231. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  232. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  233. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts +1 -1
  234. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.d.ts.map +1 -1
  235. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-job-tracker.js.map +1 -1
  236. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts +1 -1
  237. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.d.ts.map +1 -1
  238. package/dist/builtin-extensions/pi-subagents/src/runs/background/auto-drain.js.map +1 -1
  239. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts +1 -1
  240. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  241. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  242. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  243. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  244. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  245. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts +1 -1
  246. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  247. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  248. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts +2 -2
  249. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.d.ts.map +1 -1
  250. package/dist/builtin-extensions/pi-subagents/src/runs/background/scheduled-runs.js.map +1 -1
  251. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  252. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  253. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts +1 -1
  254. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.d.ts.map +1 -1
  255. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-wait.js.map +1 -1
  256. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts +1 -1
  257. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.d.ts.map +1 -1
  258. package/dist/builtin-extensions/pi-subagents/src/runs/background/wait-tool.js.map +1 -1
  259. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts +1 -1
  260. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.d.ts.map +1 -1
  261. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/async-steering-action.js.map +1 -1
  262. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts +2 -2
  263. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.d.ts.map +1 -1
  264. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js +1 -1
  265. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-clarify.js.map +1 -1
  266. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +2 -2
  267. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  268. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  269. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  270. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  271. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +2 -2
  272. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  273. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  274. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts +1 -1
  275. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.d.ts.map +1 -1
  276. package/dist/builtin-extensions/pi-subagents/src/runs/shared/completion-guard.js.map +1 -1
  277. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts +1 -1
  278. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.d.ts.map +1 -1
  279. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js +1 -1
  280. package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-spawn.js.map +1 -1
  281. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts +1 -1
  282. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.d.ts.map +1 -1
  283. package/dist/builtin-extensions/pi-subagents/src/runs/shared/single-output.js.map +1 -1
  284. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts +1 -1
  285. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
  286. package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
  287. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts +1 -1
  288. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.d.ts.map +1 -1
  289. package/dist/builtin-extensions/pi-subagents/src/shared/child-transcript.js.map +1 -1
  290. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.d.ts.map +1 -1
  291. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js +1 -1
  292. package/dist/builtin-extensions/pi-subagents/src/shared/fork-context.js.map +1 -1
  293. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +3 -3
  294. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  295. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  296. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  297. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  298. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +1 -1
  299. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  300. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts +1 -1
  301. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  302. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  303. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts +2 -2
  304. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.d.ts.map +1 -1
  305. package/dist/builtin-extensions/pi-subagents/src/slash/slash-bridge.js.map +1 -1
  306. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts +1 -1
  307. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.d.ts.map +1 -1
  308. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js +2 -2
  309. package/dist/builtin-extensions/pi-subagents/src/slash/slash-commands.js.map +1 -1
  310. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts +1 -1
  311. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.d.ts.map +1 -1
  312. package/dist/builtin-extensions/pi-subagents/src/slash/slash-live-state.js.map +1 -1
  313. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts +2 -2
  314. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  315. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +1 -1
  316. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  317. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts +1 -1
  318. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.d.ts.map +1 -1
  319. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js +1 -1
  320. package/dist/builtin-extensions/pi-subagents/src/tui/render-helpers.js.map +1 -1
  321. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +3 -3
  322. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  323. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +2 -2
  324. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  325. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts +1 -1
  326. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.d.ts.map +1 -1
  327. package/dist/builtin-extensions/pi-subagents/src/watchdog/model-selection.js.map +1 -1
  328. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts +1 -1
  329. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.d.ts.map +1 -1
  330. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-child.js.map +1 -1
  331. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts +1 -1
  332. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.d.ts.map +1 -1
  333. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js +1 -1
  334. package/dist/builtin-extensions/pi-subagents/src/watchdog/register-main.js.map +1 -1
  335. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts +1 -1
  336. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.d.ts.map +1 -1
  337. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js +1 -1
  338. package/dist/builtin-extensions/pi-subagents/src/watchdog/render.js.map +1 -1
  339. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts +3 -3
  340. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  341. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  342. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  343. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts +1 -1
  344. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.d.ts.map +1 -1
  345. package/dist/builtin-extensions/pi-subagents/src/watchdog/runtime.js.map +1 -1
  346. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts +2 -2
  347. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.d.ts.map +1 -1
  348. package/dist/builtin-extensions/pi-subagents/src/watchdog/tool-actions.js.map +1 -1
  349. package/dist/builtin-extensions/pi-tps.d.ts +1 -1
  350. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  351. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  352. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts +1 -1
  353. package/dist/builtin-extensions/pi-web-access/gemini-search.d.ts.map +1 -1
  354. package/dist/builtin-extensions/pi-web-access/gemini-search.js.map +1 -1
  355. package/dist/builtin-extensions/pi-web-access/index.d.ts +1 -1
  356. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  357. package/dist/builtin-extensions/pi-web-access/index.js +2 -2
  358. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  359. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts +1 -1
  360. package/dist/builtin-extensions/pi-web-access/openai-search.d.ts.map +1 -1
  361. package/dist/builtin-extensions/pi-web-access/openai-search.js +1 -1
  362. package/dist/builtin-extensions/pi-web-access/openai-search.js.map +1 -1
  363. package/dist/builtin-extensions/pi-web-access/storage.d.ts +1 -1
  364. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  365. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  366. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts +1 -1
  367. package/dist/builtin-extensions/pi-web-access/summary-review.d.ts.map +1 -1
  368. package/dist/builtin-extensions/pi-web-access/summary-review.js +1 -1
  369. package/dist/builtin-extensions/pi-web-access/summary-review.js.map +1 -1
  370. package/dist/bun/cli.d.ts.map +1 -1
  371. package/dist/bun/cli.js +1 -1
  372. package/dist/bun/cli.js.map +1 -1
  373. package/dist/bun/register-bedrock.d.ts.map +1 -1
  374. package/dist/bun/register-bedrock.js +2 -2
  375. package/dist/bun/register-bedrock.js.map +1 -1
  376. package/dist/catalog/models.json +1 -1
  377. package/dist/catalog/providers/opencode-go.json +1 -1
  378. package/dist/catalog/providers/openrouter.json +1 -1
  379. package/dist/catalog/providers/qwen-token-plan-cn.json +1 -1
  380. package/dist/catalog/providers/qwen-token-plan.json +1 -1
  381. package/dist/catalog/publication.json +3 -3
  382. package/dist/cli/args.d.ts +1 -1
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js.map +1 -1
  385. package/dist/cli/config-selector.d.ts.map +1 -1
  386. package/dist/cli/config-selector.js +1 -1
  387. package/dist/cli/config-selector.js.map +1 -1
  388. package/dist/cli/file-processor.d.ts +1 -1
  389. package/dist/cli/file-processor.d.ts.map +1 -1
  390. package/dist/cli/file-processor.js.map +1 -1
  391. package/dist/cli/initial-message.d.ts +1 -1
  392. package/dist/cli/initial-message.d.ts.map +1 -1
  393. package/dist/cli/initial-message.js.map +1 -1
  394. package/dist/cli/list-models.d.ts.map +1 -1
  395. package/dist/cli/list-models.js +1 -1
  396. package/dist/cli/list-models.js.map +1 -1
  397. package/dist/cli/session-picker.d.ts.map +1 -1
  398. package/dist/cli/session-picker.js +1 -1
  399. package/dist/cli/session-picker.js.map +1 -1
  400. package/dist/cli/startup-ui.d.ts +1 -1
  401. package/dist/cli/startup-ui.d.ts.map +1 -1
  402. package/dist/cli/startup-ui.js +2 -2
  403. package/dist/cli/startup-ui.js.map +1 -1
  404. package/dist/config.d.ts.map +1 -1
  405. package/dist/config.js +1 -1
  406. package/dist/config.js.map +1 -1
  407. package/dist/core/agent-session-services.d.ts +2 -2
  408. package/dist/core/agent-session-services.d.ts.map +1 -1
  409. package/dist/core/agent-session-services.js.map +1 -1
  410. package/dist/core/agent-session.d.ts +2 -2
  411. package/dist/core/agent-session.d.ts.map +1 -1
  412. package/dist/core/agent-session.js +1 -1
  413. package/dist/core/agent-session.js.map +1 -1
  414. package/dist/core/auth-storage.d.ts +1 -1
  415. package/dist/core/auth-storage.d.ts.map +1 -1
  416. package/dist/core/auth-storage.js.map +1 -1
  417. package/dist/core/cache-stats.d.ts +1 -1
  418. package/dist/core/cache-stats.d.ts.map +1 -1
  419. package/dist/core/cache-stats.js.map +1 -1
  420. package/dist/core/catalog-merge.d.ts +1 -1
  421. package/dist/core/catalog-merge.d.ts.map +1 -1
  422. package/dist/core/catalog-merge.js +7 -1
  423. package/dist/core/catalog-merge.js.map +1 -1
  424. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  425. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  426. package/dist/core/compaction/branch-summarization.js +1 -1
  427. package/dist/core/compaction/branch-summarization.js.map +1 -1
  428. package/dist/core/compaction/compaction.d.ts +2 -2
  429. package/dist/core/compaction/compaction.d.ts.map +1 -1
  430. package/dist/core/compaction/compaction.js +1 -1
  431. package/dist/core/compaction/compaction.js.map +1 -1
  432. package/dist/core/compaction/utils.d.ts +2 -2
  433. package/dist/core/compaction/utils.d.ts.map +1 -1
  434. package/dist/core/compaction/utils.js.map +1 -1
  435. package/dist/core/context-breakdown.d.ts +1 -1
  436. package/dist/core/context-breakdown.d.ts.map +1 -1
  437. package/dist/core/context-breakdown.js.map +1 -1
  438. package/dist/core/defaults.d.ts +1 -1
  439. package/dist/core/defaults.d.ts.map +1 -1
  440. package/dist/core/defaults.js.map +1 -1
  441. package/dist/core/export-html/index.d.ts +1 -1
  442. package/dist/core/export-html/index.d.ts.map +1 -1
  443. package/dist/core/export-html/index.js.map +1 -1
  444. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  445. package/dist/core/export-html/tool-renderer.js.map +1 -1
  446. package/dist/core/extensions/loader.d.ts.map +1 -1
  447. package/dist/core/extensions/loader.js +25 -25
  448. package/dist/core/extensions/loader.js.map +1 -1
  449. package/dist/core/extensions/runner.d.ts +3 -3
  450. package/dist/core/extensions/runner.d.ts.map +1 -1
  451. package/dist/core/extensions/runner.js.map +1 -1
  452. package/dist/core/extensions/types.d.ts +5 -5
  453. package/dist/core/extensions/types.d.ts.map +1 -1
  454. package/dist/core/extensions/types.js.map +1 -1
  455. package/dist/core/extensions/wrapper.d.ts +1 -1
  456. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  457. package/dist/core/extensions/wrapper.js.map +1 -1
  458. package/dist/core/grok-cli-auth.d.ts +32 -0
  459. package/dist/core/grok-cli-auth.d.ts.map +1 -0
  460. package/dist/core/grok-cli-auth.js +218 -0
  461. package/dist/core/grok-cli-auth.js.map +1 -0
  462. package/dist/core/keybindings.d.ts +2 -2
  463. package/dist/core/keybindings.d.ts.map +1 -1
  464. package/dist/core/keybindings.js +1 -1
  465. package/dist/core/keybindings.js.map +1 -1
  466. package/dist/core/live-catalog.d.ts +1 -1
  467. package/dist/core/live-catalog.d.ts.map +1 -1
  468. package/dist/core/live-catalog.js.map +1 -1
  469. package/dist/core/messages.d.ts +3 -3
  470. package/dist/core/messages.d.ts.map +1 -1
  471. package/dist/core/messages.js.map +1 -1
  472. package/dist/core/model-registry.d.ts +1 -1
  473. package/dist/core/model-registry.d.ts.map +1 -1
  474. package/dist/core/model-registry.js.map +1 -1
  475. package/dist/core/model-resolver.d.ts +2 -2
  476. package/dist/core/model-resolver.d.ts.map +1 -1
  477. package/dist/core/model-resolver.js +1 -1
  478. package/dist/core/model-resolver.js.map +1 -1
  479. package/dist/core/model-runtime.d.ts +10 -1
  480. package/dist/core/model-runtime.d.ts.map +1 -1
  481. package/dist/core/model-runtime.js +24 -5
  482. package/dist/core/model-runtime.js.map +1 -1
  483. package/dist/core/models-store.d.ts +1 -1
  484. package/dist/core/models-store.d.ts.map +1 -1
  485. package/dist/core/models-store.js.map +1 -1
  486. package/dist/core/official-catalog.d.ts +1 -1
  487. package/dist/core/official-catalog.d.ts.map +1 -1
  488. package/dist/core/official-catalog.js.map +1 -1
  489. package/dist/core/provider-attribution.d.ts +1 -1
  490. package/dist/core/provider-attribution.d.ts.map +1 -1
  491. package/dist/core/provider-attribution.js.map +1 -1
  492. package/dist/core/provider-composer.d.ts +1 -1
  493. package/dist/core/provider-composer.d.ts.map +1 -1
  494. package/dist/core/provider-composer.js +2 -2
  495. package/dist/core/provider-composer.js.map +1 -1
  496. package/dist/core/runtime-credentials.d.ts +1 -1
  497. package/dist/core/runtime-credentials.d.ts.map +1 -1
  498. package/dist/core/runtime-credentials.js.map +1 -1
  499. package/dist/core/sdk.d.ts +3 -3
  500. package/dist/core/sdk.d.ts.map +1 -1
  501. package/dist/core/sdk.js +3 -3
  502. package/dist/core/sdk.js.map +1 -1
  503. package/dist/core/session-manager.d.ts +2 -2
  504. package/dist/core/session-manager.d.ts.map +1 -1
  505. package/dist/core/session-manager.js +1 -1
  506. package/dist/core/session-manager.js.map +1 -1
  507. package/dist/core/settings-manager.d.ts +2 -2
  508. package/dist/core/settings-manager.d.ts.map +1 -1
  509. package/dist/core/settings-manager.js.map +1 -1
  510. package/dist/core/subscriptions.d.ts +1 -1
  511. package/dist/core/subscriptions.d.ts.map +1 -1
  512. package/dist/core/subscriptions.js.map +1 -1
  513. package/dist/core/tools/bash.d.ts +1 -1
  514. package/dist/core/tools/bash.d.ts.map +1 -1
  515. package/dist/core/tools/bash.js +1 -1
  516. package/dist/core/tools/bash.js.map +1 -1
  517. package/dist/core/tools/edit.d.ts +2 -2
  518. package/dist/core/tools/edit.d.ts.map +1 -1
  519. package/dist/core/tools/edit.js +1 -1
  520. package/dist/core/tools/edit.js.map +1 -1
  521. package/dist/core/tools/find.d.ts +1 -1
  522. package/dist/core/tools/find.d.ts.map +1 -1
  523. package/dist/core/tools/find.js +1 -1
  524. package/dist/core/tools/find.js.map +1 -1
  525. package/dist/core/tools/grep.d.ts +1 -1
  526. package/dist/core/tools/grep.d.ts.map +1 -1
  527. package/dist/core/tools/grep.js +1 -1
  528. package/dist/core/tools/grep.js.map +1 -1
  529. package/dist/core/tools/index.d.ts +1 -1
  530. package/dist/core/tools/index.d.ts.map +1 -1
  531. package/dist/core/tools/index.js.map +1 -1
  532. package/dist/core/tools/ls.d.ts +1 -1
  533. package/dist/core/tools/ls.d.ts.map +1 -1
  534. package/dist/core/tools/ls.js +1 -1
  535. package/dist/core/tools/ls.js.map +1 -1
  536. package/dist/core/tools/read.d.ts +1 -1
  537. package/dist/core/tools/read.d.ts.map +1 -1
  538. package/dist/core/tools/read.js +1 -1
  539. package/dist/core/tools/read.js.map +1 -1
  540. package/dist/core/tools/render-utils.d.ts +1 -1
  541. package/dist/core/tools/render-utils.d.ts.map +1 -1
  542. package/dist/core/tools/render-utils.js +1 -1
  543. package/dist/core/tools/render-utils.js.map +1 -1
  544. package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
  545. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  546. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  547. package/dist/core/tools/write.d.ts +1 -1
  548. package/dist/core/tools/write.d.ts.map +1 -1
  549. package/dist/core/tools/write.js +1 -1
  550. package/dist/core/tools/write.js.map +1 -1
  551. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  552. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  553. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  554. package/dist/core/usage-adapters/xai.js +4 -0
  555. package/dist/core/usage-adapters/xai.js.map +1 -1
  556. package/dist/core/usage-history.d.ts.map +1 -1
  557. package/dist/core/usage-history.js.map +1 -1
  558. package/dist/core/usage-service.d.ts +11 -1
  559. package/dist/core/usage-service.d.ts.map +1 -1
  560. package/dist/core/usage-service.js +45 -9
  561. package/dist/core/usage-service.js.map +1 -1
  562. package/dist/core/user-models.d.ts +1 -1
  563. package/dist/core/user-models.d.ts.map +1 -1
  564. package/dist/core/user-models.js.map +1 -1
  565. package/dist/gateway/agent-bridge.d.ts +3 -3
  566. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  567. package/dist/gateway/agent-bridge.js.map +1 -1
  568. package/dist/gateway/commands.d.ts.map +1 -1
  569. package/dist/gateway/commands.js.map +1 -1
  570. package/dist/gateway/cron.d.ts.map +1 -1
  571. package/dist/gateway/cron.js.map +1 -1
  572. package/dist/main.d.ts.map +1 -1
  573. package/dist/main.js +1 -1
  574. package/dist/main.js.map +1 -1
  575. package/dist/modes/interactive/components/armin.d.ts +1 -1
  576. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/armin.js.map +1 -1
  578. package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
  579. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  580. package/dist/modes/interactive/components/assistant-message.js +1 -1
  581. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  582. package/dist/modes/interactive/components/bash-execution.d.ts +1 -1
  583. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  584. package/dist/modes/interactive/components/bash-execution.js +1 -1
  585. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  586. package/dist/modes/interactive/components/boot-screen.d.ts +1 -1
  587. package/dist/modes/interactive/components/boot-screen.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/boot-screen.js +1 -1
  589. package/dist/modes/interactive/components/boot-screen.js.map +1 -1
  590. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  591. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  592. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  593. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  594. package/dist/modes/interactive/components/branch-summary-message.d.ts +1 -1
  595. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  596. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  597. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  598. package/dist/modes/interactive/components/compaction-summary-message.d.ts +1 -1
  599. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  600. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  601. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  602. package/dist/modes/interactive/components/config-selector.d.ts +1 -1
  603. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  604. package/dist/modes/interactive/components/config-selector.js +1 -1
  605. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  606. package/dist/modes/interactive/components/countdown-timer.d.ts +1 -1
  607. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  608. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  609. package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
  610. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  611. package/dist/modes/interactive/components/custom-editor.js +1 -1
  612. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  613. package/dist/modes/interactive/components/custom-entry.d.ts +1 -1
  614. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  615. package/dist/modes/interactive/components/custom-entry.js +1 -1
  616. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  617. package/dist/modes/interactive/components/custom-message.d.ts +1 -1
  618. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  619. package/dist/modes/interactive/components/custom-message.js +1 -1
  620. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  621. package/dist/modes/interactive/components/daxnuts.d.ts +1 -1
  622. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  623. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  624. package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
  625. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  626. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  627. package/dist/modes/interactive/components/earendil-announcement.d.ts +1 -1
  628. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  629. package/dist/modes/interactive/components/earendil-announcement.js +1 -1
  630. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  631. package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
  632. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  633. package/dist/modes/interactive/components/extension-editor.js +1 -1
  634. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  635. package/dist/modes/interactive/components/extension-input.d.ts +1 -1
  636. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  637. package/dist/modes/interactive/components/extension-input.js +1 -1
  638. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  639. package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
  640. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  641. package/dist/modes/interactive/components/extension-selector.js +1 -1
  642. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  643. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  644. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  645. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  646. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  647. package/dist/modes/interactive/components/footer.d.ts +1 -1
  648. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  649. package/dist/modes/interactive/components/footer.js +1 -1
  650. package/dist/modes/interactive/components/footer.js.map +1 -1
  651. package/dist/modes/interactive/components/injected-prompt-message.d.ts +1 -1
  652. package/dist/modes/interactive/components/injected-prompt-message.d.ts.map +1 -1
  653. package/dist/modes/interactive/components/injected-prompt-message.js +1 -1
  654. package/dist/modes/interactive/components/injected-prompt-message.js.map +1 -1
  655. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -1
  656. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  657. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  658. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  659. package/dist/modes/interactive/components/login-dialog.d.ts +2 -2
  660. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  661. package/dist/modes/interactive/components/login-dialog.js +1 -1
  662. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  663. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  664. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  665. package/dist/modes/interactive/components/model-selector.js +2 -2
  666. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  667. package/dist/modes/interactive/components/oauth-selector.d.ts +2 -2
  668. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  669. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  670. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  671. package/dist/modes/interactive/components/processes-selector.d.ts +1 -1
  672. package/dist/modes/interactive/components/processes-selector.d.ts.map +1 -1
  673. package/dist/modes/interactive/components/processes-selector.js +1 -1
  674. package/dist/modes/interactive/components/processes-selector.js.map +1 -1
  675. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
  676. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  677. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  678. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  679. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  680. package/dist/modes/interactive/components/session-selector-search.js +1 -1
  681. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  682. package/dist/modes/interactive/components/session-selector.d.ts +1 -1
  683. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  684. package/dist/modes/interactive/components/session-selector.js +1 -1
  685. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  686. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  687. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  688. package/dist/modes/interactive/components/settings-selector.js +1 -1
  689. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  690. package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
  691. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  692. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  693. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  694. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  695. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  696. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  697. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  698. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  699. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  700. package/dist/modes/interactive/components/status-indicator.js +1 -1
  701. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  702. package/dist/modes/interactive/components/theme-selector.d.ts +1 -1
  703. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  704. package/dist/modes/interactive/components/theme-selector.js +1 -1
  705. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  706. package/dist/modes/interactive/components/thinking-selector.d.ts +2 -2
  707. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  708. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  709. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  710. package/dist/modes/interactive/components/thinking-summary.d.ts +1 -1
  711. package/dist/modes/interactive/components/thinking-summary.d.ts.map +1 -1
  712. package/dist/modes/interactive/components/thinking-summary.js.map +1 -1
  713. package/dist/modes/interactive/components/thinking-tail.d.ts +1 -1
  714. package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
  715. package/dist/modes/interactive/components/thinking-tail.js +1 -1
  716. package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
  717. package/dist/modes/interactive/components/tool-execution.d.ts +1 -1
  718. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  719. package/dist/modes/interactive/components/tool-execution.js +1 -1
  720. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  721. package/dist/modes/interactive/components/tree-selector.d.ts +1 -1
  722. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  723. package/dist/modes/interactive/components/tree-selector.js +1 -1
  724. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  725. package/dist/modes/interactive/components/trust-selector.d.ts +1 -1
  726. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  727. package/dist/modes/interactive/components/trust-selector.js +1 -1
  728. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  729. package/dist/modes/interactive/components/usage-view.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/usage-view.js +1 -1
  731. package/dist/modes/interactive/components/usage-view.js.map +1 -1
  732. package/dist/modes/interactive/components/user-message-selector.d.ts +1 -1
  733. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  734. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  735. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  736. package/dist/modes/interactive/components/user-message.d.ts +1 -1
  737. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  738. package/dist/modes/interactive/components/user-message.js +1 -1
  739. package/dist/modes/interactive/components/user-message.js.map +1 -1
  740. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  741. package/dist/modes/interactive/components/visual-truncate.js +1 -1
  742. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  743. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  744. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  745. package/dist/modes/interactive/interactive-mode.js +29 -4
  746. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  747. package/dist/modes/interactive/smooth-streaming.d.ts +1 -1
  748. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  749. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  750. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  751. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  752. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  753. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  754. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  755. package/dist/modes/interactive/theme/theme.js +2 -2
  756. package/dist/modes/interactive/theme/theme.js.map +1 -1
  757. package/dist/modes/print-mode.d.ts +1 -1
  758. package/dist/modes/print-mode.d.ts.map +1 -1
  759. package/dist/modes/print-mode.js.map +1 -1
  760. package/dist/modes/rpc/rpc-client.d.ts +2 -2
  761. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  762. package/dist/modes/rpc/rpc-client.js.map +1 -1
  763. package/dist/modes/rpc/rpc-types.d.ts +2 -2
  764. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  765. package/dist/modes/rpc/rpc-types.js.map +1 -1
  766. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  767. package/examples/extensions/bash-spawn-hook.ts +2 -2
  768. package/examples/extensions/bookmark.ts +1 -1
  769. package/examples/extensions/border-status-editor.ts +3 -3
  770. package/examples/extensions/built-in-tool-renderer.ts +3 -3
  771. package/examples/extensions/claude-rules.ts +1 -1
  772. package/examples/extensions/commands.ts +1 -1
  773. package/examples/extensions/confirm-destructive.ts +1 -1
  774. package/examples/extensions/custom-compaction.ts +3 -3
  775. package/examples/extensions/custom-footer.ts +3 -3
  776. package/examples/extensions/custom-header.ts +2 -2
  777. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  778. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  779. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  780. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  781. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  782. package/examples/extensions/custom-provider-gitlab-duo/test.ts +1 -1
  783. package/examples/extensions/dirty-repo-guard.ts +1 -1
  784. package/examples/extensions/doom-overlay/doom-component.ts +2 -2
  785. package/examples/extensions/doom-overlay/doom-keys.ts +1 -1
  786. package/examples/extensions/doom-overlay/index.ts +1 -1
  787. package/examples/extensions/dynamic-resources/index.ts +1 -1
  788. package/examples/extensions/dynamic-tools.ts +1 -1
  789. package/examples/extensions/entry-renderer.ts +2 -2
  790. package/examples/extensions/event-bus.ts +1 -1
  791. package/examples/extensions/file-trigger.ts +1 -1
  792. package/examples/extensions/git-checkpoint.ts +1 -1
  793. package/examples/extensions/git-merge-and-resolve.ts +1 -1
  794. package/examples/extensions/github-issue-autocomplete.ts +2 -2
  795. package/examples/extensions/gondolin/index.ts +2 -2
  796. package/examples/extensions/gondolin/package-lock.json +2 -2
  797. package/examples/extensions/gondolin/package.json +1 -1
  798. package/examples/extensions/handoff.ts +4 -4
  799. package/examples/extensions/hello.ts +2 -2
  800. package/examples/extensions/hidden-thinking-label.ts +1 -1
  801. package/examples/extensions/inline-bash.ts +1 -1
  802. package/examples/extensions/input-transform-streaming.ts +1 -1
  803. package/examples/extensions/input-transform.ts +1 -1
  804. package/examples/extensions/interactive-shell.ts +1 -1
  805. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  806. package/examples/extensions/mac-system-theme.ts +1 -1
  807. package/examples/extensions/message-renderer.ts +2 -2
  808. package/examples/extensions/minimal-mode.ts +3 -3
  809. package/examples/extensions/modal-editor.ts +2 -2
  810. package/examples/extensions/model-status.ts +1 -1
  811. package/examples/extensions/notify.ts +1 -1
  812. package/examples/extensions/overlay-qa-tests.ts +3 -3
  813. package/examples/extensions/overlay-test.ts +2 -2
  814. package/examples/extensions/permission-gate.ts +1 -1
  815. package/examples/extensions/pirate.ts +1 -1
  816. package/examples/extensions/plan-mode/index.ts +4 -4
  817. package/examples/extensions/preset.ts +4 -4
  818. package/examples/extensions/project-trust.ts +1 -1
  819. package/examples/extensions/prompt-customizer.ts +1 -1
  820. package/examples/extensions/protected-paths.ts +1 -1
  821. package/examples/extensions/provider-payload.ts +1 -1
  822. package/examples/extensions/qna.ts +3 -3
  823. package/examples/extensions/question.ts +2 -2
  824. package/examples/extensions/questionnaire.ts +2 -2
  825. package/examples/extensions/rainbow-editor.ts +1 -1
  826. package/examples/extensions/reload-runtime.ts +1 -1
  827. package/examples/extensions/rpc-demo.ts +1 -1
  828. package/examples/extensions/sandbox/index.ts +2 -2
  829. package/examples/extensions/send-user-message.ts +1 -1
  830. package/examples/extensions/session-name.ts +1 -1
  831. package/examples/extensions/shutdown-command.ts +1 -1
  832. package/examples/extensions/snake.ts +2 -2
  833. package/examples/extensions/space-invaders.ts +2 -2
  834. package/examples/extensions/ssh.ts +2 -2
  835. package/examples/extensions/status-line.ts +1 -1
  836. package/examples/extensions/structured-output.ts +2 -2
  837. package/examples/extensions/subagent/agents.ts +1 -1
  838. package/examples/extensions/subagent/index.ts +5 -5
  839. package/examples/extensions/summarize.ts +4 -4
  840. package/examples/extensions/system-prompt-header.ts +1 -1
  841. package/examples/extensions/tic-tac-toe.ts +3 -3
  842. package/examples/extensions/timed-confirm.ts +1 -1
  843. package/examples/extensions/titlebar-spinner.ts +1 -1
  844. package/examples/extensions/todo.ts +3 -3
  845. package/examples/extensions/tool-override.ts +2 -2
  846. package/examples/extensions/tools.ts +3 -3
  847. package/examples/extensions/trigger-compact.ts +1 -1
  848. package/examples/extensions/truncated-tool.ts +3 -3
  849. package/examples/extensions/widget-placement.ts +1 -1
  850. package/examples/extensions/with-deps/index.ts +1 -1
  851. package/examples/extensions/with-deps/package-lock.json +2 -2
  852. package/examples/extensions/with-deps/package.json +1 -1
  853. package/examples/extensions/working-indicator.ts +1 -1
  854. package/examples/extensions/working-message-test.ts +1 -1
  855. package/examples/rpc-extension-ui.ts +1 -1
  856. package/examples/sdk/01-minimal.ts +1 -1
  857. package/examples/sdk/02-custom-model.ts +2 -2
  858. package/examples/sdk/03-custom-prompt.ts +1 -1
  859. package/examples/sdk/04-skills.ts +1 -1
  860. package/examples/sdk/05-tools.ts +1 -1
  861. package/examples/sdk/06-extensions.ts +2 -2
  862. package/examples/sdk/07-context-files.ts +1 -1
  863. package/examples/sdk/08-prompt-templates.ts +1 -1
  864. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  865. package/examples/sdk/10-settings.ts +1 -1
  866. package/examples/sdk/11-sessions.ts +1 -1
  867. package/examples/sdk/12-full-control.ts +2 -2
  868. package/examples/sdk/13-session-runtime.ts +1 -1
  869. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { createHash } from \"node:crypto\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { computeWatchdogRepoChangeSignature, eventIndicatesRepoEdit, type WatchdogRepoChangeSignature } from \"./change-signature.ts\";\nimport { WatchdogEmissionGuard } from \"./emission-guard.ts\";\nimport {\n\tcollectWatchdogLspDiagnostics,\n\tformatWatchdogLspDiagnosticsBlock,\n\tWatchdogLspDiagnosticsLedger,\n\twatchdogWarningFromLspDiagnostics,\n\ttype WatchdogLspDiagnosticsFunction,\n} from \"./lsp-diagnostics.ts\";\nimport { resolveWatchdogConfig } from \"./settings.ts\";\nimport { formatWatchdogTurnDelta } from \"./turn-delta.ts\";\nimport {\n\ttype ResolvedWatchdogConfig,\n\ttype WatchdogEndpointConfig,\n\ttype WatchdogLspRuntimeSnapshot,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogSettingsError,\n\ttype WatchdogSettingsResult,\n\ttype WatchdogSettingsSource,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { normalizeWatchdogWarningDetails } from \"./warning-format.ts\";\n\ntype ReviewStopReason = \"stop\" | \"error\" | \"aborted\" | \"length\";\n\nexport interface WatchdogReviewResult {\n\twarnings?: WatchdogWarning[];\n\tstopReason?: ReviewStopReason;\n}\n\nexport interface WatchdogReviewRequest {\n\tdelta: string;\n\tepoch: number;\n\treviewId: number;\n\tconfig: ResolvedWatchdogConfig;\n\temitWarning(warning: WatchdogWarning): boolean;\n\tsignal?: AbortSignal;\n}\n\nexport type WatchdogReviewFunction = (request: WatchdogReviewRequest) => Promise<WatchdogReviewResult | void> | WatchdogReviewResult | void;\n\nexport interface WatchdogRuntimeSnapshot {\n\tstatus: WatchdogRuntimeStatus;\n\tenabled: boolean;\n\tconfig: ResolvedWatchdogConfig;\n\tconfigOk: boolean;\n\terrors: WatchdogSettingsError[];\n\tsources: WatchdogSettingsSource[];\n\tbufferedDeltas: number;\n\tepoch: number;\n\tactiveReviewId?: number;\n\tsessionOverride?: boolean;\n\tsessionModelOverride?: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">>;\n\tlastWarning?: WatchdogWarningDetails;\n\tlastError?: string;\n\tfailedReviews: number;\n\tstaleReviews: number;\n\treviewConnected: boolean;\n\treviewDescription: string;\n\tautoFollowQueued: false;\n\treviewTrigger: \"turn-delta\" | \"repo-edits\";\n\tchangedPaths?: string[];\n\tlsp: WatchdogLspRuntimeSnapshot;\n}\n\ninterface Waiter {\n\tresolve(settled: boolean): void;\n\ttimer: ReturnType<typeof setTimeout>;\n}\n\ninterface MainWatchdogRuntimeOptions {\n\tcwd?: string;\n\tresolveConfig?: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\treview?: WatchdogReviewFunction;\n\treviewDescription?: string;\n\tdisplayWarning?: (warning: WatchdogWarningDetails) => void;\n\treviewChangesOnly?: boolean;\n\tlspDiagnostics?: WatchdogLspDiagnosticsFunction;\n}\n\ntype ContextLike = Pick<ExtensionContext, \"cwd\">;\ntype ReviewDeltaOutcome = \"completed\" | \"timeout\" | \"stale\";\n\nconst DEFAULT_REVIEW: WatchdogReviewFunction = () => ({ warnings: [] });\nconst MAX_REVIEW_INPUT_CHARS = 24_000;\nconst REVIEW_DELTA_SEPARATOR = \"\\n\\n---\\n\\n\";\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction promptFromBeforeAgentStart(event: unknown): string | undefined {\n\tif (!event || typeof event !== \"object\") return undefined;\n\tconst input = event as { prompt?: unknown; systemPrompt?: unknown };\n\tif (typeof input.prompt === \"string\") return input.prompt;\n\tif (typeof input.systemPrompt === \"string\") return input.systemPrompt;\n\treturn undefined;\n}\n\nfunction reviewInputSignature(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nexport class MainWatchdogRuntime {\n\tprivate cwd: string;\n\tprivate readonly resolveConfig: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\tprivate readonly review: WatchdogReviewFunction;\n\tprivate readonly reviewConnected: boolean;\n\tprivate readonly reviewDescription: string;\n\tprivate readonly displayWarning: ((warning: WatchdogWarningDetails) => void) | undefined;\n\tprivate readonly reviewChangesOnly: boolean;\n\tprivate readonly lspDiagnostics: WatchdogLspDiagnosticsFunction;\n\tprivate readonly lspLedger = new WatchdogLspDiagnosticsLedger();\n\tprivate configResult: WatchdogSettingsResult;\n\tprivate sessionOverrideEnabled: boolean | undefined;\n\tprivate sessionModelOverride: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">> | undefined;\n\tprivate status: WatchdogRuntimeStatus = \"idle\";\n\tprivate pendingDeltas: string[] = [];\n\tprivate pendingDeltaChars = 0;\n\tprivate guard = new WatchdogEmissionGuard();\n\tprivate guardMaxWarnings: number | null = null;\n\tprivate epoch = 0;\n\tprivate reviewIdCounter = 0;\n\tprivate agentEndIdCounter = 0;\n\tprivate activeAgentEndId: number | undefined;\n\tprivate activeAgentEndAbortController: AbortController | undefined;\n\tprivate activeReviewId: number | undefined;\n\tprivate activeReviewWarning: WatchdogWarningDetails | undefined;\n\tprivate reviewing = false;\n\tprivate waitingAtAgentEnd = false;\n\tprivate disposed = false;\n\tprivate includeUserPromptInNextDelta = false;\n\tprivate userPrompt: string | undefined;\n\tprivate waiters: Waiter[] = [];\n\tprivate lastWarning: WatchdogWarningDetails | undefined;\n\tprivate lastError: string | undefined;\n\tprivate lastReviewInputSignature: string | undefined;\n\tprivate turnStartChangeSignature: WatchdogRepoChangeSignature | undefined;\n\tprivate lastReviewedChangeSignature: string | undefined;\n\tprivate currentChangedPaths: string[] | undefined;\n\tprivate lastLspSnapshot: WatchdogLspRuntimeSnapshot | undefined;\n\tprivate observedRepoEditThisTurn = false;\n\tprivate failedReviews = 0;\n\tprivate staleReviews = 0;\n\n\tconstructor(options: MainWatchdogRuntimeOptions = {}) {\n\t\tthis.cwd = options.cwd ?? process.cwd();\n\t\tthis.resolveConfig = options.resolveConfig ?? resolveWatchdogConfig;\n\t\tthis.review = options.review ?? DEFAULT_REVIEW;\n\t\tthis.reviewConnected = Boolean(options.review);\n\t\tthis.reviewDescription = options.reviewDescription ?? (options.review ? \"injected seam\" : \"not wired\");\n\t\tthis.displayWarning = options.displayWarning;\n\t\tthis.reviewChangesOnly = options.reviewChangesOnly === true;\n\t\tthis.lspDiagnostics = options.lspDiagnostics ?? collectWatchdogLspDiagnostics;\n\t\tthis.configResult = this.resolveConfig(this.cwd);\n\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature();\n\t\tthis.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t}\n\n\tbindSession(ctx: ContextLike): void {\n\t\tthis.cwd = ctx.cwd;\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session_start\", { clearReviewInputSignature: true, resetChangeSignature: true, clearLspLedger: true });\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\trefreshConfig(cwd = this.cwd): WatchdogSettingsResult {\n\t\tthis.cwd = cwd;\n\t\tconst wasEnabled = this.isEnabled();\n\t\tconst session = this.sessionOverrideEnabled === undefined && this.sessionModelOverride === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\tmain: {\n\t\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\t\t...(this.sessionModelOverride ?? {}),\n\t\t\t\t},\n\t\t\t};\n\t\tthis.configResult = this.resolveConfig(this.cwd, session === undefined ? undefined : { session });\n\t\tif (this.configResult.config.maxWarnings !== this.guardMaxWarnings) {\n\t\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\t}\n\t\tif (wasEnabled && !this.isEnabled()) this.invalidateActiveReview(\"watchdog disabled\");\n\t\treturn this.configResult;\n\t}\n\n\tsetSessionEnabled(enabled: boolean, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = enabled;\n\t\tthis.reset(\"session override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tsetSessionModel(patch: { model?: string | null; thinking?: WatchdogEndpointConfig[\"thinking\"] | null }, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tconst next = { ...(this.sessionModelOverride ?? {}) };\n\t\tif (patch.model === null) delete next.model;\n\t\telse if (patch.model !== undefined) next.model = patch.model;\n\t\tif (patch.thinking === null) delete next.thinking;\n\t\telse if (patch.thinking !== undefined) next.thinking = patch.thinking;\n\t\tthis.sessionModelOverride = next.model === undefined && next.thinking === undefined ? undefined : next;\n\t\tthis.reset(\"session model override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionModel(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session model override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionOverride(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\treset(_reason = \"reset\", options: { clearReviewInputSignature?: boolean; resetChangeSignature?: boolean; clearLspLedger?: boolean } = {}): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.includeUserPromptInNextDelta = false;\n\t\tthis.userPrompt = undefined;\n\t\tthis.lastError = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tif (options.clearLspLedger) {\n\t\t\tthis.lspLedger.reset();\n\t\t\tthis.lastLspSnapshot = undefined;\n\t\t}\n\t\tif (options.clearReviewInputSignature) this.lastReviewInputSignature = undefined;\n\t\tif (options.resetChangeSignature) this.resetRepoChangeBaseline({ reviewed: true });\n\t\tthis.guard.reset();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.lastReviewInputSignature = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.lastLspSnapshot = undefined;\n\t\tthis.lspLedger.reset();\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tthis.resolveWaiters(false);\n\t}\n\n\thandleBeforeAgentStart(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.reset(\"before_agent_start\");\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.userPrompt = promptFromBeforeAgentStart(event);\n\t\tthis.includeUserPromptInNextDelta = Boolean(this.userPrompt?.trim());\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\thandleTurnEnd(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\ttry {\n\t\t\tthis.observedRepoEditThisTurn ||= eventIndicatesRepoEdit(event);\n\t\t\tconst delta = formatWatchdogTurnDelta({\n\t\t\t\tincludeUserPrompt: this.includeUserPromptInNextDelta,\n\t\t\t\tuserPrompt: this.userPrompt,\n\t\t\t\tevents: [event],\n\t\t\t});\n\t\t\tthis.includeUserPromptInNextDelta = false;\n\t\t\tthis.enqueueDelta(delta);\n\t\t} catch (error) {\n\t\t\tthis.fail(`Failed to format watchdog turn delta: ${errorMessage(error)}`);\n\t\t}\n\t}\n\n\tenqueueDelta(delta: string): void {\n\t\tif (this.disposed || !delta.trim() || !this.isEnabled()) return;\n\t\tthis.appendBoundedDelta(delta);\n\t\tif (!this.reviewing && !this.waitingAtAgentEnd) this.status = \"queued\";\n\t}\n\n\tasync handleAgentEnd(_event: unknown, ctx: ContextLike): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\tconst changeSignature = this.resolveReviewChangeSignature(ctx.cwd);\n\t\tif (this.reviewChangesOnly && !changeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tif (changeSignature && changeSignature.key === this.lastReviewedChangeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tthis.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tthis.waitingAtAgentEnd = true;\n\t\tconst agentEndEpoch = this.epoch;\n\t\tconst agentEndId = ++this.agentEndIdCounter;\n\t\tconst lspAbortController = new AbortController();\n\t\tthis.activeAgentEndId = agentEndId;\n\t\tthis.activeAgentEndAbortController = lspAbortController;\n\t\ttry {\n\t\t\tthis.guard.startModelUpdate();\n\t\t\tconst lspBlock = await this.collectLspDiagnostics(changeSignature, {\n\t\t\t\tepoch: agentEndEpoch,\n\t\t\t\tagentEndId,\n\t\t\t\tsignal: lspAbortController.signal,\n\t\t\t});\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (!this.isAgentEndCurrent(agentEndEpoch, agentEndId)) return;\n\t\t\tconst delta = this.buildReviewInput(changeSignature, lspBlock);\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (!delta.trim()) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst signature = reviewInputSignature(delta);\n\t\t\tif (!this.reviewChangesOnly && signature === this.lastReviewInputSignature) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst outcome = await this.reviewDelta(delta, this.configResult.config.agentEndTimeoutMs);\n\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\tif (outcome === \"timeout\") {\n\t\t\t\tthis.staleReviews++;\n\t\t\t\tthis.invalidateActiveReview(\"agent-end timeout\");\n\t\t\t\tthis.status = \"stale\";\n\t\t\t\tthis.markLastWarningStale();\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (outcome === \"completed\" && this.status !== \"failed\" && this.status !== \"stale\") {\n\t\t\t\tthis.lastReviewInputSignature = signature;\n\t\t\t\tif (changeSignature) this.lastReviewedChangeSignature = changeSignature.key;\n\t\t\t\tthis.currentChangedPaths = changeSignature?.changedPaths;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t}\n\t\t\tthis.resolveWaiters(true);\n\t\t} finally {\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (this.activeAgentEndId === agentEndId) this.activeAgentEndId = undefined;\n\t\t}\n\t}\n\n\trecordDisplayedWarning(warning: WatchdogWarning): WatchdogWarningDetails {\n\t\tconst details = normalizeWatchdogWarningDetails(warning, { state: \"displayed\", source: warning.source ?? \"main\" });\n\t\tthis.lastWarning = details;\n\t\treturn details;\n\t}\n\n\tgetSnapshot(cwd?: string): WatchdogRuntimeSnapshot {\n\t\tif (cwd) this.refreshConfig(cwd);\n\t\treturn {\n\t\t\tstatus: this.status,\n\t\t\tenabled: this.isEnabled(),\n\t\t\tconfig: this.configResult.config,\n\t\t\tconfigOk: this.configResult.ok,\n\t\t\terrors: [...this.configResult.errors],\n\t\t\tsources: [...this.configResult.sources],\n\t\t\tbufferedDeltas: this.pendingDeltas.length,\n\t\t\tepoch: this.epoch,\n\t\t\t...(this.activeReviewId !== undefined ? { activeReviewId: this.activeReviewId } : {}),\n\t\t\t...(this.sessionOverrideEnabled !== undefined ? { sessionOverride: this.sessionOverrideEnabled } : {}),\n\t\t\t...(this.sessionModelOverride !== undefined ? { sessionModelOverride: { ...this.sessionModelOverride } } : {}),\n\t\t\t...(this.lastWarning ? { lastWarning: this.lastWarning } : {}),\n\t\t\t...(this.lastError ? { lastError: this.lastError } : {}),\n\t\t\tfailedReviews: this.failedReviews,\n\t\t\tstaleReviews: this.staleReviews,\n\t\t\treviewConnected: this.reviewConnected,\n\t\t\treviewDescription: this.reviewDescription,\n\t\t\tautoFollowQueued: false,\n\t\t\treviewTrigger: this.reviewChangesOnly ? \"repo-edits\" : \"turn-delta\",\n\t\t\t...(this.currentChangedPaths?.length ? { changedPaths: [...this.currentChangedPaths] } : {}),\n\t\t\tlsp: this.lspSnapshot(),\n\t\t};\n\t}\n\n\tasync waitForIdle(timeoutMs = 1_000): Promise<boolean> {\n\t\treturn this.waitForSettled(timeoutMs);\n\t}\n\n\tprivate isEnabled(): boolean {\n\t\treturn this.configResult.ok && this.configResult.config.main.enabled;\n\t}\n\n\tprivate abortActiveAgentEnd(): void {\n\t\tthis.activeAgentEndAbortController?.abort();\n\t\tthis.activeAgentEndAbortController = undefined;\n\t\tthis.activeAgentEndId = undefined;\n\t}\n\n\tprivate isAgentEndCurrent(epoch: number, agentEndId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeAgentEndId === agentEndId && this.waitingAtAgentEnd && this.isEnabled();\n\t}\n\n\tprivate isCurrent(epoch: number, reviewId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeReviewId === reviewId;\n\t}\n\n\tprivate acceptWarning(epoch: number, reviewId: number, warning: WatchdogWarning): boolean {\n\t\tif (!this.isCurrent(epoch, reviewId) || !this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"candidate\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.activeReviewWarning = details;\n\t\treturn true;\n\t}\n\n\tprivate displayBoundaryWarning(warning: WatchdogWarning): boolean {\n\t\tif (!this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"displayed\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t\treturn true;\n\t}\n\n\tprivate invalidateActiveReview(_reason: string): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t}\n\n\tprivate async reviewDelta(delta: string, timeoutMs: number): Promise<ReviewDeltaOutcome> {\n\t\tif (this.reviewing || this.disposed) return \"stale\";\n\t\tthis.reviewing = true;\n\t\tconst reviewEpoch = this.epoch;\n\t\tconst reviewId = ++this.reviewIdCounter;\n\t\tthis.activeReviewId = reviewId;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.status = \"reviewing\";\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tconst abortController = new AbortController();\n\t\tconst reviewPromise = Promise.resolve().then(() => this.review({\n\t\t\tdelta,\n\t\t\tepoch: reviewEpoch,\n\t\t\treviewId,\n\t\t\tconfig: this.configResult.config,\n\t\t\tsignal: abortController.signal,\n\t\t\temitWarning: (warning) => this.acceptWarning(reviewEpoch, reviewId, warning),\n\t\t}));\n\t\ttry {\n\t\t\tconst result = await Promise.race([\n\t\t\t\treviewPromise,\n\t\t\t\tnew Promise<\"timeout\">((resolve) => {\n\t\t\t\t\ttimeout = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tif (result === \"timeout\") {\n\t\t\t\tabortController.abort();\n\t\t\t\treturn \"timeout\";\n\t\t\t}\n\t\t\tif (!this.isCurrent(reviewEpoch, reviewId)) return \"stale\";\n\t\t\tfor (const warning of result?.warnings ?? []) this.acceptWarning(reviewEpoch, reviewId, warning);\n\t\t\tif (result?.stopReason && result.stopReason !== \"stop\") {\n\t\t\t\tthis.fail(`Watchdog review ended with stop reason '${result.stopReason}'.`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\tthis.displayAcceptedReviewWarning();\n\t\t\treturn \"completed\";\n\t\t} catch (error) {\n\t\t\tif (this.isCurrent(reviewEpoch, reviewId)) {\n\t\t\t\tthis.fail(`Watchdog review failed: ${errorMessage(error)}`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\treturn \"stale\";\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\tif (this.epoch === reviewEpoch && this.activeReviewId === reviewId) {\n\t\t\t\tthis.reviewing = false;\n\t\t\t\tthis.activeReviewId = undefined;\n\t\t\t\tthis.activeReviewWarning = undefined;\n\t\t\t}\n\t\t\tthis.resolveWaiters(this.isSettled());\n\t\t}\n\t}\n\n\tprivate displayAcceptedReviewWarning(): void {\n\t\tif (!this.activeReviewWarning) return;\n\t\tconst details: WatchdogWarningDetails = {\n\t\t\t...this.activeReviewWarning,\n\t\t\tstate: \"displayed\",\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t};\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t}\n\n\tprivate currentRepoChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\treturn this.reviewChangesOnly ? computeWatchdogRepoChangeSignature(cwd) : undefined;\n\t}\n\n\tprivate resetRepoChangeBaseline(options: { cwd?: string; reviewed?: boolean } = {}): void {\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature(options.cwd ?? this.cwd);\n\t\tif (options.reviewed) this.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t\telse this.lastReviewedChangeSignature ??= this.turnStartChangeSignature?.key;\n\t\tthis.currentChangedPaths = this.turnStartChangeSignature?.changedPaths;\n\t\tthis.observedRepoEditThisTurn = false;\n\t}\n\n\tprivate resolveReviewChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\tif (!this.reviewChangesOnly) return undefined;\n\t\tconst current = this.currentRepoChangeSignature(cwd);\n\t\tif (current) {\n\t\t\tthis.currentChangedPaths = current.changedPaths;\n\t\t\tif (current.key === this.turnStartChangeSignature?.key) return undefined;\n\t\t\tif (current.changedPaths.length === 0) return undefined;\n\t\t\treturn current;\n\t\t}\n\t\treturn this.observedRepoEditThisTurn\n\t\t\t? { root: cwd, key: `observed-edit:${this.epoch}:${this.reviewIdCounter}:${this.pendingDeltaChars}`, changedPaths: [] }\n\t\t\t: undefined;\n\t}\n\n\tprivate async collectLspDiagnostics(changeSignature: WatchdogRepoChangeSignature | undefined, current: { epoch: number; agentEndId: number; signal: AbortSignal }): Promise<string> {\n\t\tconst config = this.configResult.config.lsp;\n\t\tif (!config.enabled || !changeSignature?.changedPaths.length) {\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: config.enabled,\n\t\t\t\tstatus: config.enabled ? \"skipped\" : \"disabled\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: [],\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t\ttry {\n\t\t\tconst raw = await this.lspDiagnostics({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\troot: changeSignature.root,\n\t\t\t\tchangedPaths: changeSignature.changedPaths,\n\t\t\t\tconfig,\n\t\t\t\tsignal: current.signal,\n\t\t\t});\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tconst diagnosticCount = raw.diagnostics.length;\n\t\t\tconst fresh = this.lspLedger.reduce(raw);\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\t...fresh,\n\t\t\t\tenabled: true,\n\t\t\t\tdiagnosticCount,\n\t\t\t\tfreshDiagnosticCount: fresh.diagnostics.length,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\tconst warning = watchdogWarningFromLspDiagnostics(fresh);\n\t\t\tif (warning) this.displayBoundaryWarning(warning);\n\t\t\treturn formatWatchdogLspDiagnosticsBlock(fresh);\n\t\t} catch (error) {\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: true,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: changeSignature.changedPaths,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tmessage: `LSP diagnostics failed: ${errorMessage(error)}`,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tprivate lspSnapshot(): WatchdogLspRuntimeSnapshot {\n\t\tif (this.lastLspSnapshot) return {\n\t\t\t...this.lastLspSnapshot,\n\t\t\tcheckedPaths: [...this.lastLspSnapshot.checkedPaths],\n\t\t\tskippedPaths: [...this.lastLspSnapshot.skippedPaths],\n\t\t\tdiagnostics: [...this.lastLspSnapshot.diagnostics],\n\t\t};\n\t\tconst enabled = this.isEnabled() && this.configResult.config.lsp.enabled;\n\t\treturn {\n\t\t\tenabled,\n\t\t\tstatus: enabled ? \"skipped\" : \"disabled\",\n\t\t\tcheckedPaths: [],\n\t\t\tskippedPaths: [],\n\t\t\tdiagnostics: [],\n\t\t\tdiagnosticCount: 0,\n\t\t\tfreshDiagnosticCount: 0,\n\t\t};\n\t}\n\n\tprivate appendBoundedDelta(delta: string): void {\n\t\tlet entry = delta.trim();\n\t\tif (!entry) return;\n\t\tif (entry.length > MAX_REVIEW_INPUT_CHARS) entry = entry.slice(-MAX_REVIEW_INPUT_CHARS);\n\t\tthis.pendingDeltas.push(entry);\n\t\tthis.pendingDeltaChars += entry.length;\n\t\twhile (this.pendingDeltas.length > 1 && this.pendingDeltaChars + (this.pendingDeltas.length - 1) * REVIEW_DELTA_SEPARATOR.length > MAX_REVIEW_INPUT_CHARS) {\n\t\t\tconst removed = this.pendingDeltas.shift();\n\t\t\tif (removed) this.pendingDeltaChars -= removed.length;\n\t\t}\n\t}\n\n\tprivate buildReviewInput(changeSignature?: WatchdogRepoChangeSignature, lspBlock = \"\"): string {\n\t\tconst input = this.pendingDeltas.join(REVIEW_DELTA_SEPARATOR);\n\t\tconst changes = changeSignature?.changedPaths.length\n\t\t\t? [\"Changed repo paths:\", ...changeSignature.changedPaths.slice(0, 200).map((file) => `- ${file}`)].join(\"\\n\")\n\t\t\t: \"\";\n\t\tconst contextPieces = [changes, lspBlock].filter(Boolean);\n\t\tif (!contextPieces.length) return input.length > MAX_REVIEW_INPUT_CHARS ? input.slice(-MAX_REVIEW_INPUT_CHARS) : input;\n\n\t\tconst maxContextLength = Math.floor(MAX_REVIEW_INPUT_CHARS / 2);\n\t\tconst maxPieceLength = Math.max(1_000, Math.floor(maxContextLength / contextPieces.length));\n\t\tconst boundedContext = contextPieces.map((piece) => piece.length > maxPieceLength\n\t\t\t? `${piece.slice(0, maxPieceLength - 6)}\\n- ...`\n\t\t\t: piece).join(REVIEW_DELTA_SEPARATOR);\n\t\tconst separatorLength = input ? REVIEW_DELTA_SEPARATOR.length : 0;\n\t\tconst inputBudget = MAX_REVIEW_INPUT_CHARS - boundedContext.length - separatorLength;\n\t\tconst boundedInput = inputBudget <= 0\n\t\t\t? \"\"\n\t\t\t: input.length > inputBudget\n\t\t\t\t? input.slice(-inputBudget)\n\t\t\t\t: input;\n\t\treturn [boundedContext, boundedInput].filter(Boolean).join(REVIEW_DELTA_SEPARATOR);\n\t}\n\n\tprivate clearPendingDeltas(): void {\n\t\tthis.pendingDeltas = [];\n\t\tthis.pendingDeltaChars = 0;\n\t}\n\n\tprivate fail(message: string): void {\n\t\tthis.failedReviews++;\n\t\tthis.lastError = message;\n\t\tthis.status = \"failed\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tprivate markLastWarningStale(): void {\n\t\tif (!this.lastWarning || this.lastWarning.state === \"displayed\") return;\n\t\tthis.lastWarning = { ...this.lastWarning, stale: true, state: \"stale\" };\n\t}\n\n\tprivate isSettled(): boolean {\n\t\treturn !this.reviewing && this.pendingDeltas.length === 0;\n\t}\n\n\tprivate waitForSettled(timeoutMs: number): Promise<boolean> {\n\t\tif (this.isSettled()) return Promise.resolve(true);\n\t\treturn new Promise((resolve) => {\n\t\t\tconst waiter: Waiter = {\n\t\t\t\tresolve,\n\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\tthis.waiters = this.waiters.filter((entry) => entry !== waiter);\n\t\t\t\t\tresolve(false);\n\t\t\t\t}, timeoutMs),\n\t\t\t};\n\t\t\tthis.waiters.push(waiter);\n\t\t});\n\t}\n\n\tprivate resolveWaiters(settled: boolean): void {\n\t\tif (!settled && !this.disposed) return;\n\t\tconst waiters = this.waiters;\n\t\tthis.waiters = [];\n\t\tfor (const waiter of waiters) {\n\t\t\tclearTimeout(waiter.timer);\n\t\t\twaiter.resolve(settled);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport { createHash } from \"node:crypto\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { computeWatchdogRepoChangeSignature, eventIndicatesRepoEdit, type WatchdogRepoChangeSignature } from \"./change-signature.ts\";\nimport { WatchdogEmissionGuard } from \"./emission-guard.ts\";\nimport {\n\tcollectWatchdogLspDiagnostics,\n\tformatWatchdogLspDiagnosticsBlock,\n\tWatchdogLspDiagnosticsLedger,\n\twatchdogWarningFromLspDiagnostics,\n\ttype WatchdogLspDiagnosticsFunction,\n} from \"./lsp-diagnostics.ts\";\nimport { resolveWatchdogConfig } from \"./settings.ts\";\nimport { formatWatchdogTurnDelta } from \"./turn-delta.ts\";\nimport {\n\ttype ResolvedWatchdogConfig,\n\ttype WatchdogEndpointConfig,\n\ttype WatchdogLspRuntimeSnapshot,\n\ttype WatchdogRuntimeStatus,\n\ttype WatchdogSettingsError,\n\ttype WatchdogSettingsResult,\n\ttype WatchdogSettingsSource,\n\ttype WatchdogWarning,\n\ttype WatchdogWarningDetails,\n} from \"./types.ts\";\nimport { normalizeWatchdogWarningDetails } from \"./warning-format.ts\";\n\ntype ReviewStopReason = \"stop\" | \"error\" | \"aborted\" | \"length\";\n\nexport interface WatchdogReviewResult {\n\twarnings?: WatchdogWarning[];\n\tstopReason?: ReviewStopReason;\n}\n\nexport interface WatchdogReviewRequest {\n\tdelta: string;\n\tepoch: number;\n\treviewId: number;\n\tconfig: ResolvedWatchdogConfig;\n\temitWarning(warning: WatchdogWarning): boolean;\n\tsignal?: AbortSignal;\n}\n\nexport type WatchdogReviewFunction = (request: WatchdogReviewRequest) => Promise<WatchdogReviewResult | void> | WatchdogReviewResult | void;\n\nexport interface WatchdogRuntimeSnapshot {\n\tstatus: WatchdogRuntimeStatus;\n\tenabled: boolean;\n\tconfig: ResolvedWatchdogConfig;\n\tconfigOk: boolean;\n\terrors: WatchdogSettingsError[];\n\tsources: WatchdogSettingsSource[];\n\tbufferedDeltas: number;\n\tepoch: number;\n\tactiveReviewId?: number;\n\tsessionOverride?: boolean;\n\tsessionModelOverride?: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">>;\n\tlastWarning?: WatchdogWarningDetails;\n\tlastError?: string;\n\tfailedReviews: number;\n\tstaleReviews: number;\n\treviewConnected: boolean;\n\treviewDescription: string;\n\tautoFollowQueued: false;\n\treviewTrigger: \"turn-delta\" | \"repo-edits\";\n\tchangedPaths?: string[];\n\tlsp: WatchdogLspRuntimeSnapshot;\n}\n\ninterface Waiter {\n\tresolve(settled: boolean): void;\n\ttimer: ReturnType<typeof setTimeout>;\n}\n\ninterface MainWatchdogRuntimeOptions {\n\tcwd?: string;\n\tresolveConfig?: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\treview?: WatchdogReviewFunction;\n\treviewDescription?: string;\n\tdisplayWarning?: (warning: WatchdogWarningDetails) => void;\n\treviewChangesOnly?: boolean;\n\tlspDiagnostics?: WatchdogLspDiagnosticsFunction;\n}\n\ntype ContextLike = Pick<ExtensionContext, \"cwd\">;\ntype ReviewDeltaOutcome = \"completed\" | \"timeout\" | \"stale\";\n\nconst DEFAULT_REVIEW: WatchdogReviewFunction = () => ({ warnings: [] });\nconst MAX_REVIEW_INPUT_CHARS = 24_000;\nconst REVIEW_DELTA_SEPARATOR = \"\\n\\n---\\n\\n\";\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction promptFromBeforeAgentStart(event: unknown): string | undefined {\n\tif (!event || typeof event !== \"object\") return undefined;\n\tconst input = event as { prompt?: unknown; systemPrompt?: unknown };\n\tif (typeof input.prompt === \"string\") return input.prompt;\n\tif (typeof input.systemPrompt === \"string\") return input.systemPrompt;\n\treturn undefined;\n}\n\nfunction reviewInputSignature(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nexport class MainWatchdogRuntime {\n\tprivate cwd: string;\n\tprivate readonly resolveConfig: (cwd: string, options?: { session?: Record<string, unknown> }) => WatchdogSettingsResult;\n\tprivate readonly review: WatchdogReviewFunction;\n\tprivate readonly reviewConnected: boolean;\n\tprivate readonly reviewDescription: string;\n\tprivate readonly displayWarning: ((warning: WatchdogWarningDetails) => void) | undefined;\n\tprivate readonly reviewChangesOnly: boolean;\n\tprivate readonly lspDiagnostics: WatchdogLspDiagnosticsFunction;\n\tprivate readonly lspLedger = new WatchdogLspDiagnosticsLedger();\n\tprivate configResult: WatchdogSettingsResult;\n\tprivate sessionOverrideEnabled: boolean | undefined;\n\tprivate sessionModelOverride: Partial<Pick<WatchdogEndpointConfig, \"model\" | \"thinking\">> | undefined;\n\tprivate status: WatchdogRuntimeStatus = \"idle\";\n\tprivate pendingDeltas: string[] = [];\n\tprivate pendingDeltaChars = 0;\n\tprivate guard = new WatchdogEmissionGuard();\n\tprivate guardMaxWarnings: number | null = null;\n\tprivate epoch = 0;\n\tprivate reviewIdCounter = 0;\n\tprivate agentEndIdCounter = 0;\n\tprivate activeAgentEndId: number | undefined;\n\tprivate activeAgentEndAbortController: AbortController | undefined;\n\tprivate activeReviewId: number | undefined;\n\tprivate activeReviewWarning: WatchdogWarningDetails | undefined;\n\tprivate reviewing = false;\n\tprivate waitingAtAgentEnd = false;\n\tprivate disposed = false;\n\tprivate includeUserPromptInNextDelta = false;\n\tprivate userPrompt: string | undefined;\n\tprivate waiters: Waiter[] = [];\n\tprivate lastWarning: WatchdogWarningDetails | undefined;\n\tprivate lastError: string | undefined;\n\tprivate lastReviewInputSignature: string | undefined;\n\tprivate turnStartChangeSignature: WatchdogRepoChangeSignature | undefined;\n\tprivate lastReviewedChangeSignature: string | undefined;\n\tprivate currentChangedPaths: string[] | undefined;\n\tprivate lastLspSnapshot: WatchdogLspRuntimeSnapshot | undefined;\n\tprivate observedRepoEditThisTurn = false;\n\tprivate failedReviews = 0;\n\tprivate staleReviews = 0;\n\n\tconstructor(options: MainWatchdogRuntimeOptions = {}) {\n\t\tthis.cwd = options.cwd ?? process.cwd();\n\t\tthis.resolveConfig = options.resolveConfig ?? resolveWatchdogConfig;\n\t\tthis.review = options.review ?? DEFAULT_REVIEW;\n\t\tthis.reviewConnected = Boolean(options.review);\n\t\tthis.reviewDescription = options.reviewDescription ?? (options.review ? \"injected seam\" : \"not wired\");\n\t\tthis.displayWarning = options.displayWarning;\n\t\tthis.reviewChangesOnly = options.reviewChangesOnly === true;\n\t\tthis.lspDiagnostics = options.lspDiagnostics ?? collectWatchdogLspDiagnostics;\n\t\tthis.configResult = this.resolveConfig(this.cwd);\n\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature();\n\t\tthis.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t}\n\n\tbindSession(ctx: ContextLike): void {\n\t\tthis.cwd = ctx.cwd;\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session_start\", { clearReviewInputSignature: true, resetChangeSignature: true, clearLspLedger: true });\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\trefreshConfig(cwd = this.cwd): WatchdogSettingsResult {\n\t\tthis.cwd = cwd;\n\t\tconst wasEnabled = this.isEnabled();\n\t\tconst session = this.sessionOverrideEnabled === undefined && this.sessionModelOverride === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\tmain: {\n\t\t\t\t\t...(this.sessionOverrideEnabled === undefined ? {} : { enabled: this.sessionOverrideEnabled }),\n\t\t\t\t\t...(this.sessionModelOverride ?? {}),\n\t\t\t\t},\n\t\t\t};\n\t\tthis.configResult = this.resolveConfig(this.cwd, session === undefined ? undefined : { session });\n\t\tif (this.configResult.config.maxWarnings !== this.guardMaxWarnings) {\n\t\t\tthis.guardMaxWarnings = this.configResult.config.maxWarnings;\n\t\t\tthis.guard = new WatchdogEmissionGuard({ maxWarnings: this.guardMaxWarnings });\n\t\t}\n\t\tif (wasEnabled && !this.isEnabled()) this.invalidateActiveReview(\"watchdog disabled\");\n\t\treturn this.configResult;\n\t}\n\n\tsetSessionEnabled(enabled: boolean, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = enabled;\n\t\tthis.reset(\"session override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tsetSessionModel(patch: { model?: string | null; thinking?: WatchdogEndpointConfig[\"thinking\"] | null }, cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tconst next = { ...(this.sessionModelOverride ?? {}) };\n\t\tif (patch.model === null) delete next.model;\n\t\telse if (patch.model !== undefined) next.model = patch.model;\n\t\tif (patch.thinking === null) delete next.thinking;\n\t\telse if (patch.thinking !== undefined) next.thinking = patch.thinking;\n\t\tthis.sessionModelOverride = next.model === undefined && next.thinking === undefined ? undefined : next;\n\t\tthis.reset(\"session model override\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionModel(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session model override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\tclearSessionOverride(cwd = this.cwd): WatchdogRuntimeSnapshot {\n\t\tthis.sessionOverrideEnabled = undefined;\n\t\tthis.sessionModelOverride = undefined;\n\t\tthis.reset(\"session override cleared\");\n\t\tthis.refreshConfig(cwd);\n\t\treturn this.getSnapshot();\n\t}\n\n\treset(_reason = \"reset\", options: { clearReviewInputSignature?: boolean; resetChangeSignature?: boolean; clearLspLedger?: boolean } = {}): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.includeUserPromptInNextDelta = false;\n\t\tthis.userPrompt = undefined;\n\t\tthis.lastError = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tif (options.clearLspLedger) {\n\t\t\tthis.lspLedger.reset();\n\t\t\tthis.lastLspSnapshot = undefined;\n\t\t}\n\t\tif (options.clearReviewInputSignature) this.lastReviewInputSignature = undefined;\n\t\tif (options.resetChangeSignature) this.resetRepoChangeBaseline({ reviewed: true });\n\t\tthis.guard.reset();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.lastReviewInputSignature = undefined;\n\t\tthis.currentChangedPaths = undefined;\n\t\tthis.lastLspSnapshot = undefined;\n\t\tthis.lspLedger.reset();\n\t\tthis.observedRepoEditThisTurn = false;\n\t\tthis.resolveWaiters(false);\n\t}\n\n\thandleBeforeAgentStart(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.reset(\"before_agent_start\");\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tthis.userPrompt = promptFromBeforeAgentStart(event);\n\t\tthis.includeUserPromptInNextDelta = Boolean(this.userPrompt?.trim());\n\t\tthis.resetRepoChangeBaseline();\n\t}\n\n\thandleTurnEnd(event: unknown, ctx: ContextLike): void {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\ttry {\n\t\t\tthis.observedRepoEditThisTurn ||= eventIndicatesRepoEdit(event);\n\t\t\tconst delta = formatWatchdogTurnDelta({\n\t\t\t\tincludeUserPrompt: this.includeUserPromptInNextDelta,\n\t\t\t\tuserPrompt: this.userPrompt,\n\t\t\t\tevents: [event],\n\t\t\t});\n\t\t\tthis.includeUserPromptInNextDelta = false;\n\t\t\tthis.enqueueDelta(delta);\n\t\t} catch (error) {\n\t\t\tthis.fail(`Failed to format watchdog turn delta: ${errorMessage(error)}`);\n\t\t}\n\t}\n\n\tenqueueDelta(delta: string): void {\n\t\tif (this.disposed || !delta.trim() || !this.isEnabled()) return;\n\t\tthis.appendBoundedDelta(delta);\n\t\tif (!this.reviewing && !this.waitingAtAgentEnd) this.status = \"queued\";\n\t}\n\n\tasync handleAgentEnd(_event: unknown, ctx: ContextLike): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.refreshConfig(ctx.cwd);\n\t\tif (!this.isEnabled()) return;\n\t\tconst changeSignature = this.resolveReviewChangeSignature(ctx.cwd);\n\t\tif (this.reviewChangesOnly && !changeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tif (changeSignature && changeSignature.key === this.lastReviewedChangeSignature) {\n\t\t\tthis.clearPendingDeltas();\n\t\t\tthis.status = \"idle\";\n\t\t\tthis.resolveWaiters(true);\n\t\t\treturn;\n\t\t}\n\t\tthis.waitingAtAgentEnd = true;\n\t\tconst agentEndEpoch = this.epoch;\n\t\tconst agentEndId = ++this.agentEndIdCounter;\n\t\tconst lspAbortController = new AbortController();\n\t\tthis.activeAgentEndId = agentEndId;\n\t\tthis.activeAgentEndAbortController = lspAbortController;\n\t\ttry {\n\t\t\tthis.guard.startModelUpdate();\n\t\t\tconst lspBlock = await this.collectLspDiagnostics(changeSignature, {\n\t\t\t\tepoch: agentEndEpoch,\n\t\t\t\tagentEndId,\n\t\t\t\tsignal: lspAbortController.signal,\n\t\t\t});\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (!this.isAgentEndCurrent(agentEndEpoch, agentEndId)) return;\n\t\t\tconst delta = this.buildReviewInput(changeSignature, lspBlock);\n\t\t\tthis.clearPendingDeltas();\n\t\t\tif (!delta.trim()) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tif (this.status === \"queued\") this.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst signature = reviewInputSignature(delta);\n\t\t\tif (!this.reviewChangesOnly && signature === this.lastReviewInputSignature) {\n\t\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst outcome = await this.reviewDelta(delta, this.configResult.config.agentEndTimeoutMs);\n\t\t\tthis.waitingAtAgentEnd = false;\n\t\t\tif (outcome === \"timeout\") {\n\t\t\t\tthis.staleReviews++;\n\t\t\t\tthis.invalidateActiveReview(\"agent-end timeout\");\n\t\t\t\tthis.status = \"stale\";\n\t\t\t\tthis.markLastWarningStale();\n\t\t\t\tthis.resolveWaiters(true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (outcome === \"completed\" && this.status !== \"failed\" && this.status !== \"stale\") {\n\t\t\t\tthis.lastReviewInputSignature = signature;\n\t\t\t\tif (changeSignature) this.lastReviewedChangeSignature = changeSignature.key;\n\t\t\t\tthis.currentChangedPaths = changeSignature?.changedPaths;\n\t\t\t\tthis.status = \"idle\";\n\t\t\t}\n\t\t\tthis.resolveWaiters(true);\n\t\t} finally {\n\t\t\tif (this.activeAgentEndAbortController === lspAbortController) this.activeAgentEndAbortController = undefined;\n\t\t\tif (this.activeAgentEndId === agentEndId) this.activeAgentEndId = undefined;\n\t\t}\n\t}\n\n\trecordDisplayedWarning(warning: WatchdogWarning): WatchdogWarningDetails {\n\t\tconst details = normalizeWatchdogWarningDetails(warning, { state: \"displayed\", source: warning.source ?? \"main\" });\n\t\tthis.lastWarning = details;\n\t\treturn details;\n\t}\n\n\tgetSnapshot(cwd?: string): WatchdogRuntimeSnapshot {\n\t\tif (cwd) this.refreshConfig(cwd);\n\t\treturn {\n\t\t\tstatus: this.status,\n\t\t\tenabled: this.isEnabled(),\n\t\t\tconfig: this.configResult.config,\n\t\t\tconfigOk: this.configResult.ok,\n\t\t\terrors: [...this.configResult.errors],\n\t\t\tsources: [...this.configResult.sources],\n\t\t\tbufferedDeltas: this.pendingDeltas.length,\n\t\t\tepoch: this.epoch,\n\t\t\t...(this.activeReviewId !== undefined ? { activeReviewId: this.activeReviewId } : {}),\n\t\t\t...(this.sessionOverrideEnabled !== undefined ? { sessionOverride: this.sessionOverrideEnabled } : {}),\n\t\t\t...(this.sessionModelOverride !== undefined ? { sessionModelOverride: { ...this.sessionModelOverride } } : {}),\n\t\t\t...(this.lastWarning ? { lastWarning: this.lastWarning } : {}),\n\t\t\t...(this.lastError ? { lastError: this.lastError } : {}),\n\t\t\tfailedReviews: this.failedReviews,\n\t\t\tstaleReviews: this.staleReviews,\n\t\t\treviewConnected: this.reviewConnected,\n\t\t\treviewDescription: this.reviewDescription,\n\t\t\tautoFollowQueued: false,\n\t\t\treviewTrigger: this.reviewChangesOnly ? \"repo-edits\" : \"turn-delta\",\n\t\t\t...(this.currentChangedPaths?.length ? { changedPaths: [...this.currentChangedPaths] } : {}),\n\t\t\tlsp: this.lspSnapshot(),\n\t\t};\n\t}\n\n\tasync waitForIdle(timeoutMs = 1_000): Promise<boolean> {\n\t\treturn this.waitForSettled(timeoutMs);\n\t}\n\n\tprivate isEnabled(): boolean {\n\t\treturn this.configResult.ok && this.configResult.config.main.enabled;\n\t}\n\n\tprivate abortActiveAgentEnd(): void {\n\t\tthis.activeAgentEndAbortController?.abort();\n\t\tthis.activeAgentEndAbortController = undefined;\n\t\tthis.activeAgentEndId = undefined;\n\t}\n\n\tprivate isAgentEndCurrent(epoch: number, agentEndId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeAgentEndId === agentEndId && this.waitingAtAgentEnd && this.isEnabled();\n\t}\n\n\tprivate isCurrent(epoch: number, reviewId: number): boolean {\n\t\treturn !this.disposed && this.epoch === epoch && this.activeReviewId === reviewId;\n\t}\n\n\tprivate acceptWarning(epoch: number, reviewId: number, warning: WatchdogWarning): boolean {\n\t\tif (!this.isCurrent(epoch, reviewId) || !this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"candidate\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.activeReviewWarning = details;\n\t\treturn true;\n\t}\n\n\tprivate displayBoundaryWarning(warning: WatchdogWarning): boolean {\n\t\tif (!this.isEnabled()) return false;\n\t\tconst decision = this.guard.evaluate(warning);\n\t\tif (!decision.accepted) return false;\n\t\tconst details = normalizeWatchdogWarningDetails(warning, {\n\t\t\tstate: \"displayed\",\n\t\t\tsource: warning.source ?? \"main\",\n\t\t\tidentity: decision.identity,\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t});\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t\treturn true;\n\t}\n\n\tprivate invalidateActiveReview(_reason: string): void {\n\t\tthis.abortActiveAgentEnd();\n\t\tthis.epoch++;\n\t\tthis.status = \"idle\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.reviewing = false;\n\t\tthis.waitingAtAgentEnd = false;\n\t\tthis.activeReviewId = undefined;\n\t\tthis.activeReviewWarning = undefined;\n\t}\n\n\tprivate async reviewDelta(delta: string, timeoutMs: number): Promise<ReviewDeltaOutcome> {\n\t\tif (this.reviewing || this.disposed) return \"stale\";\n\t\tthis.reviewing = true;\n\t\tconst reviewEpoch = this.epoch;\n\t\tconst reviewId = ++this.reviewIdCounter;\n\t\tthis.activeReviewId = reviewId;\n\t\tthis.activeReviewWarning = undefined;\n\t\tthis.status = \"reviewing\";\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tconst abortController = new AbortController();\n\t\tconst reviewPromise = Promise.resolve().then(() => this.review({\n\t\t\tdelta,\n\t\t\tepoch: reviewEpoch,\n\t\t\treviewId,\n\t\t\tconfig: this.configResult.config,\n\t\t\tsignal: abortController.signal,\n\t\t\temitWarning: (warning) => this.acceptWarning(reviewEpoch, reviewId, warning),\n\t\t}));\n\t\ttry {\n\t\t\tconst result = await Promise.race([\n\t\t\t\treviewPromise,\n\t\t\t\tnew Promise<\"timeout\">((resolve) => {\n\t\t\t\t\ttimeout = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tif (result === \"timeout\") {\n\t\t\t\tabortController.abort();\n\t\t\t\treturn \"timeout\";\n\t\t\t}\n\t\t\tif (!this.isCurrent(reviewEpoch, reviewId)) return \"stale\";\n\t\t\tfor (const warning of result?.warnings ?? []) this.acceptWarning(reviewEpoch, reviewId, warning);\n\t\t\tif (result?.stopReason && result.stopReason !== \"stop\") {\n\t\t\t\tthis.fail(`Watchdog review ended with stop reason '${result.stopReason}'.`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\tthis.displayAcceptedReviewWarning();\n\t\t\treturn \"completed\";\n\t\t} catch (error) {\n\t\t\tif (this.isCurrent(reviewEpoch, reviewId)) {\n\t\t\t\tthis.fail(`Watchdog review failed: ${errorMessage(error)}`);\n\t\t\t\treturn \"completed\";\n\t\t\t}\n\t\t\treturn \"stale\";\n\t\t} finally {\n\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\tif (this.epoch === reviewEpoch && this.activeReviewId === reviewId) {\n\t\t\t\tthis.reviewing = false;\n\t\t\t\tthis.activeReviewId = undefined;\n\t\t\t\tthis.activeReviewWarning = undefined;\n\t\t\t}\n\t\t\tthis.resolveWaiters(this.isSettled());\n\t\t}\n\t}\n\n\tprivate displayAcceptedReviewWarning(): void {\n\t\tif (!this.activeReviewWarning) return;\n\t\tconst details: WatchdogWarningDetails = {\n\t\t\t...this.activeReviewWarning,\n\t\t\tstate: \"displayed\",\n\t\t\tdisplayedAt: new Date().toISOString(),\n\t\t};\n\t\tthis.lastWarning = details;\n\t\tthis.displayWarning?.(details);\n\t}\n\n\tprivate currentRepoChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\treturn this.reviewChangesOnly ? computeWatchdogRepoChangeSignature(cwd) : undefined;\n\t}\n\n\tprivate resetRepoChangeBaseline(options: { cwd?: string; reviewed?: boolean } = {}): void {\n\t\tthis.turnStartChangeSignature = this.currentRepoChangeSignature(options.cwd ?? this.cwd);\n\t\tif (options.reviewed) this.lastReviewedChangeSignature = this.turnStartChangeSignature?.key;\n\t\telse this.lastReviewedChangeSignature ??= this.turnStartChangeSignature?.key;\n\t\tthis.currentChangedPaths = this.turnStartChangeSignature?.changedPaths;\n\t\tthis.observedRepoEditThisTurn = false;\n\t}\n\n\tprivate resolveReviewChangeSignature(cwd = this.cwd): WatchdogRepoChangeSignature | undefined {\n\t\tif (!this.reviewChangesOnly) return undefined;\n\t\tconst current = this.currentRepoChangeSignature(cwd);\n\t\tif (current) {\n\t\t\tthis.currentChangedPaths = current.changedPaths;\n\t\t\tif (current.key === this.turnStartChangeSignature?.key) return undefined;\n\t\t\tif (current.changedPaths.length === 0) return undefined;\n\t\t\treturn current;\n\t\t}\n\t\treturn this.observedRepoEditThisTurn\n\t\t\t? { root: cwd, key: `observed-edit:${this.epoch}:${this.reviewIdCounter}:${this.pendingDeltaChars}`, changedPaths: [] }\n\t\t\t: undefined;\n\t}\n\n\tprivate async collectLspDiagnostics(changeSignature: WatchdogRepoChangeSignature | undefined, current: { epoch: number; agentEndId: number; signal: AbortSignal }): Promise<string> {\n\t\tconst config = this.configResult.config.lsp;\n\t\tif (!config.enabled || !changeSignature?.changedPaths.length) {\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: config.enabled,\n\t\t\t\tstatus: config.enabled ? \"skipped\" : \"disabled\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: [],\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t\ttry {\n\t\t\tconst raw = await this.lspDiagnostics({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\troot: changeSignature.root,\n\t\t\t\tchangedPaths: changeSignature.changedPaths,\n\t\t\t\tconfig,\n\t\t\t\tsignal: current.signal,\n\t\t\t});\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tconst diagnosticCount = raw.diagnostics.length;\n\t\t\tconst fresh = this.lspLedger.reduce(raw);\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\t...fresh,\n\t\t\t\tenabled: true,\n\t\t\t\tdiagnosticCount,\n\t\t\t\tfreshDiagnosticCount: fresh.diagnostics.length,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\tconst warning = watchdogWarningFromLspDiagnostics(fresh);\n\t\t\tif (warning) this.displayBoundaryWarning(warning);\n\t\t\treturn formatWatchdogLspDiagnosticsBlock(fresh);\n\t\t} catch (error) {\n\t\t\tif (!this.isAgentEndCurrent(current.epoch, current.agentEndId)) return \"\";\n\t\t\tthis.lastLspSnapshot = {\n\t\t\t\tenabled: true,\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tcheckedPaths: [],\n\t\t\t\tskippedPaths: changeSignature.changedPaths,\n\t\t\t\tdiagnostics: [],\n\t\t\t\tdiagnosticCount: 0,\n\t\t\t\tfreshDiagnosticCount: 0,\n\t\t\t\tmessage: `LSP diagnostics failed: ${errorMessage(error)}`,\n\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t};\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tprivate lspSnapshot(): WatchdogLspRuntimeSnapshot {\n\t\tif (this.lastLspSnapshot) return {\n\t\t\t...this.lastLspSnapshot,\n\t\t\tcheckedPaths: [...this.lastLspSnapshot.checkedPaths],\n\t\t\tskippedPaths: [...this.lastLspSnapshot.skippedPaths],\n\t\t\tdiagnostics: [...this.lastLspSnapshot.diagnostics],\n\t\t};\n\t\tconst enabled = this.isEnabled() && this.configResult.config.lsp.enabled;\n\t\treturn {\n\t\t\tenabled,\n\t\t\tstatus: enabled ? \"skipped\" : \"disabled\",\n\t\t\tcheckedPaths: [],\n\t\t\tskippedPaths: [],\n\t\t\tdiagnostics: [],\n\t\t\tdiagnosticCount: 0,\n\t\t\tfreshDiagnosticCount: 0,\n\t\t};\n\t}\n\n\tprivate appendBoundedDelta(delta: string): void {\n\t\tlet entry = delta.trim();\n\t\tif (!entry) return;\n\t\tif (entry.length > MAX_REVIEW_INPUT_CHARS) entry = entry.slice(-MAX_REVIEW_INPUT_CHARS);\n\t\tthis.pendingDeltas.push(entry);\n\t\tthis.pendingDeltaChars += entry.length;\n\t\twhile (this.pendingDeltas.length > 1 && this.pendingDeltaChars + (this.pendingDeltas.length - 1) * REVIEW_DELTA_SEPARATOR.length > MAX_REVIEW_INPUT_CHARS) {\n\t\t\tconst removed = this.pendingDeltas.shift();\n\t\t\tif (removed) this.pendingDeltaChars -= removed.length;\n\t\t}\n\t}\n\n\tprivate buildReviewInput(changeSignature?: WatchdogRepoChangeSignature, lspBlock = \"\"): string {\n\t\tconst input = this.pendingDeltas.join(REVIEW_DELTA_SEPARATOR);\n\t\tconst changes = changeSignature?.changedPaths.length\n\t\t\t? [\"Changed repo paths:\", ...changeSignature.changedPaths.slice(0, 200).map((file) => `- ${file}`)].join(\"\\n\")\n\t\t\t: \"\";\n\t\tconst contextPieces = [changes, lspBlock].filter(Boolean);\n\t\tif (!contextPieces.length) return input.length > MAX_REVIEW_INPUT_CHARS ? input.slice(-MAX_REVIEW_INPUT_CHARS) : input;\n\n\t\tconst maxContextLength = Math.floor(MAX_REVIEW_INPUT_CHARS / 2);\n\t\tconst maxPieceLength = Math.max(1_000, Math.floor(maxContextLength / contextPieces.length));\n\t\tconst boundedContext = contextPieces.map((piece) => piece.length > maxPieceLength\n\t\t\t? `${piece.slice(0, maxPieceLength - 6)}\\n- ...`\n\t\t\t: piece).join(REVIEW_DELTA_SEPARATOR);\n\t\tconst separatorLength = input ? REVIEW_DELTA_SEPARATOR.length : 0;\n\t\tconst inputBudget = MAX_REVIEW_INPUT_CHARS - boundedContext.length - separatorLength;\n\t\tconst boundedInput = inputBudget <= 0\n\t\t\t? \"\"\n\t\t\t: input.length > inputBudget\n\t\t\t\t? input.slice(-inputBudget)\n\t\t\t\t: input;\n\t\treturn [boundedContext, boundedInput].filter(Boolean).join(REVIEW_DELTA_SEPARATOR);\n\t}\n\n\tprivate clearPendingDeltas(): void {\n\t\tthis.pendingDeltas = [];\n\t\tthis.pendingDeltaChars = 0;\n\t}\n\n\tprivate fail(message: string): void {\n\t\tthis.failedReviews++;\n\t\tthis.lastError = message;\n\t\tthis.status = \"failed\";\n\t\tthis.clearPendingDeltas();\n\t\tthis.resolveWaiters(true);\n\t}\n\n\tprivate markLastWarningStale(): void {\n\t\tif (!this.lastWarning || this.lastWarning.state === \"displayed\") return;\n\t\tthis.lastWarning = { ...this.lastWarning, stale: true, state: \"stale\" };\n\t}\n\n\tprivate isSettled(): boolean {\n\t\treturn !this.reviewing && this.pendingDeltas.length === 0;\n\t}\n\n\tprivate waitForSettled(timeoutMs: number): Promise<boolean> {\n\t\tif (this.isSettled()) return Promise.resolve(true);\n\t\treturn new Promise((resolve) => {\n\t\t\tconst waiter: Waiter = {\n\t\t\t\tresolve,\n\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\tthis.waiters = this.waiters.filter((entry) => entry !== waiter);\n\t\t\t\t\tresolve(false);\n\t\t\t\t}, timeoutMs),\n\t\t\t};\n\t\t\tthis.waiters.push(waiter);\n\t\t});\n\t}\n\n\tprivate resolveWaiters(settled: boolean): void {\n\t\tif (!settled && !this.disposed) return;\n\t\tconst waiters = this.waiters;\n\t\tthis.waiters = [];\n\t\tfor (const waiter of waiters) {\n\t\t\tclearTimeout(waiter.timer);\n\t\t\twaiter.resolve(settled);\n\t\t}\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
- import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
1
+ import type { AgentToolResult } from "@ashx-j/lunr-agent";
2
+ import type { ExtensionContext } from "@ashx-j/lunr";
3
3
  import type { Details } from "../shared/types.ts";
4
4
  import type { MainWatchdogRuntime } from "./runtime.ts";
5
5
  interface WatchdogToolParams {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-actions.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,UAAU,kBAAkB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AA6FD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,CAyCnK;AAED,eAAO,MAAM,qBAAqB,kGAAmG,CAAC;AACtI,eAAO,MAAM,wBAAwB,iFAA2C,CAAC","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
1
+ {"version":3,"file":"tool-actions.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,UAAU,kBAAkB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AA6FD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,CAyCnK;AAED,eAAO,MAAM,qBAAqB,kGAAmG,CAAC;AACtI,eAAO,MAAM,wBAAwB,iFAA2C,CAAC","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-actions.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
1
+ {"version":3,"file":"tool-actions.js","sourceRoot":"","sources":["../../../../../src/builtin-extensions/pi-subagents/src/watchdog/tool-actions.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { THINKING_LEVELS, type ThinkingLevel } from \"../shared/model-info.ts\";\nimport type { Details } from \"../shared/types.ts\";\nimport { buildWatchdogStatus } from \"./register-main.ts\";\nimport type { MainWatchdogRuntime } from \"./runtime.ts\";\nimport { parseWatchdogThinkingInput, recommendStrongWatchdogModel, resolveWatchdogModelInput } from \"./model-selection.ts\";\nimport { writeWatchdogModelSettings, type WatchdogModelSettingsTarget, type WatchdogSettingsWriteScope } from \"./settings.ts\";\n\ninterface WatchdogToolParams {\n\taction?: string;\n\tscope?: string;\n\ttarget?: string;\n\tagent?: string;\n\tmodel?: string;\n\tthinking?: string | false;\n\tcwd?: string;\n}\n\nfunction result(text: string, isError = false): AgentToolResult<Details> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text }],\n\t\t...(isError ? { isError: true } : {}),\n\t\tdetails: { mode: \"management\", results: [] },\n\t};\n}\n\nfunction messageFromError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction parseScope(raw: string | undefined): \"session\" | WatchdogSettingsWriteScope {\n\tif (raw === undefined || raw === \"session\") return \"session\";\n\tif (raw === \"user\" || raw === \"project\") return raw;\n\tthrow new Error(\"watchdog.configure scope must be 'session', 'user', or 'project'.\");\n}\n\nfunction parseTarget(params: WatchdogToolParams): WatchdogModelSettingsTarget {\n\tconst target = params.target ?? \"main\";\n\tif (target === \"main\") return { kind: \"main\" };\n\tif (target === \"children\") return { kind: \"children\" };\n\tif (target === \"child\") {\n\t\tif (!params.agent?.trim()) throw new Error(\"watchdog.configure target='child' requires agent.\");\n\t\treturn { kind: \"child\", agent: params.agent.trim() };\n\t}\n\tthrow new Error(\"watchdog.configure target must be 'main', 'children', or 'child'.\");\n}\n\nfunction parseThinking(raw: string | false | undefined): ThinkingLevel | false | null | undefined {\n\tif (raw === undefined) return undefined;\n\tif (raw === \"inherit\") return null;\n\treturn parseWatchdogThinkingInput(raw, \"watchdog.configure thinking\") ?? undefined;\n}\n\nfunction resolveConfiguredValue(ctx: ExtensionContext, params: WatchdogToolParams): { model?: string | null; thinking?: ThinkingLevel | false | null; description: string } {\n\tconst thinking = parseThinking(params.thinking);\n\tconst rawModel = params.model?.trim();\n\tif (!rawModel) {\n\t\tif (thinking === undefined) throw new Error(\"watchdog.configure requires model, thinking, or both.\");\n\t\treturn { thinking, description: `thinking ${thinking === null ? \"inherit\" : thinking === false ? \"off\" : thinking}` };\n\t}\n\tif (rawModel === \"inherit\") return { model: null, thinking: thinking ?? null, description: \"inherit\" };\n\tif (rawModel === \"recommended\") {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\treturn {\n\t\t\tmodel: recommendation.model,\n\t\t\tthinking: recommendation.thinking,\n\t\t\tdescription: `${recommendation.model}:${recommendation.thinking}`,\n\t\t};\n\t}\n\tconst resolved = resolveWatchdogModelInput(ctx, rawModel);\n\treturn {\n\t\tmodel: resolved.model,\n\t\tthinking: resolved.thinking ?? thinking,\n\t\tdescription: `${resolved.model}${resolved.thinking ?? thinking ? `:${resolved.thinking ?? thinking}` : \"\"}`,\n\t};\n}\n\nfunction buildRecommendationText(ctx: ExtensionContext): string {\n\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\treturn [\n\t\t\"Subagent watchdog recommended model\",\n\t\t`Recommended: ${recommendation.model}:${recommendation.thinking}`,\n\t\t`Reason: ${recommendation.reason}`,\n\t\t\"Apply temporarily with subagent({ action: \\\"watchdog.configure\\\", scope: \\\"session\\\", model: \\\"recommended\\\" }).\",\n\t\t\"Persist with scope: \\\"project\\\" or scope: \\\"user\\\" only when the user asks for that scope.\",\n\t].join(\"\\n\");\n}\n\nfunction buildCheckText(runtime: MainWatchdogRuntime | undefined, ctx: ExtensionContext): string {\n\tif (!runtime) return \"Subagent watchdog runtime is unavailable.\";\n\tconst snapshot = runtime.getSnapshot(ctx.cwd);\n\tif (!snapshot.configOk) return [\"Subagent watchdog config check\", \"Config errors:\", ...snapshot.errors.map((error) => `- ${error.message}`)].join(\"\\n\");\n\tconst lines = [\"Subagent watchdog config check\", \"Config: ok\"];\n\tif (snapshot.config.main.model) {\n\t\tconst resolved = resolveWatchdogModelInput(ctx, snapshot.config.main.model);\n\t\tlines.push(`Main model: ${resolved.model} auth ok`);\n\t} else {\n\t\tlines.push(\"Main model: current session\");\n\t}\n\tlines.push(`LSP diagnostics: ${snapshot.lsp.enabled ? \"on\" : \"off\"} · ${snapshot.lsp.status}`);\n\ttry {\n\t\tconst recommendation = recommendStrongWatchdogModel(ctx);\n\t\tlines.push(`Recommended strong watchdog: ${recommendation.model}:${recommendation.thinking}`);\n\t} catch (error) {\n\t\tlines.push(`Recommended strong watchdog unavailable: ${messageFromError(error)}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function handleWatchdogToolAction(action: string, params: WatchdogToolParams, ctx: ExtensionContext, runtime?: MainWatchdogRuntime): AgentToolResult<Details> {\n\ttry {\n\t\tif (action === \"watchdog.status\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\treturn result(buildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx));\n\t\t}\n\t\tif (action === \"watchdog.recommend-model\") return result(buildRecommendationText(ctx));\n\t\tif (action === \"watchdog.check\") return result(buildCheckText(runtime, ctx));\n\t\tif (action !== \"watchdog.configure\") return result(`Unknown watchdog action: ${action}`, true);\n\n\t\tconst scope = parseScope(params.scope);\n\t\tconst target = parseTarget(params);\n\t\tconst value = resolveConfiguredValue(ctx, params);\n\t\tif (scope === \"session\") {\n\t\t\tif (!runtime) return result(\"Subagent watchdog runtime is unavailable.\", true);\n\t\t\tif (target.kind !== \"main\") return result(\"Session-scoped watchdog.configure currently supports target='main' only.\", true);\n\t\t\truntime.setSessionModel({ model: value.model, thinking: value.thinking }, ctx.cwd);\n\t\t\treturn result([\n\t\t\t\t`Subagent watchdog session model configured: ${value.description}.`,\n\t\t\t\t\"No settings files were changed.\",\n\t\t\t\t\"\",\n\t\t\t\tbuildWatchdogStatus(runtime.getSnapshot(ctx.cwd), ctx),\n\t\t\t].join(\"\\n\"));\n\t\t}\n\n\t\tconst settingsPath = writeWatchdogModelSettings({\n\t\t\tscope,\n\t\t\tcwd: ctx.cwd,\n\t\t\ttarget,\n\t\t\tmodel: value.model,\n\t\t\tthinking: value.thinking,\n\t\t});\n\t\truntime?.refreshConfig(ctx.cwd);\n\t\tconst targetLabel = target.kind === \"child\" ? `child ${target.agent}` : target.kind;\n\t\treturn result([\n\t\t\t`Subagent watchdog ${targetLabel} model configured: ${value.description}.`,\n\t\t\t`Updated: ${settingsPath}`,\n\t\t].join(\"\\n\"));\n\t} catch (error) {\n\t\treturn result(`Subagent watchdog action failed: ${messageFromError(error)}`, true);\n\t}\n}\n\nexport const WATCHDOG_TOOL_ACTIONS = [\"watchdog.status\", \"watchdog.check\", \"watchdog.configure\", \"watchdog.recommend-model\"] as const;\nexport const WATCHDOG_THINKING_VALUES = [\"inherit\", ...THINKING_LEVELS] as const;\n"]}
@@ -1,3 +1,3 @@
1
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionAPI } from "@ashx-j/lunr";
2
2
  export default function (pi: ExtensionAPI): void;
3
3
  //# sourceMappingURL=pi-tps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pi-tps.d.ts","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAyBpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAsExC","sourcesContent":["import type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\n\n// ── Spinner frames for streaming animation ──\nconst spinner = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nlet spinnerIdx = 0;\nlet spinnerInterval: ReturnType<typeof setInterval> | null = null;\n\n// ── ANSI color helpers ──\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\nconst RESET = \"\\x1b[0m\";\n\nfunction colorForTps(tps: number): string {\n\tif (tps >= 100) return GREEN;\n\tif (tps >= 30) return YELLOW;\n\treturn RED;\n}\n\n// ── Compact token formatting ──\nfunction formatTokens(n: number): string {\n\tif (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n\treturn String(n);\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet messageStartTime = 0;\n\tlet lastAvgTps = 0;\n\tlet lastOutputTokens = 0;\n\tlet isStreaming = false;\n\n\tpi.on(\"agent_start\", async (_event, ctx) => {\n\t\tlastAvgTps = 0;\n\t\tlastOutputTokens = 0;\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"tps\", \"\");\n\t\t}\n\t});\n\n\tpi.on(\"message_start\", (event) => {\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tmessageStartTime = Date.now();\n\t\t\tisStreaming = true;\n\t\t\tspinnerIdx = 0;\n\t\t\t// Start spinner animation\n\t\t\tif (spinnerInterval) clearInterval(spinnerInterval);\n\t\t\tspinnerInterval = setInterval(() => {\n\t\t\t\tspinnerIdx = (spinnerIdx + 1) % spinner.length;\n\t\t\t}, 80);\n\t\t}\n\t});\n\n\tpi.on(\"message_update\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tif (!usage) return;\n\n\t\tconst outputTokens = usage.output;\n\t\tif (outputTokens === 0) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst tps = outputTokens / elapsed;\n\t\tconst color = colorForTps(tps);\n\t\tconst frame = spinner[spinnerIdx % spinner.length];\n\n\t\tctx.ui.setStatus(\"tps\", `${color}${frame} ${tps.toFixed(1)} t/s${RESET} ↓ ${formatTokens(outputTokens)} tokens`);\n\t});\n\n\tpi.on(\"message_end\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tconst outputTokens = usage?.output ?? 0;\n\n\t\tif (elapsed > 0 && outputTokens > 0) {\n\t\t\tlastAvgTps = outputTokens / elapsed;\n\t\t\tlastOutputTokens = outputTokens;\n\t\t}\n\n\t\t// Stop spinner\n\t\tisStreaming = false;\n\t\tif (spinnerInterval) {\n\t\t\tclearInterval(spinnerInterval);\n\t\t\tspinnerInterval = null;\n\t\t}\n\n\t\tsetImmediate(() => {\n\t\t\tconst color = colorForTps(lastAvgTps);\n\t\t\tctx.ui.setStatus(\"tps\", `${color}✓ ${lastAvgTps.toFixed(1)} t/s · ${formatTokens(lastOutputTokens)} tokens in ${elapsed.toFixed(1)}s${RESET}`);\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"pi-tps.d.ts","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAyBpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAsExC","sourcesContent":["import type { ExtensionAPI } from \"@ashx-j/lunr\";\n\n// ── Spinner frames for streaming animation ──\nconst spinner = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nlet spinnerIdx = 0;\nlet spinnerInterval: ReturnType<typeof setInterval> | null = null;\n\n// ── ANSI color helpers ──\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\nconst RESET = \"\\x1b[0m\";\n\nfunction colorForTps(tps: number): string {\n\tif (tps >= 100) return GREEN;\n\tif (tps >= 30) return YELLOW;\n\treturn RED;\n}\n\n// ── Compact token formatting ──\nfunction formatTokens(n: number): string {\n\tif (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n\treturn String(n);\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet messageStartTime = 0;\n\tlet lastAvgTps = 0;\n\tlet lastOutputTokens = 0;\n\tlet isStreaming = false;\n\n\tpi.on(\"agent_start\", async (_event, ctx) => {\n\t\tlastAvgTps = 0;\n\t\tlastOutputTokens = 0;\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"tps\", \"\");\n\t\t}\n\t});\n\n\tpi.on(\"message_start\", (event) => {\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tmessageStartTime = Date.now();\n\t\t\tisStreaming = true;\n\t\t\tspinnerIdx = 0;\n\t\t\t// Start spinner animation\n\t\t\tif (spinnerInterval) clearInterval(spinnerInterval);\n\t\t\tspinnerInterval = setInterval(() => {\n\t\t\t\tspinnerIdx = (spinnerIdx + 1) % spinner.length;\n\t\t\t}, 80);\n\t\t}\n\t});\n\n\tpi.on(\"message_update\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tif (!usage) return;\n\n\t\tconst outputTokens = usage.output;\n\t\tif (outputTokens === 0) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst tps = outputTokens / elapsed;\n\t\tconst color = colorForTps(tps);\n\t\tconst frame = spinner[spinnerIdx % spinner.length];\n\n\t\tctx.ui.setStatus(\"tps\", `${color}${frame} ${tps.toFixed(1)} t/s${RESET} ↓ ${formatTokens(outputTokens)} tokens`);\n\t});\n\n\tpi.on(\"message_end\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tconst outputTokens = usage?.output ?? 0;\n\n\t\tif (elapsed > 0 && outputTokens > 0) {\n\t\t\tlastAvgTps = outputTokens / elapsed;\n\t\t\tlastOutputTokens = outputTokens;\n\t\t}\n\n\t\t// Stop spinner\n\t\tisStreaming = false;\n\t\tif (spinnerInterval) {\n\t\t\tclearInterval(spinnerInterval);\n\t\t\tspinnerInterval = null;\n\t\t}\n\n\t\tsetImmediate(() => {\n\t\t\tconst color = colorForTps(lastAvgTps);\n\t\t\tctx.ui.setStatus(\"tps\", `${color}✓ ${lastAvgTps.toFixed(1)} t/s · ${formatTokens(lastOutputTokens)} tokens in ${elapsed.toFixed(1)}s${RESET}`);\n\t\t});\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pi-tps.js","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI } from \"@earendil-works/pi-coding-agent\";\n\n// ── Spinner frames for streaming animation ──\nconst spinner = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nlet spinnerIdx = 0;\nlet spinnerInterval: ReturnType<typeof setInterval> | null = null;\n\n// ── ANSI color helpers ──\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\nconst RESET = \"\\x1b[0m\";\n\nfunction colorForTps(tps: number): string {\n\tif (tps >= 100) return GREEN;\n\tif (tps >= 30) return YELLOW;\n\treturn RED;\n}\n\n// ── Compact token formatting ──\nfunction formatTokens(n: number): string {\n\tif (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n\treturn String(n);\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet messageStartTime = 0;\n\tlet lastAvgTps = 0;\n\tlet lastOutputTokens = 0;\n\tlet isStreaming = false;\n\n\tpi.on(\"agent_start\", async (_event, ctx) => {\n\t\tlastAvgTps = 0;\n\t\tlastOutputTokens = 0;\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"tps\", \"\");\n\t\t}\n\t});\n\n\tpi.on(\"message_start\", (event) => {\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tmessageStartTime = Date.now();\n\t\t\tisStreaming = true;\n\t\t\tspinnerIdx = 0;\n\t\t\t// Start spinner animation\n\t\t\tif (spinnerInterval) clearInterval(spinnerInterval);\n\t\t\tspinnerInterval = setInterval(() => {\n\t\t\t\tspinnerIdx = (spinnerIdx + 1) % spinner.length;\n\t\t\t}, 80);\n\t\t}\n\t});\n\n\tpi.on(\"message_update\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tif (!usage) return;\n\n\t\tconst outputTokens = usage.output;\n\t\tif (outputTokens === 0) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst tps = outputTokens / elapsed;\n\t\tconst color = colorForTps(tps);\n\t\tconst frame = spinner[spinnerIdx % spinner.length];\n\n\t\tctx.ui.setStatus(\"tps\", `${color}${frame} ${tps.toFixed(1)} t/s${RESET} ↓ ${formatTokens(outputTokens)} tokens`);\n\t});\n\n\tpi.on(\"message_end\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tconst outputTokens = usage?.output ?? 0;\n\n\t\tif (elapsed > 0 && outputTokens > 0) {\n\t\t\tlastAvgTps = outputTokens / elapsed;\n\t\t\tlastOutputTokens = outputTokens;\n\t\t}\n\n\t\t// Stop spinner\n\t\tisStreaming = false;\n\t\tif (spinnerInterval) {\n\t\t\tclearInterval(spinnerInterval);\n\t\t\tspinnerInterval = null;\n\t\t}\n\n\t\tsetImmediate(() => {\n\t\t\tconst color = colorForTps(lastAvgTps);\n\t\t\tctx.ui.setStatus(\"tps\", `${color}✓ ${lastAvgTps.toFixed(1)} t/s · ${formatTokens(lastOutputTokens)} tokens in ${elapsed.toFixed(1)}s${RESET}`);\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"pi-tps.js","sourceRoot":"","sources":["../../src/builtin-extensions/pi-tps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI } from \"@ashx-j/lunr\";\n\n// ── Spinner frames for streaming animation ──\nconst spinner = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nlet spinnerIdx = 0;\nlet spinnerInterval: ReturnType<typeof setInterval> | null = null;\n\n// ── ANSI color helpers ──\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\nconst RESET = \"\\x1b[0m\";\n\nfunction colorForTps(tps: number): string {\n\tif (tps >= 100) return GREEN;\n\tif (tps >= 30) return YELLOW;\n\treturn RED;\n}\n\n// ── Compact token formatting ──\nfunction formatTokens(n: number): string {\n\tif (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n\treturn String(n);\n}\n\nexport default function (pi: ExtensionAPI) {\n\tlet messageStartTime = 0;\n\tlet lastAvgTps = 0;\n\tlet lastOutputTokens = 0;\n\tlet isStreaming = false;\n\n\tpi.on(\"agent_start\", async (_event, ctx) => {\n\t\tlastAvgTps = 0;\n\t\tlastOutputTokens = 0;\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setStatus(\"tps\", \"\");\n\t\t}\n\t});\n\n\tpi.on(\"message_start\", (event) => {\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tmessageStartTime = Date.now();\n\t\t\tisStreaming = true;\n\t\t\tspinnerIdx = 0;\n\t\t\t// Start spinner animation\n\t\t\tif (spinnerInterval) clearInterval(spinnerInterval);\n\t\t\tspinnerInterval = setInterval(() => {\n\t\t\t\tspinnerIdx = (spinnerIdx + 1) % spinner.length;\n\t\t\t}, 80);\n\t\t}\n\t});\n\n\tpi.on(\"message_update\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tif (!usage) return;\n\n\t\tconst outputTokens = usage.output;\n\t\tif (outputTokens === 0) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst tps = outputTokens / elapsed;\n\t\tconst color = colorForTps(tps);\n\t\tconst frame = spinner[spinnerIdx % spinner.length];\n\n\t\tctx.ui.setStatus(\"tps\", `${color}${frame} ${tps.toFixed(1)} t/s${RESET} ↓ ${formatTokens(outputTokens)} tokens`);\n\t});\n\n\tpi.on(\"message_end\", (event, ctx) => {\n\t\tif (event.message.role !== \"assistant\") return;\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst elapsed = (Date.now() - messageStartTime) / 1000;\n\t\tconst usage = (event.message as { usage?: { output: number } }).usage;\n\t\tconst outputTokens = usage?.output ?? 0;\n\n\t\tif (elapsed > 0 && outputTokens > 0) {\n\t\t\tlastAvgTps = outputTokens / elapsed;\n\t\t\tlastOutputTokens = outputTokens;\n\t\t}\n\n\t\t// Stop spinner\n\t\tisStreaming = false;\n\t\tif (spinnerInterval) {\n\t\t\tclearInterval(spinnerInterval);\n\t\t\tspinnerInterval = null;\n\t\t}\n\n\t\tsetImmediate(() => {\n\t\t\tconst color = colorForTps(lastAvgTps);\n\t\t\tctx.ui.setStatus(\"tps\", `${color}✓ ${lastAvgTps.toFixed(1)} t/s · ${formatTokens(lastOutputTokens)} tokens in ${elapsed.toFixed(1)}s${RESET}`);\n\t\t});\n\t});\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionContext } from "@ashx-j/lunr";
2
2
  import { type SearchResponse, type SearchOptions } from "./perplexity.ts";
3
3
  export type SearchProvider = "auto" | "openai" | "brave" | "parallel" | "tavily" | "perplexity" | "gemini" | "exa";
4
4
  export type ResolvedSearchProvider = Exclude<SearchProvider, "auto">;
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-search.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-web-access/gemini-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAAkE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ1I,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC/D,QAAQ,EAAE,sBAAsB,CAAC;CACjC;AAiDD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAgDD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4I9G","sourcesContent":["// @ts-nocheck\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { activityMonitor } from \"./activity.ts\";\nimport { getApiKey, getVersionedApiBase, buildKeyParam, buildAuthHeaders, isGatewayConfigured, DEFAULT_MODEL } from \"./gemini-api.ts\";\nimport { isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { isPerplexityAvailable, searchWithPerplexity, type SearchResult, type SearchResponse, type SearchOptions } from \"./perplexity.ts\";\nimport { hasExaApiKey, isExaAvailable, searchWithExa } from \"./exa.ts\";\nimport { isBraveAvailable, searchWithBrave } from \"./brave.ts\";\nimport { isOpenAISearchAvailable, searchWithOpenAI } from \"./openai-search.ts\";\nimport { isParallelAvailable, searchWithParallel } from \"./parallel.ts\";\nimport { isTavilyAvailable, searchWithTavily } from \"./tavily.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nexport type SearchProvider = \"auto\" | \"openai\" | \"brave\" | \"parallel\" | \"tavily\" | \"perplexity\" | \"gemini\" | \"exa\";\nexport type ResolvedSearchProvider = Exclude<SearchProvider, \"auto\">;\n\nexport interface AttributedSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider;\n}\n\nconst CONFIG_PATH = getWebSearchConfigPath();\n\nlet cachedSearchConfig: { searchProvider: SearchProvider; searchModel?: string } | null = null;\n\nfunction getSearchConfig(): { searchProvider: SearchProvider; searchModel?: string } {\n\tif (cachedSearchConfig) return cachedSearchConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedSearchConfig = { searchProvider: \"auto\", searchModel: undefined };\n\t\treturn cachedSearchConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: {\n\t\tsearchProvider?: SearchProvider;\n\t\tprovider?: SearchProvider;\n\t\tsearchModel?: unknown;\n\t};\n\ttry {\n\t\traw = JSON.parse(rawText) as {\n\t\t\tsearchProvider?: SearchProvider;\n\t\t\tprovider?: SearchProvider;\n\t\t\tsearchModel?: unknown;\n\t\t};\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\n\tcachedSearchConfig = {\n\t\tsearchProvider: normalizeSearchProvider(raw.searchProvider ?? raw.provider),\n\t\tsearchModel: normalizeSearchModel(raw.searchModel),\n\t};\n\treturn cachedSearchConfig;\n}\n\nfunction normalizeSearchModel(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeSearchProvider(value: unknown): SearchProvider {\n\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\tconst valid: SearchProvider[] = [\"auto\", \"openai\", \"brave\", \"parallel\", \"tavily\", \"perplexity\", \"gemini\", \"exa\"];\n\treturn valid.includes(normalized as SearchProvider) ? normalized as SearchProvider : \"auto\";\n}\n\nexport interface FullSearchOptions extends SearchOptions {\n\tprovider?: SearchProvider;\n\tincludeContent?: boolean;\n\textensionContext?: ExtensionContext;\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction isAbortError(err: unknown): boolean {\n\treturn errorMessage(err).toLowerCase().includes(\"abort\");\n}\n\nfunction shouldTryOpenAIInAuto(options: SearchOptions): boolean {\n\tif (options.recencyFilter) return false;\n\tif (typeof options.numResults === \"number\" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nasync function searchWithGemini(\n\tquery: string,\n\toptions: SearchOptions,\n\tstrictErrors: boolean,\n): Promise<SearchResponse | null> {\n\tconst errors: string[] = [];\n\n\ttry {\n\t\tconst apiResult = await searchWithGeminiApi(query, options);\n\t\tif (apiResult) return apiResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini API: ${errorMessage(err)}`);\n\t}\n\n\ttry {\n\t\tconst webResult = await searchWithGeminiWeb(query, options);\n\t\tif (webResult) return webResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini Web: ${errorMessage(err)}`);\n\t}\n\n\tif (strictErrors && errors.length > 0) {\n\t\tthrow new Error(`Gemini search failed:\\n - ${errors.join(\"\\n - \")}`);\n\t}\n\n\treturn null;\n}\n\nexport async function search(query: string, options: FullSearchOptions = {}): Promise<AttributedSearchResponse> {\n\tconst config = getSearchConfig();\n\tconst provider = options.provider ?? config.searchProvider;\n\n\tif (provider === \"openai\") {\n\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\treturn { ...result, provider: \"openai\" };\n\t}\n\n\tif (provider === \"brave\") {\n\t\tconst result = await searchWithBrave(query, options);\n\t\treturn { ...result, provider: \"brave\" };\n\t}\n\n\tif (provider === \"parallel\") {\n\t\tconst result = await searchWithParallel(query, options);\n\t\treturn { ...result, provider: \"parallel\" };\n\t}\n\n\tif (provider === \"tavily\") {\n\t\tconst result = await searchWithTavily(query, options);\n\t\treturn { ...result, provider: \"tavily\" };\n\t}\n\n\tif (provider === \"perplexity\") {\n\t\tconst result = await searchWithPerplexity(query, options);\n\t\treturn { ...result, provider: \"perplexity\" };\n\t}\n\n\tif (provider === \"gemini\") {\n\t\tconst result = await searchWithGemini(query, options, true);\n\t\tif (result) return { ...result, provider: \"gemini\" };\n\t\tthrow new Error(\n\t\t\t\"Gemini search unavailable. Either:\\n\" +\n\t\t\t` 1. Set GEMINI_API_KEY in ${CONFIG_PATH}\\n` +\n\t\t\t\" 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\t\" 3. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t\t);\n\t}\n\n\tif (provider === \"exa\") {\n\t\tconst exaApiKeyConfigured = hasExaApiKey();\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t\tif (exaApiKeyConfigured) {\n\t\t\t\tthrow new Error(\"Exa search returned no results.\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tif (message.toLowerCase().includes(\"abort\")) throw err;\n\t\t\tif (exaApiKeyConfigured) throw err;\n\t\t\t// No API key: allow provider fallback.\n\t\t}\n\t}\n\n\tconst fallbackErrors: string[] = [];\n\n\tif (shouldTryOpenAIInAuto(options)) {\n\t\ttry {\n\t\t\tif (await isOpenAISearchAvailable(options.extensionContext)) {\n\t\t\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\t\t\treturn { ...result, provider: \"openai\" };\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`OpenAI: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (provider !== \"exa\" && isExaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Exa: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isBraveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBrave(query, options);\n\t\t\treturn { ...result, provider: \"brave\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Brave: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isParallelAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithParallel(query, options);\n\t\t\treturn { ...result, provider: \"parallel\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Parallel: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTavilyAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTavily(query, options);\n\t\t\treturn { ...result, provider: \"tavily\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Tavily: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isPerplexityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithPerplexity(query, options);\n\t\t\treturn { ...result, provider: \"perplexity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Perplexity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst geminiResult = await searchWithGemini(query, options, false);\n\t\tif (geminiResult) return { ...geminiResult, provider: \"gemini\" };\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`Gemini: ${errorMessage(err)}`);\n\t}\n\n\tif (fallbackErrors.length > 0) {\n\t\tthrow new Error(`Auto provider search failed:\\n - ${fallbackErrors.join(\"\\n - \")}`);\n\t}\n\n\tthrow new Error(\n\t\t\"No search provider available. Either:\\n\" +\n\t\t\" 1. Use /login to sign in with a Codex subscription for OpenAI web search\\n\" +\n\t\t` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tavilyApiKey, perplexityApiKey, exaApiKey, geminiApiKey, or cloudflareApiKey in ${CONFIG_PATH}\\n` +\n\t\t\" 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TAVILY_API_KEY, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\\n\" +\n\t\t\" 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\" 5. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t);\n}\n\nasync function searchWithGeminiApi(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst apiKey = getApiKey();\n\tif (!apiKey && !isGatewayConfigured()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst model = getSearchConfig().searchModel ?? DEFAULT_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: query }] }],\n\t\t\ttools: [{ google_search: {} }],\n\t\t};\n\n\t\tconst res = await fetch(`${getVersionedApiBase()}/models/${model}:generateContent${buildKeyParam(apiKey)}`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\", ...buildAuthHeaders() },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(60000),\n\t\t\t\t...(options.signal ? [options.signal] : []),\n\t\t\t]),\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tthrow new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);\n\t\t}\n\n\t\tconst data = await res.json() as GeminiSearchResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst answer = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tconst metadata = data.candidates?.[0]?.groundingMetadata;\n\t\tconst results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);\n\n\t\tif (!answer && results.length === 0) return null;\n\t\treturn { answer, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nasync function searchWithGeminiWeb(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst prompt = buildSearchPrompt(query, options);\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst text = await queryWithCookies(prompt, cookies, {\n\t\t\tmodel: \"gemini-3-flash-preview\",\n\t\t\tsignal: options.signal,\n\t\t\ttimeoutMs: 60000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tconst results = extractSourceUrls(text);\n\t\treturn { answer: text, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nfunction buildSearchPrompt(query: string, options: SearchOptions): string {\n\tlet prompt = `Search the web and answer the following question. Include source URLs for your claims.\\nFormat your response as:\\n1. A direct answer to the question\\n2. Cited sources as markdown links\\n\\nQuestion: ${query}`;\n\n\tif (options.recencyFilter) {\n\t\tconst labels: Record<string, string> = {\n\t\t\tday: \"past 24 hours\",\n\t\t\tweek: \"past week\",\n\t\t\tmonth: \"past month\",\n\t\t\tyear: \"past year\",\n\t\t};\n\t\tprompt += `\\n\\nOnly include results from the ${labels[options.recencyFilter]}.`;\n\t}\n\n\tif (options.domainFilter?.length) {\n\t\tconst includes = options.domainFilter.filter(d => !d.startsWith(\"-\"));\n\t\tconst excludes = options.domainFilter.filter(d => d.startsWith(\"-\")).map(d => d.slice(1));\n\t\tif (includes.length) prompt += `\\n\\nOnly cite sources from: ${includes.join(\", \")}`;\n\t\tif (excludes.length) prompt += `\\n\\nDo not cite sources from: ${excludes.join(\", \")}`;\n\t}\n\n\treturn prompt;\n}\n\nfunction extractSourceUrls(markdown: string): SearchResult[] {\n\tconst results: SearchResult[] = [];\n\tconst seen = new Set<string>();\n\tconst linkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/g;\n\tfor (const match of markdown.matchAll(linkRegex)) {\n\t\tconst url = match[2];\n\t\tif (seen.has(url)) continue;\n\t\tseen.add(url);\n\t\tresults.push({ title: match[1], url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveGroundingChunks(\n\tchunks: GroundingChunk[] | undefined,\n\tsignal?: AbortSignal,\n): Promise<SearchResult[]> {\n\tif (!chunks?.length) return [];\n\n\tconst results: SearchResult[] = [];\n\tfor (const chunk of chunks) {\n\t\tif (!chunk.web) continue;\n\t\tconst title = chunk.web.title || \"\";\n\t\tlet url = chunk.web.uri || \"\";\n\n\t\tif (url.includes(\"vertexaisearch.cloud.google.com/grounding-api-redirect\")) {\n\t\t\tconst resolved = await resolveRedirect(url, signal);\n\t\t\tif (resolved) url = resolved;\n\t\t}\n\n\t\tif (url) results.push({ title, url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveRedirect(proxyUrl: string, signal?: AbortSignal): Promise<string | null> {\n\ttry {\n\t\tconst res = await fetch(proxyUrl, {\n\t\t\tmethod: \"HEAD\",\n\t\t\tredirect: \"manual\",\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(5000),\n\t\t\t\t...(signal ? [signal] : []),\n\t\t\t]),\n\t\t});\n\t\treturn res.headers.get(\"location\") || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface GeminiSearchResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\tgroundingMetadata?: {\n\t\t\twebSearchQueries?: string[];\n\t\t\tgroundingChunks?: GroundingChunk[];\n\t\t\tgroundingSupports?: Array<{\n\t\t\t\tsegment?: { startIndex?: number; endIndex?: number; text?: string };\n\t\t\t\tgroundingChunkIndices?: number[];\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n\ninterface GroundingChunk {\n\tweb?: { uri?: string; title?: string };\n}\n"]}
1
+ {"version":3,"file":"gemini-search.d.ts","sourceRoot":"","sources":["../../../src/builtin-extensions/pi-web-access/gemini-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAAkE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ1I,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAErE,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC/D,QAAQ,EAAE,sBAAsB,CAAC;CACjC;AAiDD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAgDD,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4I9G","sourcesContent":["// @ts-nocheck\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { ExtensionContext } from \"@ashx-j/lunr\";\nimport { activityMonitor } from \"./activity.ts\";\nimport { getApiKey, getVersionedApiBase, buildKeyParam, buildAuthHeaders, isGatewayConfigured, DEFAULT_MODEL } from \"./gemini-api.ts\";\nimport { isGeminiWebAvailable, queryWithCookies } from \"./gemini-web.ts\";\nimport { isPerplexityAvailable, searchWithPerplexity, type SearchResult, type SearchResponse, type SearchOptions } from \"./perplexity.ts\";\nimport { hasExaApiKey, isExaAvailable, searchWithExa } from \"./exa.ts\";\nimport { isBraveAvailable, searchWithBrave } from \"./brave.ts\";\nimport { isOpenAISearchAvailable, searchWithOpenAI } from \"./openai-search.ts\";\nimport { isParallelAvailable, searchWithParallel } from \"./parallel.ts\";\nimport { isTavilyAvailable, searchWithTavily } from \"./tavily.ts\";\nimport { getWebSearchConfigPath } from \"./utils.ts\";\n\nexport type SearchProvider = \"auto\" | \"openai\" | \"brave\" | \"parallel\" | \"tavily\" | \"perplexity\" | \"gemini\" | \"exa\";\nexport type ResolvedSearchProvider = Exclude<SearchProvider, \"auto\">;\n\nexport interface AttributedSearchResponse extends SearchResponse {\n\tprovider: ResolvedSearchProvider;\n}\n\nconst CONFIG_PATH = getWebSearchConfigPath();\n\nlet cachedSearchConfig: { searchProvider: SearchProvider; searchModel?: string } | null = null;\n\nfunction getSearchConfig(): { searchProvider: SearchProvider; searchModel?: string } {\n\tif (cachedSearchConfig) return cachedSearchConfig;\n\tif (!existsSync(CONFIG_PATH)) {\n\t\tcachedSearchConfig = { searchProvider: \"auto\", searchModel: undefined };\n\t\treturn cachedSearchConfig;\n\t}\n\n\tconst rawText = readFileSync(CONFIG_PATH, \"utf-8\");\n\tlet raw: {\n\t\tsearchProvider?: SearchProvider;\n\t\tprovider?: SearchProvider;\n\t\tsearchModel?: unknown;\n\t};\n\ttry {\n\t\traw = JSON.parse(rawText) as {\n\t\t\tsearchProvider?: SearchProvider;\n\t\t\tprovider?: SearchProvider;\n\t\t\tsearchModel?: unknown;\n\t\t};\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tthrow new Error(`Failed to parse ${CONFIG_PATH}: ${message}`);\n\t}\n\n\tcachedSearchConfig = {\n\t\tsearchProvider: normalizeSearchProvider(raw.searchProvider ?? raw.provider),\n\t\tsearchModel: normalizeSearchModel(raw.searchModel),\n\t};\n\treturn cachedSearchConfig;\n}\n\nfunction normalizeSearchModel(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeSearchProvider(value: unknown): SearchProvider {\n\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\tconst valid: SearchProvider[] = [\"auto\", \"openai\", \"brave\", \"parallel\", \"tavily\", \"perplexity\", \"gemini\", \"exa\"];\n\treturn valid.includes(normalized as SearchProvider) ? normalized as SearchProvider : \"auto\";\n}\n\nexport interface FullSearchOptions extends SearchOptions {\n\tprovider?: SearchProvider;\n\tincludeContent?: boolean;\n\textensionContext?: ExtensionContext;\n}\n\nfunction errorMessage(err: unknown): string {\n\treturn err instanceof Error ? err.message : String(err);\n}\n\nfunction isAbortError(err: unknown): boolean {\n\treturn errorMessage(err).toLowerCase().includes(\"abort\");\n}\n\nfunction shouldTryOpenAIInAuto(options: SearchOptions): boolean {\n\tif (options.recencyFilter) return false;\n\tif (typeof options.numResults === \"number\" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nasync function searchWithGemini(\n\tquery: string,\n\toptions: SearchOptions,\n\tstrictErrors: boolean,\n): Promise<SearchResponse | null> {\n\tconst errors: string[] = [];\n\n\ttry {\n\t\tconst apiResult = await searchWithGeminiApi(query, options);\n\t\tif (apiResult) return apiResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini API: ${errorMessage(err)}`);\n\t}\n\n\ttry {\n\t\tconst webResult = await searchWithGeminiWeb(query, options);\n\t\tif (webResult) return webResult;\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\terrors.push(`Gemini Web: ${errorMessage(err)}`);\n\t}\n\n\tif (strictErrors && errors.length > 0) {\n\t\tthrow new Error(`Gemini search failed:\\n - ${errors.join(\"\\n - \")}`);\n\t}\n\n\treturn null;\n}\n\nexport async function search(query: string, options: FullSearchOptions = {}): Promise<AttributedSearchResponse> {\n\tconst config = getSearchConfig();\n\tconst provider = options.provider ?? config.searchProvider;\n\n\tif (provider === \"openai\") {\n\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\treturn { ...result, provider: \"openai\" };\n\t}\n\n\tif (provider === \"brave\") {\n\t\tconst result = await searchWithBrave(query, options);\n\t\treturn { ...result, provider: \"brave\" };\n\t}\n\n\tif (provider === \"parallel\") {\n\t\tconst result = await searchWithParallel(query, options);\n\t\treturn { ...result, provider: \"parallel\" };\n\t}\n\n\tif (provider === \"tavily\") {\n\t\tconst result = await searchWithTavily(query, options);\n\t\treturn { ...result, provider: \"tavily\" };\n\t}\n\n\tif (provider === \"perplexity\") {\n\t\tconst result = await searchWithPerplexity(query, options);\n\t\treturn { ...result, provider: \"perplexity\" };\n\t}\n\n\tif (provider === \"gemini\") {\n\t\tconst result = await searchWithGemini(query, options, true);\n\t\tif (result) return { ...result, provider: \"gemini\" };\n\t\tthrow new Error(\n\t\t\t\"Gemini search unavailable. Either:\\n\" +\n\t\t\t` 1. Set GEMINI_API_KEY in ${CONFIG_PATH}\\n` +\n\t\t\t\" 2. Set GOOGLE_GEMINI_BASE_URL + CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\t\" 3. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t\t);\n\t}\n\n\tif (provider === \"exa\") {\n\t\tconst exaApiKeyConfigured = hasExaApiKey();\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t\tif (exaApiKeyConfigured) {\n\t\t\t\tthrow new Error(\"Exa search returned no results.\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tif (message.toLowerCase().includes(\"abort\")) throw err;\n\t\t\tif (exaApiKeyConfigured) throw err;\n\t\t\t// No API key: allow provider fallback.\n\t\t}\n\t}\n\n\tconst fallbackErrors: string[] = [];\n\n\tif (shouldTryOpenAIInAuto(options)) {\n\t\ttry {\n\t\t\tif (await isOpenAISearchAvailable(options.extensionContext)) {\n\t\t\t\tconst result = await searchWithOpenAI(query, options, options.extensionContext);\n\t\t\t\treturn { ...result, provider: \"openai\" };\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`OpenAI: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (provider !== \"exa\" && isExaAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithExa(query, options);\n\t\t\tif (result) return { ...result, provider: \"exa\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Exa: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isBraveAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithBrave(query, options);\n\t\t\treturn { ...result, provider: \"brave\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Brave: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isParallelAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithParallel(query, options);\n\t\t\treturn { ...result, provider: \"parallel\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Parallel: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isTavilyAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithTavily(query, options);\n\t\t\treturn { ...result, provider: \"tavily\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Tavily: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\tif (isPerplexityAvailable()) {\n\t\ttry {\n\t\t\tconst result = await searchWithPerplexity(query, options);\n\t\t\treturn { ...result, provider: \"perplexity\" };\n\t\t} catch (err) {\n\t\t\tif (isAbortError(err)) throw err;\n\t\t\tfallbackErrors.push(`Perplexity: ${errorMessage(err)}`);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst geminiResult = await searchWithGemini(query, options, false);\n\t\tif (geminiResult) return { ...geminiResult, provider: \"gemini\" };\n\t} catch (err) {\n\t\tif (isAbortError(err)) throw err;\n\t\tfallbackErrors.push(`Gemini: ${errorMessage(err)}`);\n\t}\n\n\tif (fallbackErrors.length > 0) {\n\t\tthrow new Error(`Auto provider search failed:\\n - ${fallbackErrors.join(\"\\n - \")}`);\n\t}\n\n\tthrow new Error(\n\t\t\"No search provider available. Either:\\n\" +\n\t\t\" 1. Use /login to sign in with a Codex subscription for OpenAI web search\\n\" +\n\t\t` 2. Set openaiApiKey, braveApiKey, parallelApiKey, tavilyApiKey, perplexityApiKey, exaApiKey, geminiApiKey, or cloudflareApiKey in ${CONFIG_PATH}\\n` +\n\t\t\" 3. Set OPENAI_API_KEY, BRAVE_API_KEY, PARALLEL_API_KEY, TAVILY_API_KEY, EXA_API_KEY, PERPLEXITY_API_KEY, GEMINI_API_KEY, or CLOUDFLARE_API_KEY env vars\\n\" +\n\t\t\" 4. Set GOOGLE_GEMINI_BASE_URL with CLOUDFLARE_API_KEY for Cloudflare AI Gateway routing\\n\" +\n\t\t\" 5. Sign into gemini.google.com in a supported Chromium-based browser\"\n\t);\n}\n\nasync function searchWithGeminiApi(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst apiKey = getApiKey();\n\tif (!apiKey && !isGatewayConfigured()) return null;\n\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst model = getSearchConfig().searchModel ?? DEFAULT_MODEL;\n\t\tconst body = {\n\t\t\tcontents: [{ role: \"user\", parts: [{ text: query }] }],\n\t\t\ttools: [{ google_search: {} }],\n\t\t};\n\n\t\tconst res = await fetch(`${getVersionedApiBase()}/models/${model}:generateContent${buildKeyParam(apiKey)}`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\", ...buildAuthHeaders() },\n\t\t\tbody: JSON.stringify(body),\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(60000),\n\t\t\t\t...(options.signal ? [options.signal] : []),\n\t\t\t]),\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tconst errorText = await res.text();\n\t\t\tthrow new Error(`Gemini API error ${res.status}: ${errorText.slice(0, 300)}`);\n\t\t}\n\n\t\tconst data = await res.json() as GeminiSearchResponse;\n\t\tactivityMonitor.logComplete(activityId, res.status);\n\n\t\tconst answer = data.candidates?.[0]?.content?.parts\n\t\t\t?.map(p => p.text).filter(Boolean).join(\"\\n\") ?? \"\";\n\n\t\tconst metadata = data.candidates?.[0]?.groundingMetadata;\n\t\tconst results = await resolveGroundingChunks(metadata?.groundingChunks, options.signal);\n\n\t\tif (!answer && results.length === 0) return null;\n\t\treturn { answer, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nasync function searchWithGeminiWeb(query: string, options: SearchOptions = {}): Promise<SearchResponse | null> {\n\tconst cookies = await isGeminiWebAvailable();\n\tif (!cookies) return null;\n\n\tconst prompt = buildSearchPrompt(query, options);\n\tconst activityId = activityMonitor.logStart({ type: \"api\", query });\n\n\ttry {\n\t\tconst text = await queryWithCookies(prompt, cookies, {\n\t\t\tmodel: \"gemini-3-flash-preview\",\n\t\t\tsignal: options.signal,\n\t\t\ttimeoutMs: 60000,\n\t\t});\n\n\t\tactivityMonitor.logComplete(activityId, 200);\n\n\t\tconst results = extractSourceUrls(text);\n\t\treturn { answer: text, results };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tif (message.toLowerCase().includes(\"abort\")) {\n\t\t\tactivityMonitor.logComplete(activityId, 0);\n\t\t} else {\n\t\t\tactivityMonitor.logError(activityId, message);\n\t\t}\n\t\tthrow err;\n\t}\n}\n\nfunction buildSearchPrompt(query: string, options: SearchOptions): string {\n\tlet prompt = `Search the web and answer the following question. Include source URLs for your claims.\\nFormat your response as:\\n1. A direct answer to the question\\n2. Cited sources as markdown links\\n\\nQuestion: ${query}`;\n\n\tif (options.recencyFilter) {\n\t\tconst labels: Record<string, string> = {\n\t\t\tday: \"past 24 hours\",\n\t\t\tweek: \"past week\",\n\t\t\tmonth: \"past month\",\n\t\t\tyear: \"past year\",\n\t\t};\n\t\tprompt += `\\n\\nOnly include results from the ${labels[options.recencyFilter]}.`;\n\t}\n\n\tif (options.domainFilter?.length) {\n\t\tconst includes = options.domainFilter.filter(d => !d.startsWith(\"-\"));\n\t\tconst excludes = options.domainFilter.filter(d => d.startsWith(\"-\")).map(d => d.slice(1));\n\t\tif (includes.length) prompt += `\\n\\nOnly cite sources from: ${includes.join(\", \")}`;\n\t\tif (excludes.length) prompt += `\\n\\nDo not cite sources from: ${excludes.join(\", \")}`;\n\t}\n\n\treturn prompt;\n}\n\nfunction extractSourceUrls(markdown: string): SearchResult[] {\n\tconst results: SearchResult[] = [];\n\tconst seen = new Set<string>();\n\tconst linkRegex = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/g;\n\tfor (const match of markdown.matchAll(linkRegex)) {\n\t\tconst url = match[2];\n\t\tif (seen.has(url)) continue;\n\t\tseen.add(url);\n\t\tresults.push({ title: match[1], url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveGroundingChunks(\n\tchunks: GroundingChunk[] | undefined,\n\tsignal?: AbortSignal,\n): Promise<SearchResult[]> {\n\tif (!chunks?.length) return [];\n\n\tconst results: SearchResult[] = [];\n\tfor (const chunk of chunks) {\n\t\tif (!chunk.web) continue;\n\t\tconst title = chunk.web.title || \"\";\n\t\tlet url = chunk.web.uri || \"\";\n\n\t\tif (url.includes(\"vertexaisearch.cloud.google.com/grounding-api-redirect\")) {\n\t\t\tconst resolved = await resolveRedirect(url, signal);\n\t\t\tif (resolved) url = resolved;\n\t\t}\n\n\t\tif (url) results.push({ title, url, snippet: \"\" });\n\t}\n\treturn results;\n}\n\nasync function resolveRedirect(proxyUrl: string, signal?: AbortSignal): Promise<string | null> {\n\ttry {\n\t\tconst res = await fetch(proxyUrl, {\n\t\t\tmethod: \"HEAD\",\n\t\t\tredirect: \"manual\",\n\t\t\tsignal: AbortSignal.any([\n\t\t\t\tAbortSignal.timeout(5000),\n\t\t\t\t...(signal ? [signal] : []),\n\t\t\t]),\n\t\t});\n\t\treturn res.headers.get(\"location\") || null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\ninterface GeminiSearchResponse {\n\tcandidates?: Array<{\n\t\tcontent?: { parts?: Array<{ text?: string }> };\n\t\tgroundingMetadata?: {\n\t\t\twebSearchQueries?: string[];\n\t\t\tgroundingChunks?: GroundingChunk[];\n\t\t\tgroundingSupports?: Array<{\n\t\t\t\tsegment?: { startIndex?: number; endIndex?: number; text?: string };\n\t\t\t\tgroundingChunkIndices?: number[];\n\t\t\t}>;\n\t\t};\n\t}>;\n}\n\ninterface GroundingChunk {\n\tweb?: { uri?: string; title?: string };\n}\n"]}