@herbertgao/pi-extensions 2026.8.2 → 2026.8.3

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 (272) hide show
  1. package/README.md +9 -2
  2. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +6 -8
  3. package/node_modules/@herbertgao/pi-cc-extensions/README.md +5 -7
  4. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.en.svg +101 -0
  5. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +1 -17
  6. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +5 -3
  7. package/node_modules/@herbertgao/pi-cc-extensions/extensions/{utils/agent-summary.ts → feature/agent-summary/core.ts} +37 -35
  8. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{agent-summary.ts → agent-summary/index.ts} +2 -6
  9. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{session-reference.ts → reference/index.ts} +1 -1
  10. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{agent-autocomplete.ts → reference/subagent.ts} +19 -9
  11. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{pi-startup-header.ts → shell/startup-header.ts} +1 -1
  12. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{working-message.ts → shell/working-message.ts} +5 -2
  13. package/node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts +32 -28
  14. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +379 -85
  15. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +727 -0
  16. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/index.ts +65 -775
  17. package/node_modules/@herbertgao/pi-cc-extensions/extensions/{feature → renderer}/markdown-enhance.ts +35 -31
  18. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-hover.ts → mouse/hover.ts} +5 -5
  19. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-interaction.ts → mouse/interaction.ts} +34 -35
  20. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-layout.ts → mouse/layout.ts} +5 -21
  21. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-packets.ts → mouse/packets.ts} +1 -1
  22. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-scroll.ts → mouse/scroll.ts} +48 -37
  23. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/ansi-utils.ts +56 -1
  24. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/diff-renderer.ts +2 -2
  25. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/line-width-safety.ts +1 -1
  26. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-display-utils.ts +12 -0
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/write-execution.ts +1 -2
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-grouping.ts → tool/grouping.ts} +18 -8
  29. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-result.ts → tool/result.ts} +4 -13
  30. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/fullscreen-detect.ts +0 -27
  31. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
  32. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
  33. package/node_modules/@herbertgao/pi-subagents/package.json +2 -2
  34. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +1 -0
  35. package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +3 -1
  36. package/node_modules/@herbertgao/pi-subagents/src/index.ts +33 -35
  37. package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +26 -35
  38. package/node_modules/@herbertgao/pi-subagents/src/prompts.ts +15 -1
  39. package/node_modules/pi-mcp-adapter/CHANGELOG.md +19 -0
  40. package/node_modules/pi-mcp-adapter/README.md +19 -4
  41. package/node_modules/pi-mcp-adapter/agent-dir.ts +40 -0
  42. package/node_modules/pi-mcp-adapter/commands.ts +12 -2
  43. package/node_modules/pi-mcp-adapter/direct-tools.ts +6 -8
  44. package/node_modules/pi-mcp-adapter/index.ts +15 -3
  45. package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +87 -4
  46. package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +138 -61
  47. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +43 -4
  48. package/node_modules/pi-mcp-adapter/oauth.ts +48 -0
  49. package/node_modules/pi-mcp-adapter/package.json +8 -2
  50. package/node_modules/pi-mcp-adapter/proxy-modes.ts +8 -10
  51. package/node_modules/pi-mcp-adapter/tool-registrar.ts +187 -3
  52. package/node_modules/pi-mcp-adapter/types.ts +2 -0
  53. package/node_modules/pi-web-access/CHANGELOG.md +45 -0
  54. package/node_modules/pi-web-access/README.md +104 -29
  55. package/node_modules/pi-web-access/bocha.ts +221 -0
  56. package/node_modules/pi-web-access/curator-page.ts +113 -12
  57. package/node_modules/pi-web-access/curator-server.ts +56 -20
  58. package/node_modules/pi-web-access/datalab-pdf-extract.ts +568 -0
  59. package/node_modules/pi-web-access/duckduckgo.ts +123 -0
  60. package/node_modules/pi-web-access/extract.ts +288 -143
  61. package/node_modules/pi-web-access/feature-config.ts +29 -0
  62. package/node_modules/pi-web-access/gemini-api.ts +4 -0
  63. package/node_modules/pi-web-access/gemini-search.ts +45 -12
  64. package/node_modules/pi-web-access/gemini-web.ts +68 -3
  65. package/node_modules/pi-web-access/index.ts +160 -71
  66. package/node_modules/pi-web-access/jina-search.ts +284 -0
  67. package/node_modules/pi-web-access/kagi.ts +12 -12
  68. package/node_modules/pi-web-access/openai-search.ts +12 -2
  69. package/node_modules/pi-web-access/package.json +4 -3
  70. package/node_modules/pi-web-access/pdf-extract.ts +327 -228
  71. package/node_modules/pi-web-access/storage.ts +440 -2
  72. package/node_modules/pi-web-access/summary-model-scope.ts +1 -1
  73. package/node_modules/pi-web-access/summary-review.ts +4 -2
  74. package/node_modules/pi-web-access/video-extract.ts +10 -8
  75. package/node_modules/pi-web-access/xai-search.ts +12 -2
  76. package/node_modules/pi-web-access/youtube-extract.ts +2 -1
  77. package/node_modules/remote-pi/LICENSE +21 -0
  78. package/node_modules/remote-pi/README.md +675 -0
  79. package/node_modules/remote-pi/dist/actions/handlers.d.ts +122 -0
  80. package/node_modules/remote-pi/dist/actions/handlers.js +160 -0
  81. package/node_modules/remote-pi/dist/actions/handlers.js.map +1 -0
  82. package/node_modules/remote-pi/dist/actions/registry.d.ts +39 -0
  83. package/node_modules/remote-pi/dist/actions/registry.js +58 -0
  84. package/node_modules/remote-pi/dist/actions/registry.js.map +1 -0
  85. package/node_modules/remote-pi/dist/bin/supervisord.d.ts +2 -0
  86. package/node_modules/remote-pi/dist/bin/supervisord.js +86 -0
  87. package/node_modules/remote-pi/dist/bin/supervisord.js.map +1 -0
  88. package/node_modules/remote-pi/dist/commands/builtin_mirror.d.ts +58 -0
  89. package/node_modules/remote-pi/dist/commands/builtin_mirror.js +71 -0
  90. package/node_modules/remote-pi/dist/commands/builtin_mirror.js.map +1 -0
  91. package/node_modules/remote-pi/dist/commands/list_commands.d.ts +60 -0
  92. package/node_modules/remote-pi/dist/commands/list_commands.js +73 -0
  93. package/node_modules/remote-pi/dist/commands/list_commands.js.map +1 -0
  94. package/node_modules/remote-pi/dist/config.d.ts +62 -0
  95. package/node_modules/remote-pi/dist/config.js +115 -0
  96. package/node_modules/remote-pi/dist/config.js.map +1 -0
  97. package/node_modules/remote-pi/dist/daemon/client.d.ts +20 -0
  98. package/node_modules/remote-pi/dist/daemon/client.js +131 -0
  99. package/node_modules/remote-pi/dist/daemon/client.js.map +1 -0
  100. package/node_modules/remote-pi/dist/daemon/control_protocol.d.ts +176 -0
  101. package/node_modules/remote-pi/dist/daemon/control_protocol.js +63 -0
  102. package/node_modules/remote-pi/dist/daemon/control_protocol.js.map +1 -0
  103. package/node_modules/remote-pi/dist/daemon/cron_log.d.ts +45 -0
  104. package/node_modules/remote-pi/dist/daemon/cron_log.js +72 -0
  105. package/node_modules/remote-pi/dist/daemon/cron_log.js.map +1 -0
  106. package/node_modules/remote-pi/dist/daemon/cron_registry.d.ts +80 -0
  107. package/node_modules/remote-pi/dist/daemon/cron_registry.js +194 -0
  108. package/node_modules/remote-pi/dist/daemon/cron_registry.js.map +1 -0
  109. package/node_modules/remote-pi/dist/daemon/id.d.ts +24 -0
  110. package/node_modules/remote-pi/dist/daemon/id.js +36 -0
  111. package/node_modules/remote-pi/dist/daemon/id.js.map +1 -0
  112. package/node_modules/remote-pi/dist/daemon/install.d.ts +170 -0
  113. package/node_modules/remote-pi/dist/daemon/install.js +547 -0
  114. package/node_modules/remote-pi/dist/daemon/install.js.map +1 -0
  115. package/node_modules/remote-pi/dist/daemon/registry.d.ts +63 -0
  116. package/node_modules/remote-pi/dist/daemon/registry.js +153 -0
  117. package/node_modules/remote-pi/dist/daemon/registry.js.map +1 -0
  118. package/node_modules/remote-pi/dist/daemon/rpc_child.d.ts +194 -0
  119. package/node_modules/remote-pi/dist/daemon/rpc_child.js +389 -0
  120. package/node_modules/remote-pi/dist/daemon/rpc_child.js.map +1 -0
  121. package/node_modules/remote-pi/dist/daemon/supervisor.d.ts +93 -0
  122. package/node_modules/remote-pi/dist/daemon/supervisor.js +596 -0
  123. package/node_modules/remote-pi/dist/daemon/supervisor.js.map +1 -0
  124. package/node_modules/remote-pi/dist/extension_ui_bridge.d.ts +26 -0
  125. package/node_modules/remote-pi/dist/extension_ui_bridge.js +341 -0
  126. package/node_modules/remote-pi/dist/extension_ui_bridge.js.map +1 -0
  127. package/node_modules/remote-pi/dist/index.d.ts +213 -0
  128. package/node_modules/remote-pi/dist/index.js +4996 -0
  129. package/node_modules/remote-pi/dist/index.js.map +1 -0
  130. package/node_modules/remote-pi/dist/mcp/mesh_result.d.ts +10 -0
  131. package/node_modules/remote-pi/dist/mcp/mesh_result.js +42 -0
  132. package/node_modules/remote-pi/dist/mcp/mesh_result.js.map +1 -0
  133. package/node_modules/remote-pi/dist/mcp/mesh_server.d.ts +16 -0
  134. package/node_modules/remote-pi/dist/mcp/mesh_server.js +327 -0
  135. package/node_modules/remote-pi/dist/mcp/mesh_server.js.map +1 -0
  136. package/node_modules/remote-pi/dist/mesh/canonical.d.ts +30 -0
  137. package/node_modules/remote-pi/dist/mesh/canonical.js +61 -0
  138. package/node_modules/remote-pi/dist/mesh/canonical.js.map +1 -0
  139. package/node_modules/remote-pi/dist/mesh/client.d.ts +18 -0
  140. package/node_modules/remote-pi/dist/mesh/client.js +125 -0
  141. package/node_modules/remote-pi/dist/mesh/client.js.map +1 -0
  142. package/node_modules/remote-pi/dist/mesh/encoding.d.ts +38 -0
  143. package/node_modules/remote-pi/dist/mesh/encoding.js +216 -0
  144. package/node_modules/remote-pi/dist/mesh/encoding.js.map +1 -0
  145. package/node_modules/remote-pi/dist/mesh/self_revoke.d.ts +73 -0
  146. package/node_modules/remote-pi/dist/mesh/self_revoke.js +401 -0
  147. package/node_modules/remote-pi/dist/mesh/self_revoke.js.map +1 -0
  148. package/node_modules/remote-pi/dist/mesh/siblings.d.ts +49 -0
  149. package/node_modules/remote-pi/dist/mesh/siblings.js +159 -0
  150. package/node_modules/remote-pi/dist/mesh/siblings.js.map +1 -0
  151. package/node_modules/remote-pi/dist/mesh/types.d.ts +34 -0
  152. package/node_modules/remote-pi/dist/mesh/types.js +11 -0
  153. package/node_modules/remote-pi/dist/mesh/types.js.map +1 -0
  154. package/node_modules/remote-pi/dist/mesh/verify.d.ts +17 -0
  155. package/node_modules/remote-pi/dist/mesh/verify.js +86 -0
  156. package/node_modules/remote-pi/dist/mesh/verify.js.map +1 -0
  157. package/node_modules/remote-pi/dist/pairing/crypto.d.ts +8 -0
  158. package/node_modules/remote-pi/dist/pairing/crypto.js +22 -0
  159. package/node_modules/remote-pi/dist/pairing/crypto.js.map +1 -0
  160. package/node_modules/remote-pi/dist/pairing/handshake.d.ts +28 -0
  161. package/node_modules/remote-pi/dist/pairing/handshake.js +113 -0
  162. package/node_modules/remote-pi/dist/pairing/handshake.js.map +1 -0
  163. package/node_modules/remote-pi/dist/pairing/noise-sha256.d.ts +16 -0
  164. package/node_modules/remote-pi/dist/pairing/noise-sha256.js +103 -0
  165. package/node_modules/remote-pi/dist/pairing/noise-sha256.js.map +1 -0
  166. package/node_modules/remote-pi/dist/pairing/qr.d.ts +59 -0
  167. package/node_modules/remote-pi/dist/pairing/qr.js +125 -0
  168. package/node_modules/remote-pi/dist/pairing/qr.js.map +1 -0
  169. package/node_modules/remote-pi/dist/pairing/storage.d.ts +120 -0
  170. package/node_modules/remote-pi/dist/pairing/storage.js +604 -0
  171. package/node_modules/remote-pi/dist/pairing/storage.js.map +1 -0
  172. package/node_modules/remote-pi/dist/protocol/codec.d.ts +7 -0
  173. package/node_modules/remote-pi/dist/protocol/codec.js +49 -0
  174. package/node_modules/remote-pi/dist/protocol/codec.js.map +1 -0
  175. package/node_modules/remote-pi/dist/protocol/types.d.ts +393 -0
  176. package/node_modules/remote-pi/dist/protocol/types.js +2 -0
  177. package/node_modules/remote-pi/dist/protocol/types.js.map +1 -0
  178. package/node_modules/remote-pi/dist/rooms.d.ts +29 -0
  179. package/node_modules/remote-pi/dist/rooms.js +57 -0
  180. package/node_modules/remote-pi/dist/rooms.js.map +1 -0
  181. package/node_modules/remote-pi/dist/session/address.d.ts +49 -0
  182. package/node_modules/remote-pi/dist/session/address.js +58 -0
  183. package/node_modules/remote-pi/dist/session/address.js.map +1 -0
  184. package/node_modules/remote-pi/dist/session/agent_bridge.d.ts +55 -0
  185. package/node_modules/remote-pi/dist/session/agent_bridge.js +146 -0
  186. package/node_modules/remote-pi/dist/session/agent_bridge.js.map +1 -0
  187. package/node_modules/remote-pi/dist/session/bridge.d.ts +37 -0
  188. package/node_modules/remote-pi/dist/session/bridge.js +130 -0
  189. package/node_modules/remote-pi/dist/session/bridge.js.map +1 -0
  190. package/node_modules/remote-pi/dist/session/broker.d.ts +189 -0
  191. package/node_modules/remote-pi/dist/session/broker.js +507 -0
  192. package/node_modules/remote-pi/dist/session/broker.js.map +1 -0
  193. package/node_modules/remote-pi/dist/session/broker_remote.d.ts +74 -0
  194. package/node_modules/remote-pi/dist/session/broker_remote.js +583 -0
  195. package/node_modules/remote-pi/dist/session/broker_remote.js.map +1 -0
  196. package/node_modules/remote-pi/dist/session/cwd_lock.d.ts +33 -0
  197. package/node_modules/remote-pi/dist/session/cwd_lock.js +126 -0
  198. package/node_modules/remote-pi/dist/session/cwd_lock.js.map +1 -0
  199. package/node_modules/remote-pi/dist/session/envelope.d.ts +33 -0
  200. package/node_modules/remote-pi/dist/session/envelope.js +117 -0
  201. package/node_modules/remote-pi/dist/session/envelope.js.map +1 -0
  202. package/node_modules/remote-pi/dist/session/global_config.d.ts +33 -0
  203. package/node_modules/remote-pi/dist/session/global_config.js +73 -0
  204. package/node_modules/remote-pi/dist/session/global_config.js.map +1 -0
  205. package/node_modules/remote-pi/dist/session/ipc.d.ts +27 -0
  206. package/node_modules/remote-pi/dist/session/ipc.js +22 -0
  207. package/node_modules/remote-pi/dist/session/ipc.js.map +1 -0
  208. package/node_modules/remote-pi/dist/session/leader_election.d.ts +32 -0
  209. package/node_modules/remote-pi/dist/session/leader_election.js +106 -0
  210. package/node_modules/remote-pi/dist/session/leader_election.js.map +1 -0
  211. package/node_modules/remote-pi/dist/session/local_config.d.ts +55 -0
  212. package/node_modules/remote-pi/dist/session/local_config.js +157 -0
  213. package/node_modules/remote-pi/dist/session/local_config.js.map +1 -0
  214. package/node_modules/remote-pi/dist/session/mesh_message.d.ts +20 -0
  215. package/node_modules/remote-pi/dist/session/mesh_message.js +28 -0
  216. package/node_modules/remote-pi/dist/session/mesh_message.js.map +1 -0
  217. package/node_modules/remote-pi/dist/session/mesh_node.d.ts +116 -0
  218. package/node_modules/remote-pi/dist/session/mesh_node.js +573 -0
  219. package/node_modules/remote-pi/dist/session/mesh_node.js.map +1 -0
  220. package/node_modules/remote-pi/dist/session/peer.d.ts +139 -0
  221. package/node_modules/remote-pi/dist/session/peer.js +451 -0
  222. package/node_modules/remote-pi/dist/session/peer.js.map +1 -0
  223. package/node_modules/remote-pi/dist/session/peer_inventory.d.ts +13 -0
  224. package/node_modules/remote-pi/dist/session/peer_inventory.js +48 -0
  225. package/node_modules/remote-pi/dist/session/peer_inventory.js.map +1 -0
  226. package/node_modules/remote-pi/dist/session/peer_limits.d.ts +9 -0
  227. package/node_modules/remote-pi/dist/session/peer_limits.js +21 -0
  228. package/node_modules/remote-pi/dist/session/peer_limits.js.map +1 -0
  229. package/node_modules/remote-pi/dist/session/setup_wizard.d.ts +39 -0
  230. package/node_modules/remote-pi/dist/session/setup_wizard.js +63 -0
  231. package/node_modules/remote-pi/dist/session/setup_wizard.js.map +1 -0
  232. package/node_modules/remote-pi/dist/session/tool_gate.d.ts +5 -0
  233. package/node_modules/remote-pi/dist/session/tool_gate.js +11 -0
  234. package/node_modules/remote-pi/dist/session/tool_gate.js.map +1 -0
  235. package/node_modules/remote-pi/dist/session/tools.d.ts +24 -0
  236. package/node_modules/remote-pi/dist/session/tools.js +252 -0
  237. package/node_modules/remote-pi/dist/session/tools.js.map +1 -0
  238. package/node_modules/remote-pi/dist/session/wizard.d.ts +13 -0
  239. package/node_modules/remote-pi/dist/session/wizard.js +20 -0
  240. package/node_modules/remote-pi/dist/session/wizard.js.map +1 -0
  241. package/node_modules/remote-pi/dist/settings.d.ts +15 -0
  242. package/node_modules/remote-pi/dist/settings.js +52 -0
  243. package/node_modules/remote-pi/dist/settings.js.map +1 -0
  244. package/node_modules/remote-pi/dist/transport/peer_channel.d.ts +37 -0
  245. package/node_modules/remote-pi/dist/transport/peer_channel.js +98 -0
  246. package/node_modules/remote-pi/dist/transport/peer_channel.js.map +1 -0
  247. package/node_modules/remote-pi/dist/transport/pi_forward_client.d.ts +29 -0
  248. package/node_modules/remote-pi/dist/transport/pi_forward_client.js +62 -0
  249. package/node_modules/remote-pi/dist/transport/pi_forward_client.js.map +1 -0
  250. package/node_modules/remote-pi/dist/transport/relay_client.d.ts +91 -0
  251. package/node_modules/remote-pi/dist/transport/relay_client.js +206 -0
  252. package/node_modules/remote-pi/dist/transport/relay_client.js.map +1 -0
  253. package/node_modules/remote-pi/dist/ui/footer.d.ts +32 -0
  254. package/node_modules/remote-pi/dist/ui/footer.js +34 -0
  255. package/node_modules/remote-pi/dist/ui/footer.js.map +1 -0
  256. package/node_modules/remote-pi/docs/daemon.md +289 -0
  257. package/node_modules/remote-pi/package.json +88 -0
  258. package/node_modules/remote-pi/service-templates/launchd.plist.template +35 -0
  259. package/node_modules/remote-pi/service-templates/systemd.service.template +19 -0
  260. package/node_modules/remote-pi/service-templates/task-launcher.vbs.template +10 -0
  261. package/node_modules/remote-pi/service-templates/task-scheduler.xml.template +38 -0
  262. package/node_modules/remote-pi/skills/agent-network/SKILL.md +310 -0
  263. package/package.json +19 -9
  264. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool-diff/write-display-utils.ts +0 -29
  265. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{session-reference-core.ts → reference/session.ts} +0 -0
  266. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{pi-aliases.ts → shell/aliases.ts} +0 -0
  267. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/ATTRIBUTION.md +0 -0
  268. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/diff-presentation.ts +0 -0
  269. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/index.ts +0 -0
  270. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/render-utils.ts +0 -0
  271. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/shiki-highlight.ts +0 -0
  272. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/types.ts +0 -0
@@ -8,7 +8,7 @@ function safeInlineJSON(data: unknown): string {
8
8
  }
9
9
 
10
10
  function buildProviderButtons(
11
- available: { all: boolean; openai: boolean; brave: boolean; parallel: boolean; tinyfish: boolean; search1api: boolean; searchinfinity: boolean; querit: boolean; tavily: boolean; serpdive: boolean; kagi: boolean; ollama: boolean; searxng: boolean; perplexity: boolean; exa: boolean; gemini: boolean; anysearch: boolean; xai: boolean; brightdata: boolean; serpbase: boolean },
11
+ available: { all: boolean; openai: boolean; brave: boolean; parallel: boolean; tinyfish: boolean; search1api: boolean; searchinfinity: boolean; querit: boolean; tavily: boolean; jina: boolean; serpdive: boolean; kagi: boolean; bocha: boolean; ollama: boolean; searxng: boolean; duckduckgo: boolean; perplexity: boolean; exa: boolean; gemini: boolean; anysearch: boolean; xai: boolean; brightdata: boolean; serpbase: boolean },
12
12
  selected: string,
13
13
  hasInitialQueries: boolean,
14
14
  ): string {
@@ -23,10 +23,13 @@ function buildProviderButtons(
23
23
  { value: "searchinfinity", label: "Searchinfinity", available: available.searchinfinity },
24
24
  { value: "querit", label: "Querit", available: available.querit },
25
25
  { value: "tavily", label: "Tavily", available: available.tavily },
26
+ { value: "jina", label: "Jina", available: available.jina },
26
27
  { value: "serpdive", label: "SERPdive", available: available.serpdive },
27
28
  { value: "kagi", label: "Kagi", available: available.kagi },
29
+ { value: "bocha", label: "Bocha", available: available.bocha },
28
30
  { value: "ollama", label: "Ollama", available: available.ollama },
29
31
  { value: "searxng", label: "SearXNG", available: available.searxng },
32
+ { value: "duckduckgo", label: "DuckDuckGo", available: available.duckduckgo },
30
33
  { value: "perplexity", label: "Perplexity", available: available.perplexity },
31
34
  { value: "gemini", label: "Gemini", available: available.gemini },
32
35
  { value: "anysearch", label: "AnySearch", available: available.anysearch },
@@ -51,7 +54,7 @@ export function generateCuratorPage(
51
54
  queries: string[],
52
55
  sessionToken: string,
53
56
  timeout: number,
54
- availableProviders: { all: boolean; openai: boolean; brave: boolean; parallel: boolean; tinyfish: boolean; search1api: boolean; searchinfinity: boolean; querit: boolean; tavily: boolean; serpdive: boolean; kagi: boolean; ollama: boolean; searxng: boolean; perplexity: boolean; exa: boolean; gemini: boolean; anysearch: boolean; xai: boolean; brightdata: boolean; serpbase: boolean },
57
+ availableProviders: { all: boolean; openai: boolean; brave: boolean; parallel: boolean; tinyfish: boolean; search1api: boolean; searchinfinity: boolean; querit: boolean; tavily: boolean; jina: boolean; serpdive: boolean; kagi: boolean; bocha: boolean; ollama: boolean; searxng: boolean; duckduckgo: boolean; perplexity: boolean; exa: boolean; gemini: boolean; anysearch: boolean; xai: boolean; brightdata: boolean; serpbase: boolean },
55
58
  defaultProvider: string,
56
59
  searchProvider: string,
57
60
  summaryModels: Array<{ value: string; label: string }>,
@@ -714,6 +717,11 @@ main {
714
717
  background: rgba(166, 227, 161, 0.14);
715
718
  border-color: rgba(166, 227, 161, 0.3);
716
719
  }
720
+ .provider-tag.provider-jina {
721
+ color: #f9e2af;
722
+ background: rgba(249, 226, 175, 0.14);
723
+ border-color: rgba(249, 226, 175, 0.3);
724
+ }
717
725
  .provider-tag.provider-serpdive {
718
726
  color: #94e2d5;
719
727
  background: rgba(148, 226, 213, 0.14);
@@ -1447,7 +1455,7 @@ const SCRIPT = `(function() {
1447
1455
  var token = DATA.sessionToken;
1448
1456
  var timeoutSec = DATA.timeout;
1449
1457
  var queries = Array.isArray(DATA.queries) ? DATA.queries : [];
1450
- var providers = ["all", "openai", "exa", "brave", "parallel", "tinyfish", "search1api", "searchinfinity", "querit", "tavily", "serpdive", "kagi", "ollama", "searxng", "perplexity", "gemini", "anysearch", "xai", "brightdata", "serpbase"];
1458
+ var providers = ["all", "openai", "exa", "brave", "parallel", "tinyfish", "search1api", "searchinfinity", "querit", "tavily", "jina", "serpdive", "kagi", "bocha", "ollama", "searxng", "duckduckgo", "perplexity", "gemini", "anysearch", "xai", "brightdata", "serpbase"];
1451
1459
  var availProviders = DATA.availableProviders && typeof DATA.availableProviders === "object" ? DATA.availableProviders : {};
1452
1460
  var workflow = "summary-review";
1453
1461
  var initialDefaultProvider = typeof DATA.defaultProvider === "string" ? DATA.defaultProvider : "exa";
@@ -1475,6 +1483,9 @@ const SCRIPT = `(function() {
1475
1483
  var lastInteraction = Date.now();
1476
1484
  var completedCount = 0;
1477
1485
  var es = null;
1486
+ var lastLiveEventAt = Date.now();
1487
+ var stateSyncInFlight = false;
1488
+ var liveUpdateWarning = false;
1478
1489
 
1479
1490
  var allQueries = queries.map(function(query, slotId) { return { slotId: slotId, query: query }; });
1480
1491
  var nextSlotId = queries.length;
@@ -1656,10 +1667,13 @@ const SCRIPT = `(function() {
1656
1667
  if (provider === "searchinfinity") return "Searchinfinity";
1657
1668
  if (provider === "querit") return "Querit";
1658
1669
  if (provider === "tavily") return "Tavily";
1670
+ if (provider === "jina") return "Jina";
1659
1671
  if (provider === "serpdive") return "SERPdive";
1660
1672
  if (provider === "kagi") return "Kagi";
1673
+ if (provider === "bocha") return "Bocha";
1661
1674
  if (provider === "ollama") return "Ollama";
1662
1675
  if (provider === "searxng") return "SearXNG";
1676
+ if (provider === "duckduckgo") return "DuckDuckGo";
1663
1677
  if (provider === "perplexity") return "Perplexity";
1664
1678
  if (provider === "exa") return "Exa";
1665
1679
  if (provider === "gemini") return "Gemini";
@@ -1942,17 +1956,30 @@ const SCRIPT = `(function() {
1942
1956
  }
1943
1957
 
1944
1958
  function clearError() {
1959
+ liveUpdateWarning = false;
1945
1960
  if (!errorBanner) return;
1946
1961
  errorBanner.hidden = true;
1947
1962
  errorBanner.textContent = "";
1948
1963
  }
1949
1964
 
1950
1965
  function setError(text) {
1966
+ liveUpdateWarning = false;
1967
+ if (!errorBanner) return;
1968
+ errorBanner.textContent = text;
1969
+ errorBanner.hidden = false;
1970
+ }
1971
+
1972
+ function setLiveUpdateWarning(text) {
1973
+ liveUpdateWarning = true;
1951
1974
  if (!errorBanner) return;
1952
1975
  errorBanner.textContent = text;
1953
1976
  errorBanner.hidden = false;
1954
1977
  }
1955
1978
 
1979
+ function clearLiveUpdateWarning() {
1980
+ if (liveUpdateWarning) clearError();
1981
+ }
1982
+
1956
1983
  function updateSummaryGeneratingIndicator() {
1957
1984
  if (!summaryGeneratingCopy) return;
1958
1985
 
@@ -2749,9 +2776,10 @@ const SCRIPT = `(function() {
2749
2776
  }
2750
2777
  }
2751
2778
 
2752
- es.addEventListener("result", function(e) {
2753
- var data = parseSseEventData("result", e);
2779
+ function applyResultEvent(data) {
2754
2780
  if (!data) return;
2781
+ lastLiveEventAt = Date.now();
2782
+ clearLiveUpdateWarning();
2755
2783
 
2756
2784
  var queryText = data.query || queries[data.queryIndex] || "";
2757
2785
  var slotId = typeof data.slotIndex === "number" ? data.slotIndex : queryIndexToSlot.get(data.queryIndex);
@@ -2761,13 +2789,16 @@ const SCRIPT = `(function() {
2761
2789
  card = createSearchingCard(queryText, data.provider);
2762
2790
  card.dataset.qi = data.queryIndex;
2763
2791
  insertResultCard(card, slotId, null);
2792
+ } else if (card.dataset.completed === "true") {
2793
+ return;
2764
2794
  }
2765
2795
  applyResponseToCard(card, data, queryText, data.provider, slotId);
2766
- });
2796
+ }
2767
2797
 
2768
- es.addEventListener("search-error", function(e) {
2769
- var data = parseSseEventData("search-error", e);
2798
+ function applySearchErrorEvent(data) {
2770
2799
  if (!data) return;
2800
+ lastLiveEventAt = Date.now();
2801
+ clearLiveUpdateWarning();
2771
2802
 
2772
2803
  var queryText = data.query || queries[data.queryIndex] || "";
2773
2804
  var slotId = typeof data.slotIndex === "number" ? data.slotIndex : queryIndexToSlot.get(data.queryIndex);
@@ -2777,6 +2808,8 @@ const SCRIPT = `(function() {
2777
2808
  card = createSearchingCard(queryText, data.provider);
2778
2809
  card.dataset.qi = data.queryIndex;
2779
2810
  insertResultCard(card, slotId, null);
2811
+ } else if (card.dataset.completed === "true") {
2812
+ return;
2780
2813
  }
2781
2814
  applyResponseToCard(card, {
2782
2815
  queryIndex: data.queryIndex,
@@ -2785,9 +2818,12 @@ const SCRIPT = `(function() {
2785
2818
  error: data.error || "Search failed",
2786
2819
  provider: data.provider,
2787
2820
  }, queryText, data.provider, slotId);
2788
- });
2821
+ }
2789
2822
 
2790
- es.addEventListener("done", function() {
2823
+ function applyDoneEvent() {
2824
+ var wasSearchesDone = searchesDone;
2825
+ lastLiveEventAt = Date.now();
2826
+ clearLiveUpdateWarning();
2791
2827
  searchesDone = true;
2792
2828
  initialStreamDone = true;
2793
2829
  if (completedCount > 0) {
@@ -2797,13 +2833,78 @@ const SCRIPT = `(function() {
2797
2833
  recomputeProviderStates();
2798
2834
  updateStageUI();
2799
2835
  maybeAutoGenerateSummary();
2800
- resetTimer();
2836
+ if (!wasSearchesDone) resetTimer();
2837
+ }
2838
+
2839
+ function applyStoredLiveEvent(item) {
2840
+ if (!item || typeof item !== "object") return;
2841
+ if (item.event === "result") applyResultEvent(item.data);
2842
+ if (item.event === "search-error") applySearchErrorEvent(item.data);
2843
+ }
2844
+
2845
+ function syncStateFromServer(showWarning) {
2846
+ if (stateSyncInFlight || submitted || timerExpired || searchesDone) return;
2847
+ stateSyncInFlight = true;
2848
+ fetch("/state?session=" + encodeURIComponent(token), { cache: "no-store" })
2849
+ .then(function(res) {
2850
+ return res.text().then(function(raw) {
2851
+ var data = raw ? JSON.parse(raw) : null;
2852
+ if (!res.ok || !data || data.ok === false) {
2853
+ throw new Error(extractServerError(data) || ("HTTP " + res.status));
2854
+ }
2855
+ return data;
2856
+ });
2857
+ })
2858
+ .then(function(data) {
2859
+ if (Array.isArray(data.events)) {
2860
+ data.events.forEach(applyStoredLiveEvent);
2861
+ }
2862
+ if (data.done) applyDoneEvent();
2863
+ if (showWarning && !searchesDone) {
2864
+ setLiveUpdateWarning("Live search updates disconnected. Reconnecting and polling for results.");
2865
+ }
2866
+ })
2867
+ .catch(function(err) {
2868
+ if (!showWarning || submitted || timerExpired) return;
2869
+ var message = err instanceof Error ? err.message : String(err);
2870
+ setLiveUpdateWarning("Live search updates disconnected. Retrying: " + (message || "unknown error"));
2871
+ })
2872
+ .finally(function() {
2873
+ stateSyncInFlight = false;
2874
+ });
2875
+ }
2876
+
2877
+ es.addEventListener("open", function() {
2878
+ lastLiveEventAt = Date.now();
2879
+ clearLiveUpdateWarning();
2880
+ syncStateFromServer(false);
2881
+ });
2882
+
2883
+ es.addEventListener("result", function(e) {
2884
+ var data = parseSseEventData("result", e);
2885
+ applyResultEvent(data);
2886
+ });
2887
+
2888
+ es.addEventListener("search-error", function(e) {
2889
+ var data = parseSseEventData("search-error", e);
2890
+ applySearchErrorEvent(data);
2891
+ });
2892
+
2893
+ es.addEventListener("done", function() {
2894
+ applyDoneEvent();
2801
2895
  });
2802
2896
 
2803
2897
  es.onerror = function() {
2804
- // EventSource reconnects automatically.
2898
+ if (submitted || timerExpired || searchesDone) return;
2899
+ syncStateFromServer(true);
2805
2900
  };
2806
2901
 
2902
+ setInterval(function() {
2903
+ if (submitted || timerExpired || searchesDone || initialStreamDone) return;
2904
+ if (Date.now() - lastLiveEventAt <= 5000) return;
2905
+ syncStateFromServer(false);
2906
+ }, 5000);
2907
+
2807
2908
  function setupCardInteraction(card) {
2808
2909
  var header = card.querySelector(".result-card-header");
2809
2910
  var body = card.querySelector(".result-card-body");
@@ -8,12 +8,17 @@ const WATCHDOG_INTERVAL_MS = 1000;
8
8
  const MAX_BODY_SIZE = 64 * 1024;
9
9
 
10
10
  type ServerState = "SEARCHING" | "RESULT_SELECTION" | "COMPLETED";
11
+ type CuratorResultEventData = IndexedCuratorSearchEntry & { slotIndex?: number };
12
+ type CuratorSearchErrorEventData = { queryIndex: number; query: string; error: string; provider?: string; slotIndex?: number };
13
+ type CuratorStoredEvent =
14
+ | { event: "result"; data: CuratorResultEventData }
15
+ | { event: "search-error"; data: CuratorSearchErrorEventData };
11
16
 
12
17
  export interface CuratorServerOptions {
13
18
  queries: string[];
14
19
  sessionToken: string;
15
20
  timeout: number;
16
- availableProviders: { all: boolean; openai: boolean; brave: boolean; parallel: boolean; tinyfish: boolean; search1api: boolean; searchinfinity: boolean; querit: boolean; tavily: boolean; serpdive: boolean; kagi: boolean; ollama: boolean; searxng: boolean; perplexity: boolean; exa: boolean; gemini: boolean; anysearch: boolean; xai: boolean; brightdata: boolean; serpbase: boolean };
21
+ availableProviders: { all: boolean; openai: boolean; brave: boolean; parallel: boolean; tinyfish: boolean; search1api: boolean; searchinfinity: boolean; querit: boolean; tavily: boolean; jina: boolean; serpdive: boolean; kagi: boolean; bocha: boolean; ollama: boolean; searxng: boolean; duckduckgo: boolean; perplexity: boolean; exa: boolean; gemini: boolean; anysearch: boolean; xai: boolean; brightdata: boolean; serpbase: boolean };
17
22
  defaultProvider: string;
18
23
  searchProvider: string;
19
24
  summaryModels: Array<{ value: string; label: string }>;
@@ -205,7 +210,8 @@ export function startCuratorServer(
205
210
  let watchdog: NodeJS.Timeout | null = null;
206
211
  let state: ServerState = "SEARCHING";
207
212
  let sseResponse: ServerResponse | null = null;
208
- const sseBuffer: string[] = [];
213
+ const streamedEventsByResultIndex = new Map<number, CuratorStoredEvent>();
214
+ let searchStreamDone = queries.length === 0;
209
215
  let nextQueryIndex = queries.length;
210
216
  let summarizeAbortController: AbortController | null = null;
211
217
  let summarizeRequestSeq = 0;
@@ -274,10 +280,13 @@ export function startCuratorServer(
274
280
  if (provider === "searchinfinity") return availableProviders.searchinfinity;
275
281
  if (provider === "querit") return availableProviders.querit;
276
282
  if (provider === "tavily") return availableProviders.tavily;
283
+ if (provider === "jina") return availableProviders.jina;
277
284
  if (provider === "serpdive") return availableProviders.serpdive;
278
285
  if (provider === "kagi") return availableProviders.kagi;
286
+ if (provider === "bocha") return availableProviders.bocha;
279
287
  if (provider === "ollama") return availableProviders.ollama;
280
288
  if (provider === "searxng") return availableProviders.searxng;
289
+ if (provider === "duckduckgo") return availableProviders.duckduckgo;
281
290
  if (provider === "perplexity") return availableProviders.perplexity;
282
291
  if (provider === "exa") return availableProviders.exa;
283
292
  if (provider === "gemini") return availableProviders.gemini;
@@ -288,13 +297,35 @@ export function startCuratorServer(
288
297
  return false;
289
298
  }
290
299
 
291
- function sendSSE(event: string, data: unknown): void {
300
+ function writeSSE(res: ServerResponse, event: string, data: unknown): boolean {
292
301
  const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
302
+ try {
303
+ res.write(payload);
304
+ return true;
305
+ } catch {
306
+ return false;
307
+ }
308
+ }
309
+
310
+ function sendSSE(event: string, data: unknown): void {
293
311
  const res = sseResponse;
294
- if (res && !res.writableEnded && res.socket && !res.socket.destroyed) {
295
- try { res.write(payload); return; } catch {}
312
+ if (res && !res.writableEnded && res.socket && !res.socket.destroyed && writeSSE(res, event, data)) return;
313
+ if (sseResponse === res) sseResponse = null;
314
+ }
315
+
316
+ function retainStreamedEvent(event: CuratorStoredEvent): void {
317
+ streamedEventsByResultIndex.set(event.data.queryIndex, event);
318
+ }
319
+
320
+ function getStreamedEvents(): CuratorStoredEvent[] {
321
+ return [...streamedEventsByResultIndex.values()];
322
+ }
323
+
324
+ function replaySSE(res: ServerResponse): void {
325
+ for (const item of getStreamedEvents()) {
326
+ if (!writeSSE(res, item.event, item.data)) return;
296
327
  }
297
- sseBuffer.push(payload);
328
+ if (searchStreamDone) writeSSE(res, "done", {});
298
329
  }
299
330
 
300
331
  const pageHtml = generateCuratorPage(
@@ -352,18 +383,7 @@ export function startCuratorServer(
352
383
  res.flushHeaders();
353
384
  if (res.socket) res.socket.setNoDelay(true);
354
385
  sseResponse = res;
355
- if (sseBuffer.length > 0) {
356
- const pending = sseBuffer.splice(0, sseBuffer.length);
357
- for (let i = 0; i < pending.length; i++) {
358
- const msg = pending[i];
359
- try {
360
- res.write(msg);
361
- } catch {
362
- sseBuffer.unshift(...pending.slice(i));
363
- break;
364
- }
365
- }
366
- }
386
+ replaySSE(res);
367
387
  if (sseKeepalive) clearInterval(sseKeepalive);
368
388
  sseKeepalive = setInterval(() => {
369
389
  if (sseResponse) {
@@ -376,6 +396,17 @@ export function startCuratorServer(
376
396
  return;
377
397
  }
378
398
 
399
+ if (method === "GET" && url.pathname === "/state") {
400
+ const token = url.searchParams.get("session");
401
+ if (token !== sessionToken) {
402
+ sendJson(res, 403, { ok: false, error: "Invalid session" });
403
+ return;
404
+ }
405
+ touchHeartbeat();
406
+ sendJson(res, 200, { ok: true, events: getStreamedEvents(), done: searchStreamDone });
407
+ return;
408
+ }
409
+
379
410
  if (method === "POST" && url.pathname === "/heartbeat") {
380
411
  const body = await parseBodyOrSend(req, res);
381
412
  if (!body) return;
@@ -684,15 +715,20 @@ export function startCuratorServer(
684
715
  pushResult: (queryIndex, data) => {
685
716
  if (completed) return;
686
717
  nextQueryIndex = Math.max(nextQueryIndex, queryIndex + 1);
687
- sendSSE("result", { queryIndex, query: data.query ?? queries[queryIndex] ?? "", ...data });
718
+ const eventData: CuratorResultEventData = { ...data, queryIndex, query: data.query ?? queries[queryIndex] ?? "" };
719
+ retainStreamedEvent({ event: "result", data: eventData });
720
+ sendSSE("result", eventData);
688
721
  },
689
722
  pushError: (queryIndex, error, provider, meta) => {
690
723
  if (completed) return;
691
724
  nextQueryIndex = Math.max(nextQueryIndex, queryIndex + 1);
692
- sendSSE("search-error", { queryIndex, query: meta?.query ?? queries[queryIndex] ?? "", error, provider, slotIndex: meta?.slotIndex });
725
+ const eventData: CuratorSearchErrorEventData = { queryIndex, query: meta?.query ?? queries[queryIndex] ?? "", error, provider, slotIndex: meta?.slotIndex };
726
+ retainStreamedEvent({ event: "search-error", data: eventData });
727
+ sendSSE("search-error", eventData);
693
728
  },
694
729
  searchesDone: () => {
695
730
  if (completed) return;
731
+ searchStreamDone = true;
696
732
  sendSSE("done", {});
697
733
  state = "RESULT_SELECTION";
698
734
  stateChangedAt = Date.now();