@herbertgao/pi-extensions 2026.10.2 → 2026.10.4

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 (362) hide show
  1. package/README.md +6 -12
  2. package/THIRD_PARTY_NOTICES.md +5 -1
  3. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +8 -0
  4. package/node_modules/@herbertgao/pi-subagents/README.md +1 -1
  5. package/node_modules/@herbertgao/pi-subagents/package.json +4 -5
  6. package/node_modules/@herbertgao/pi-subagents/src/index.ts +1 -1
  7. package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +1 -1
  8. package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +48 -72
  9. package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +1 -1
  10. package/node_modules/@herbertgao/pi-subagents/src/output-file.ts +15 -6
  11. package/node_modules/@herbertgao/pi-subagents/src/workflow/collisions.ts +4 -1
  12. package/node_modules/@herbertgao/pi-subagents/src/workflow/json-schema.ts +9 -8
  13. package/node_modules/@narumitw/pi-caffeinate/dist/index.ts +6 -1
  14. package/node_modules/@narumitw/pi-caffeinate/dist/index.ts.map +2 -2
  15. package/node_modules/@narumitw/pi-caffeinate/package.json +1 -1
  16. package/node_modules/@narumitw/pi-caffeinate/src/dbus-inhibit.ts +13 -1
  17. package/node_modules/pi-lens/CHANGELOG.md +95 -0
  18. package/node_modules/pi-lens/README.md +1 -0
  19. package/node_modules/pi-lens/dist/chunk-2FQ62SPM.js +83 -0
  20. package/node_modules/pi-lens/dist/{chunk-6P62QVEA.js → chunk-2UMYMRI3.js} +2 -2
  21. package/node_modules/pi-lens/dist/{chunk-O6TQT6RI.js → chunk-34OCDWOS.js} +1 -1
  22. package/node_modules/pi-lens/dist/{chunk-XK4CIILI.js → chunk-3FERWMCH.js} +26 -26
  23. package/node_modules/pi-lens/dist/{chunk-ZAWW3AF6.js → chunk-3JL6IFD7.js} +8 -8
  24. package/node_modules/pi-lens/dist/{chunk-OAXNDZJ7.js → chunk-3JSEWUWI.js} +8 -4
  25. package/node_modules/pi-lens/dist/{chunk-RPD5K5NC.js → chunk-3MRXIJ6I.js} +2 -2
  26. package/node_modules/pi-lens/dist/{chunk-IVP5KAB7.js → chunk-3P4PF2BX.js} +14 -14
  27. package/node_modules/pi-lens/dist/{chunk-5THXD6X5.js → chunk-3PNFWVHT.js} +2 -2
  28. package/node_modules/pi-lens/dist/{chunk-VD4JQCQC.js → chunk-3TTPKMEF.js} +37 -37
  29. package/node_modules/pi-lens/dist/{chunk-7F72PXY2.js → chunk-5JHXUETW.js} +3 -3
  30. package/node_modules/pi-lens/dist/{chunk-5ZEJHV35.js → chunk-64LU2OVH.js} +2 -2
  31. package/node_modules/pi-lens/dist/{chunk-ODEEOXPH.js → chunk-6B5I6ICN.js} +11 -11
  32. package/node_modules/pi-lens/dist/{chunk-5RXBNSW2.js → chunk-6P54TMWL.js} +16 -8
  33. package/node_modules/pi-lens/dist/{chunk-K6VYLB2U.js → chunk-6UYA642J.js} +12 -12
  34. package/node_modules/pi-lens/dist/{chunk-V7R425XG.js → chunk-6XX5HCLK.js} +4 -4
  35. package/node_modules/pi-lens/dist/{chunk-D6QS3U6M.js → chunk-7AXO3ZDF.js} +15 -15
  36. package/node_modules/pi-lens/dist/{chunk-YGVYKNSN.js → chunk-7BX5DWSA.js} +59 -12
  37. package/node_modules/pi-lens/dist/{chunk-N3YQJI6O.js → chunk-7ELY2CSM.js} +7 -4
  38. package/node_modules/pi-lens/dist/{chunk-AWE5TMPO.js → chunk-7M4T5N3V.js} +13 -13
  39. package/node_modules/pi-lens/dist/{chunk-AJ3QXTRQ.js → chunk-AFZYMAIV.js} +33 -33
  40. package/node_modules/pi-lens/dist/{chunk-AJXODZY6.js → chunk-ALQRYH6O.js} +12 -12
  41. package/node_modules/pi-lens/dist/{chunk-AJVLWNFN.js → chunk-AXKPQ6ZI.js} +5 -5
  42. package/node_modules/pi-lens/dist/{chunk-HWBZIGMJ.js → chunk-BHWHXMQ2.js} +8 -8
  43. package/node_modules/pi-lens/dist/{chunk-IXEBJSUE.js → chunk-BJF25SUG.js} +10 -10
  44. package/node_modules/pi-lens/dist/{chunk-GVXA6CCE.js → chunk-BNKLYOOO.js} +1 -1
  45. package/node_modules/pi-lens/dist/{chunk-T4ERT73Y.js → chunk-CBD2B5CP.js} +20 -20
  46. package/node_modules/pi-lens/dist/{chunk-O5WILGMI.js → chunk-CFYISHUW.js} +5 -5
  47. package/node_modules/pi-lens/dist/{chunk-EOKRQ3SA.js → chunk-CMU4RMJB.js} +1 -1
  48. package/node_modules/pi-lens/dist/{chunk-YSNFMJKN.js → chunk-CULQYFLU.js} +2 -2
  49. package/node_modules/pi-lens/dist/{chunk-ORTMY4Q4.js → chunk-D65GOCJB.js} +21 -14
  50. package/node_modules/pi-lens/dist/{chunk-NTUJEGDZ.js → chunk-D6YF5HKX.js} +2 -2
  51. package/node_modules/pi-lens/dist/{chunk-BRJKOBZP.js → chunk-DMS52BEP.js} +17 -6
  52. package/node_modules/pi-lens/dist/{chunk-NL5GLMFI.js → chunk-ELVWJYRV.js} +11 -11
  53. package/node_modules/pi-lens/dist/{chunk-4W2PLC4J.js → chunk-EUT3B22Y.js} +12 -12
  54. package/node_modules/pi-lens/dist/{chunk-GUOGVTCQ.js → chunk-F5VLZHUW.js} +1 -1
  55. package/node_modules/pi-lens/dist/{chunk-I7SPGOWI.js → chunk-FGALODG3.js} +1 -1
  56. package/node_modules/pi-lens/dist/{chunk-Q5U6FMDI.js → chunk-G3RLJYA2.js} +12 -6
  57. package/node_modules/pi-lens/dist/{chunk-FJNKANOS.js → chunk-GAYGGICG.js} +9 -9
  58. package/node_modules/pi-lens/dist/{chunk-HVUZXSWK.js → chunk-H2W2AXD3.js} +38 -40
  59. package/node_modules/pi-lens/dist/{chunk-VHQLPIRJ.js → chunk-H5EV3VMF.js} +2 -2
  60. package/node_modules/pi-lens/dist/{chunk-27BBHSZC.js → chunk-HREZQCT3.js} +3 -3
  61. package/node_modules/pi-lens/dist/{chunk-TT22N74J.js → chunk-HSIRMK2D.js} +12 -12
  62. package/node_modules/pi-lens/dist/{chunk-3I5QFT3N.js → chunk-IMSQR4WO.js} +6 -3
  63. package/node_modules/pi-lens/dist/{chunk-B3I2UUT4.js → chunk-IQZXOZ7S.js} +156 -32
  64. package/node_modules/pi-lens/dist/{chunk-RIISMHKN.js → chunk-IR6XFA5P.js} +14 -13
  65. package/node_modules/pi-lens/dist/{chunk-LNAKEO63.js → chunk-IUKPRZER.js} +4 -4
  66. package/node_modules/pi-lens/dist/{chunk-RUOG5D2C.js → chunk-IUR76K6A.js} +5 -5
  67. package/node_modules/pi-lens/dist/{chunk-TO6WL3GM.js → chunk-J3FZR3YY.js} +12 -2
  68. package/node_modules/pi-lens/dist/{chunk-Y4T27COV.js → chunk-J6DFZDFA.js} +4 -4
  69. package/node_modules/pi-lens/dist/{chunk-E4MAEDPM.js → chunk-J7WJZ6W7.js} +11 -11
  70. package/node_modules/pi-lens/dist/{chunk-52H5B5TC.js → chunk-JONGANYH.js} +30 -30
  71. package/node_modules/pi-lens/dist/{chunk-TGPXLY2J.js → chunk-KJCWXUUS.js} +35 -1
  72. package/node_modules/pi-lens/dist/{chunk-I3R7GKDR.js → chunk-KJN4IOEJ.js} +1 -1
  73. package/node_modules/pi-lens/dist/{chunk-RPD4ZSB7.js → chunk-KMGPUKFD.js} +12 -12
  74. package/node_modules/pi-lens/dist/{chunk-OQGFCZJ4.js → chunk-LD7WFTRX.js} +13 -13
  75. package/node_modules/pi-lens/dist/{chunk-DIULIWKU.js → chunk-LNOMA3MP.js} +3 -3
  76. package/node_modules/pi-lens/dist/{chunk-HHYAELLJ.js → chunk-MGIWSROG.js} +5 -5
  77. package/node_modules/pi-lens/dist/{chunk-YLF3PPT5.js → chunk-MQA2YBAH.js} +3 -3
  78. package/node_modules/pi-lens/dist/{chunk-TVN5N6GY.js → chunk-MTDRLSI7.js} +690 -186
  79. package/node_modules/pi-lens/dist/{chunk-DQ2NZ7C4.js → chunk-N2IRDBZI.js} +44 -6
  80. package/node_modules/pi-lens/dist/{chunk-AHDW3GPE.js → chunk-N77WFUL7.js} +22 -22
  81. package/node_modules/pi-lens/dist/{chunk-NXPS2L6U.js → chunk-N7YNJE5R.js} +7 -7
  82. package/node_modules/pi-lens/dist/{chunk-7FBF7NPR.js → chunk-NFXP47RV.js} +13 -12
  83. package/node_modules/pi-lens/dist/{chunk-UY752QSN.js → chunk-NJF2X5XF.js} +17 -17
  84. package/node_modules/pi-lens/dist/{chunk-WONERJTP.js → chunk-O7HZX7CA.js} +1 -1
  85. package/node_modules/pi-lens/dist/{chunk-AS44CFQ4.js → chunk-OC7LYAU5.js} +7 -7
  86. package/node_modules/pi-lens/dist/{chunk-4RERDEXR.js → chunk-OEX24ECI.js} +30 -30
  87. package/node_modules/pi-lens/dist/{chunk-6VCD4VKZ.js → chunk-OYOB3ZFG.js} +2 -2
  88. package/node_modules/pi-lens/dist/{chunk-IIXOAGHR.js → chunk-OYTMZXRF.js} +18 -15
  89. package/node_modules/pi-lens/dist/{chunk-ARFCXG7S.js → chunk-OZJINN4O.js} +2 -2
  90. package/node_modules/pi-lens/dist/{chunk-34U7PLGE.js → chunk-PCHDGUKT.js} +11 -11
  91. package/node_modules/pi-lens/dist/{chunk-VCSRSYLF.js → chunk-RJFED73B.js} +34 -36
  92. package/node_modules/pi-lens/dist/chunk-RTQNRM5X.js +27 -0
  93. package/node_modules/pi-lens/dist/{chunk-PAK6IDME.js → chunk-S6AMWKPC.js} +2 -2
  94. package/node_modules/pi-lens/dist/{chunk-U3VGR4VU.js → chunk-T4QZ6FEH.js} +4 -4
  95. package/node_modules/pi-lens/dist/{chunk-VN2AXLEX.js → chunk-T54VJRAD.js} +54 -12
  96. package/node_modules/pi-lens/dist/{chunk-ZMOL6RQC.js → chunk-TA5L5KWQ.js} +2 -2
  97. package/node_modules/pi-lens/dist/{chunk-JOLITGCC.js → chunk-TQFBZVCG.js} +1 -1
  98. package/node_modules/pi-lens/dist/{chunk-VDBPVIKD.js → chunk-U52SAGRM.js} +1 -1
  99. package/node_modules/pi-lens/dist/{chunk-LW6XKDZQ.js → chunk-UEAHAMEI.js} +284 -35
  100. package/node_modules/pi-lens/dist/{chunk-NMABWBZN.js → chunk-UGSMCQ4D.js} +1 -1
  101. package/node_modules/pi-lens/dist/{chunk-6QIUX4EP.js → chunk-USHG4DLH.js} +7 -7
  102. package/node_modules/pi-lens/dist/{chunk-LSMJ6KBE.js → chunk-V5MEBST3.js} +16 -16
  103. package/node_modules/pi-lens/dist/chunk-VGEVL5EQ.js +29 -0
  104. package/node_modules/pi-lens/dist/{chunk-47D2BO4S.js → chunk-VPWKF3GN.js} +10 -10
  105. package/node_modules/pi-lens/dist/{chunk-UK3CMEAL.js → chunk-VSMJK3ZJ.js} +1 -1
  106. package/node_modules/pi-lens/dist/{chunk-22AVIGXS.js → chunk-VYKKMYVT.js} +7 -7
  107. package/node_modules/pi-lens/dist/{chunk-OS32RNR2.js → chunk-VZHJS6DR.js} +15 -15
  108. package/node_modules/pi-lens/dist/{chunk-E2WFBRHM.js → chunk-WATC3IQR.js} +3 -3
  109. package/node_modules/pi-lens/dist/chunk-WPE5FPGR.js +54 -0
  110. package/node_modules/pi-lens/dist/{chunk-V5PXFSZK.js → chunk-WSEWKCXU.js} +4 -4
  111. package/node_modules/pi-lens/dist/{chunk-NKOUFPQF.js → chunk-WW5BLB74.js} +2 -2
  112. package/node_modules/pi-lens/dist/{chunk-PWFHBTSF.js → chunk-XGUL4SLQ.js} +2 -2
  113. package/node_modules/pi-lens/dist/{chunk-F3P7VQ7H.js → chunk-XHSCVSOL.js} +3 -3
  114. package/node_modules/pi-lens/dist/{chunk-DFVMIKMQ.js → chunk-YLN4K6WD.js} +45 -9
  115. package/node_modules/pi-lens/dist/{chunk-VNMT7C64.js → chunk-Z6BB4JLQ.js} +2 -2
  116. package/node_modules/pi-lens/dist/{chunk-NTHH2J74.js → chunk-Z7QQA2KT.js} +12 -12
  117. package/node_modules/pi-lens/dist/{chunk-F3AU2TMM.js → chunk-ZETYB3XG.js} +15 -15
  118. package/node_modules/pi-lens/dist/{chunk-XECLWQZN.js → chunk-ZMOMPX2Z.js} +12 -10
  119. package/node_modules/pi-lens/dist/{chunk-C2AUYXQH.js → chunk-ZOEYVXSV.js} +4 -4
  120. package/node_modules/pi-lens/dist/{chunk-TLGFBM3F.js → chunk-ZZUFZUQZ.js} +68 -64
  121. package/node_modules/pi-lens/dist/index.js +30113 -28398
  122. package/node_modules/pi-lens/dist/mcp/analyze-cli.js +8 -8
  123. package/node_modules/pi-lens/dist/mcp/cli.js +37 -37
  124. package/node_modules/pi-lens/dist/mcp/server.js +257 -158
  125. package/node_modules/pi-lens/dist/mcp/worker.js +55 -55
  126. package/node_modules/pi-lens/dist/probes/installer.js +19 -19
  127. package/node_modules/pi-lens/docs/ast-grep_rules_catalog.md +2 -2
  128. package/node_modules/pi-lens/docs/configuration.md +9 -2
  129. package/node_modules/pi-lens/docs/custom-rules.md +25 -2
  130. package/node_modules/pi-lens/docs/environment-variables.md +34 -6
  131. package/node_modules/pi-lens/docs/features.md +37 -1
  132. package/node_modules/pi-lens/docs/globalconfig.md +1 -1
  133. package/node_modules/pi-lens/docs/lsp-capability-matrix.md +2 -1
  134. package/node_modules/pi-lens/docs/lsp-idle-eviction.md +1 -1
  135. package/node_modules/pi-lens/docs/pi-lens-fixer.md +9 -5
  136. package/node_modules/pi-lens/docs/pi-lens-merge-policy.md +43 -1
  137. package/node_modules/pi-lens/docs/pi-lens-monitor.md +3 -1
  138. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +4 -3
  139. package/node_modules/pi-lens/docs/schema/pi-lens-config-v1.json +530 -0
  140. package/node_modules/pi-lens/docs/servercapabilities.md +4 -1
  141. package/node_modules/pi-lens/docs/word-index.md +6 -0
  142. package/node_modules/pi-lens/package.json +1 -1
  143. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  144. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  145. package/node_modules/pi-lens/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  146. package/node_modules/pi-lens/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  147. package/node_modules/pi-lens/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  148. package/node_modules/pi-lens/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  149. package/node_modules/pi-provider-qoder/README.md +140 -0
  150. package/node_modules/pi-provider-qoder/dist/index.js +10249 -0
  151. package/node_modules/pi-provider-qoder/package.json +57 -0
  152. package/node_modules/pi-web-access/CHANGELOG.md +28 -0
  153. package/node_modules/pi-web-access/README.md +10 -6
  154. package/node_modules/pi-web-access/ceramic.ts +219 -0
  155. package/node_modules/pi-web-access/curator-page.ts +3 -1
  156. package/node_modules/pi-web-access/curator-server.ts +1 -0
  157. package/node_modules/pi-web-access/dist/index.js +846 -588
  158. package/node_modules/pi-web-access/dist/mcp-cli.js +725 -516
  159. package/node_modules/pi-web-access/gemini-search.ts +8 -4
  160. package/node_modules/pi-web-access/github-extract.ts +34 -2
  161. package/node_modules/pi-web-access/index.ts +72 -30
  162. package/node_modules/pi-web-access/openai-search.ts +3 -3
  163. package/node_modules/pi-web-access/package.json +2 -2
  164. package/node_modules/pi-web-access/page-query.ts +6 -9
  165. package/node_modules/pi-web-access/parallel-mcp.ts +2 -0
  166. package/node_modules/pi-web-access/query-rewrite.ts +2 -2
  167. package/node_modules/pi-web-access/storage.ts +49 -0
  168. package/node_modules/pi-web-access/summary-review.ts +7 -6
  169. package/node_modules/pi-web-access/utils.ts +21 -6
  170. package/node_modules/pi-web-access/web-tool-core.ts +1 -0
  171. package/package.json +10 -12
  172. package/node_modules/pi-lens/dist/chunk-54B42YRX.js +0 -27
  173. package/node_modules/pi-lens/dist/chunk-CGGAIP7J.js +0 -29
  174. package/node_modules/pi-lens/dist/chunk-HMFXILPV.js +0 -83
  175. package/node_modules/pi-lens/dist/chunk-T6D4Q4AQ.js +0 -54
  176. package/node_modules/pi-web-access/opencode-session-headers.ts +0 -24
  177. package/node_modules/remote-pi/LICENSE +0 -21
  178. package/node_modules/remote-pi/README.md +0 -675
  179. package/node_modules/remote-pi/dist/actions/handlers.d.ts +0 -122
  180. package/node_modules/remote-pi/dist/actions/handlers.js +0 -160
  181. package/node_modules/remote-pi/dist/actions/handlers.js.map +0 -1
  182. package/node_modules/remote-pi/dist/actions/registry.d.ts +0 -39
  183. package/node_modules/remote-pi/dist/actions/registry.js +0 -58
  184. package/node_modules/remote-pi/dist/actions/registry.js.map +0 -1
  185. package/node_modules/remote-pi/dist/bin/supervisord.d.ts +0 -2
  186. package/node_modules/remote-pi/dist/bin/supervisord.js +0 -86
  187. package/node_modules/remote-pi/dist/bin/supervisord.js.map +0 -1
  188. package/node_modules/remote-pi/dist/commands/builtin_mirror.d.ts +0 -58
  189. package/node_modules/remote-pi/dist/commands/builtin_mirror.js +0 -71
  190. package/node_modules/remote-pi/dist/commands/builtin_mirror.js.map +0 -1
  191. package/node_modules/remote-pi/dist/commands/list_commands.d.ts +0 -60
  192. package/node_modules/remote-pi/dist/commands/list_commands.js +0 -73
  193. package/node_modules/remote-pi/dist/commands/list_commands.js.map +0 -1
  194. package/node_modules/remote-pi/dist/config.d.ts +0 -62
  195. package/node_modules/remote-pi/dist/config.js +0 -115
  196. package/node_modules/remote-pi/dist/config.js.map +0 -1
  197. package/node_modules/remote-pi/dist/daemon/client.d.ts +0 -20
  198. package/node_modules/remote-pi/dist/daemon/client.js +0 -131
  199. package/node_modules/remote-pi/dist/daemon/client.js.map +0 -1
  200. package/node_modules/remote-pi/dist/daemon/control_protocol.d.ts +0 -176
  201. package/node_modules/remote-pi/dist/daemon/control_protocol.js +0 -63
  202. package/node_modules/remote-pi/dist/daemon/control_protocol.js.map +0 -1
  203. package/node_modules/remote-pi/dist/daemon/cron_log.d.ts +0 -45
  204. package/node_modules/remote-pi/dist/daemon/cron_log.js +0 -72
  205. package/node_modules/remote-pi/dist/daemon/cron_log.js.map +0 -1
  206. package/node_modules/remote-pi/dist/daemon/cron_registry.d.ts +0 -80
  207. package/node_modules/remote-pi/dist/daemon/cron_registry.js +0 -194
  208. package/node_modules/remote-pi/dist/daemon/cron_registry.js.map +0 -1
  209. package/node_modules/remote-pi/dist/daemon/id.d.ts +0 -24
  210. package/node_modules/remote-pi/dist/daemon/id.js +0 -36
  211. package/node_modules/remote-pi/dist/daemon/id.js.map +0 -1
  212. package/node_modules/remote-pi/dist/daemon/install.d.ts +0 -170
  213. package/node_modules/remote-pi/dist/daemon/install.js +0 -547
  214. package/node_modules/remote-pi/dist/daemon/install.js.map +0 -1
  215. package/node_modules/remote-pi/dist/daemon/registry.d.ts +0 -63
  216. package/node_modules/remote-pi/dist/daemon/registry.js +0 -153
  217. package/node_modules/remote-pi/dist/daemon/registry.js.map +0 -1
  218. package/node_modules/remote-pi/dist/daemon/rpc_child.d.ts +0 -194
  219. package/node_modules/remote-pi/dist/daemon/rpc_child.js +0 -389
  220. package/node_modules/remote-pi/dist/daemon/rpc_child.js.map +0 -1
  221. package/node_modules/remote-pi/dist/daemon/supervisor.d.ts +0 -93
  222. package/node_modules/remote-pi/dist/daemon/supervisor.js +0 -596
  223. package/node_modules/remote-pi/dist/daemon/supervisor.js.map +0 -1
  224. package/node_modules/remote-pi/dist/extension_ui_bridge.d.ts +0 -26
  225. package/node_modules/remote-pi/dist/extension_ui_bridge.js +0 -341
  226. package/node_modules/remote-pi/dist/extension_ui_bridge.js.map +0 -1
  227. package/node_modules/remote-pi/dist/index.d.ts +0 -213
  228. package/node_modules/remote-pi/dist/index.js +0 -4996
  229. package/node_modules/remote-pi/dist/index.js.map +0 -1
  230. package/node_modules/remote-pi/dist/mcp/mesh_result.d.ts +0 -10
  231. package/node_modules/remote-pi/dist/mcp/mesh_result.js +0 -42
  232. package/node_modules/remote-pi/dist/mcp/mesh_result.js.map +0 -1
  233. package/node_modules/remote-pi/dist/mcp/mesh_server.d.ts +0 -16
  234. package/node_modules/remote-pi/dist/mcp/mesh_server.js +0 -327
  235. package/node_modules/remote-pi/dist/mcp/mesh_server.js.map +0 -1
  236. package/node_modules/remote-pi/dist/mesh/canonical.d.ts +0 -30
  237. package/node_modules/remote-pi/dist/mesh/canonical.js +0 -61
  238. package/node_modules/remote-pi/dist/mesh/canonical.js.map +0 -1
  239. package/node_modules/remote-pi/dist/mesh/client.d.ts +0 -18
  240. package/node_modules/remote-pi/dist/mesh/client.js +0 -125
  241. package/node_modules/remote-pi/dist/mesh/client.js.map +0 -1
  242. package/node_modules/remote-pi/dist/mesh/encoding.d.ts +0 -38
  243. package/node_modules/remote-pi/dist/mesh/encoding.js +0 -216
  244. package/node_modules/remote-pi/dist/mesh/encoding.js.map +0 -1
  245. package/node_modules/remote-pi/dist/mesh/self_revoke.d.ts +0 -73
  246. package/node_modules/remote-pi/dist/mesh/self_revoke.js +0 -401
  247. package/node_modules/remote-pi/dist/mesh/self_revoke.js.map +0 -1
  248. package/node_modules/remote-pi/dist/mesh/siblings.d.ts +0 -49
  249. package/node_modules/remote-pi/dist/mesh/siblings.js +0 -159
  250. package/node_modules/remote-pi/dist/mesh/siblings.js.map +0 -1
  251. package/node_modules/remote-pi/dist/mesh/types.d.ts +0 -34
  252. package/node_modules/remote-pi/dist/mesh/types.js +0 -11
  253. package/node_modules/remote-pi/dist/mesh/types.js.map +0 -1
  254. package/node_modules/remote-pi/dist/mesh/verify.d.ts +0 -17
  255. package/node_modules/remote-pi/dist/mesh/verify.js +0 -86
  256. package/node_modules/remote-pi/dist/mesh/verify.js.map +0 -1
  257. package/node_modules/remote-pi/dist/pairing/crypto.d.ts +0 -8
  258. package/node_modules/remote-pi/dist/pairing/crypto.js +0 -22
  259. package/node_modules/remote-pi/dist/pairing/crypto.js.map +0 -1
  260. package/node_modules/remote-pi/dist/pairing/handshake.d.ts +0 -28
  261. package/node_modules/remote-pi/dist/pairing/handshake.js +0 -113
  262. package/node_modules/remote-pi/dist/pairing/handshake.js.map +0 -1
  263. package/node_modules/remote-pi/dist/pairing/noise-sha256.d.ts +0 -16
  264. package/node_modules/remote-pi/dist/pairing/noise-sha256.js +0 -103
  265. package/node_modules/remote-pi/dist/pairing/noise-sha256.js.map +0 -1
  266. package/node_modules/remote-pi/dist/pairing/qr.d.ts +0 -59
  267. package/node_modules/remote-pi/dist/pairing/qr.js +0 -125
  268. package/node_modules/remote-pi/dist/pairing/qr.js.map +0 -1
  269. package/node_modules/remote-pi/dist/pairing/storage.d.ts +0 -120
  270. package/node_modules/remote-pi/dist/pairing/storage.js +0 -604
  271. package/node_modules/remote-pi/dist/pairing/storage.js.map +0 -1
  272. package/node_modules/remote-pi/dist/protocol/codec.d.ts +0 -7
  273. package/node_modules/remote-pi/dist/protocol/codec.js +0 -49
  274. package/node_modules/remote-pi/dist/protocol/codec.js.map +0 -1
  275. package/node_modules/remote-pi/dist/protocol/types.d.ts +0 -393
  276. package/node_modules/remote-pi/dist/protocol/types.js +0 -2
  277. package/node_modules/remote-pi/dist/protocol/types.js.map +0 -1
  278. package/node_modules/remote-pi/dist/rooms.d.ts +0 -29
  279. package/node_modules/remote-pi/dist/rooms.js +0 -57
  280. package/node_modules/remote-pi/dist/rooms.js.map +0 -1
  281. package/node_modules/remote-pi/dist/session/address.d.ts +0 -49
  282. package/node_modules/remote-pi/dist/session/address.js +0 -58
  283. package/node_modules/remote-pi/dist/session/address.js.map +0 -1
  284. package/node_modules/remote-pi/dist/session/agent_bridge.d.ts +0 -55
  285. package/node_modules/remote-pi/dist/session/agent_bridge.js +0 -146
  286. package/node_modules/remote-pi/dist/session/agent_bridge.js.map +0 -1
  287. package/node_modules/remote-pi/dist/session/bridge.d.ts +0 -37
  288. package/node_modules/remote-pi/dist/session/bridge.js +0 -130
  289. package/node_modules/remote-pi/dist/session/bridge.js.map +0 -1
  290. package/node_modules/remote-pi/dist/session/broker.d.ts +0 -189
  291. package/node_modules/remote-pi/dist/session/broker.js +0 -507
  292. package/node_modules/remote-pi/dist/session/broker.js.map +0 -1
  293. package/node_modules/remote-pi/dist/session/broker_remote.d.ts +0 -74
  294. package/node_modules/remote-pi/dist/session/broker_remote.js +0 -583
  295. package/node_modules/remote-pi/dist/session/broker_remote.js.map +0 -1
  296. package/node_modules/remote-pi/dist/session/cwd_lock.d.ts +0 -33
  297. package/node_modules/remote-pi/dist/session/cwd_lock.js +0 -126
  298. package/node_modules/remote-pi/dist/session/cwd_lock.js.map +0 -1
  299. package/node_modules/remote-pi/dist/session/envelope.d.ts +0 -33
  300. package/node_modules/remote-pi/dist/session/envelope.js +0 -117
  301. package/node_modules/remote-pi/dist/session/envelope.js.map +0 -1
  302. package/node_modules/remote-pi/dist/session/global_config.d.ts +0 -33
  303. package/node_modules/remote-pi/dist/session/global_config.js +0 -73
  304. package/node_modules/remote-pi/dist/session/global_config.js.map +0 -1
  305. package/node_modules/remote-pi/dist/session/ipc.d.ts +0 -27
  306. package/node_modules/remote-pi/dist/session/ipc.js +0 -22
  307. package/node_modules/remote-pi/dist/session/ipc.js.map +0 -1
  308. package/node_modules/remote-pi/dist/session/leader_election.d.ts +0 -32
  309. package/node_modules/remote-pi/dist/session/leader_election.js +0 -106
  310. package/node_modules/remote-pi/dist/session/leader_election.js.map +0 -1
  311. package/node_modules/remote-pi/dist/session/local_config.d.ts +0 -55
  312. package/node_modules/remote-pi/dist/session/local_config.js +0 -157
  313. package/node_modules/remote-pi/dist/session/local_config.js.map +0 -1
  314. package/node_modules/remote-pi/dist/session/mesh_message.d.ts +0 -20
  315. package/node_modules/remote-pi/dist/session/mesh_message.js +0 -28
  316. package/node_modules/remote-pi/dist/session/mesh_message.js.map +0 -1
  317. package/node_modules/remote-pi/dist/session/mesh_node.d.ts +0 -116
  318. package/node_modules/remote-pi/dist/session/mesh_node.js +0 -573
  319. package/node_modules/remote-pi/dist/session/mesh_node.js.map +0 -1
  320. package/node_modules/remote-pi/dist/session/peer.d.ts +0 -139
  321. package/node_modules/remote-pi/dist/session/peer.js +0 -451
  322. package/node_modules/remote-pi/dist/session/peer.js.map +0 -1
  323. package/node_modules/remote-pi/dist/session/peer_inventory.d.ts +0 -13
  324. package/node_modules/remote-pi/dist/session/peer_inventory.js +0 -48
  325. package/node_modules/remote-pi/dist/session/peer_inventory.js.map +0 -1
  326. package/node_modules/remote-pi/dist/session/peer_limits.d.ts +0 -9
  327. package/node_modules/remote-pi/dist/session/peer_limits.js +0 -21
  328. package/node_modules/remote-pi/dist/session/peer_limits.js.map +0 -1
  329. package/node_modules/remote-pi/dist/session/setup_wizard.d.ts +0 -39
  330. package/node_modules/remote-pi/dist/session/setup_wizard.js +0 -63
  331. package/node_modules/remote-pi/dist/session/setup_wizard.js.map +0 -1
  332. package/node_modules/remote-pi/dist/session/tool_gate.d.ts +0 -5
  333. package/node_modules/remote-pi/dist/session/tool_gate.js +0 -11
  334. package/node_modules/remote-pi/dist/session/tool_gate.js.map +0 -1
  335. package/node_modules/remote-pi/dist/session/tools.d.ts +0 -24
  336. package/node_modules/remote-pi/dist/session/tools.js +0 -252
  337. package/node_modules/remote-pi/dist/session/tools.js.map +0 -1
  338. package/node_modules/remote-pi/dist/session/wizard.d.ts +0 -13
  339. package/node_modules/remote-pi/dist/session/wizard.js +0 -20
  340. package/node_modules/remote-pi/dist/session/wizard.js.map +0 -1
  341. package/node_modules/remote-pi/dist/settings.d.ts +0 -15
  342. package/node_modules/remote-pi/dist/settings.js +0 -52
  343. package/node_modules/remote-pi/dist/settings.js.map +0 -1
  344. package/node_modules/remote-pi/dist/transport/peer_channel.d.ts +0 -37
  345. package/node_modules/remote-pi/dist/transport/peer_channel.js +0 -98
  346. package/node_modules/remote-pi/dist/transport/peer_channel.js.map +0 -1
  347. package/node_modules/remote-pi/dist/transport/pi_forward_client.d.ts +0 -29
  348. package/node_modules/remote-pi/dist/transport/pi_forward_client.js +0 -62
  349. package/node_modules/remote-pi/dist/transport/pi_forward_client.js.map +0 -1
  350. package/node_modules/remote-pi/dist/transport/relay_client.d.ts +0 -91
  351. package/node_modules/remote-pi/dist/transport/relay_client.js +0 -206
  352. package/node_modules/remote-pi/dist/transport/relay_client.js.map +0 -1
  353. package/node_modules/remote-pi/dist/ui/footer.d.ts +0 -32
  354. package/node_modules/remote-pi/dist/ui/footer.js +0 -34
  355. package/node_modules/remote-pi/dist/ui/footer.js.map +0 -1
  356. package/node_modules/remote-pi/docs/daemon.md +0 -289
  357. package/node_modules/remote-pi/package.json +0 -92
  358. package/node_modules/remote-pi/service-templates/launchd.plist.template +0 -35
  359. package/node_modules/remote-pi/service-templates/systemd.service.template +0 -19
  360. package/node_modules/remote-pi/service-templates/task-launcher.vbs.template +0 -10
  361. package/node_modules/remote-pi/service-templates/task-scheduler.xml.template +0 -38
  362. package/node_modules/remote-pi/skills/agent-network/SKILL.md +0 -310
package/README.md CHANGED
@@ -21,10 +21,11 @@ When migrating from `pi-mcp-adapter`, remove any standalone adapter install as w
21
21
  The package bundles 5 active `@herbertgao/*` child packages—`pi-agency`, `pi-bark`, `pi-cc-extensions`, `pi-subagents`, and `sol-pi`—plus the following upstream packages under their original names:
22
22
 
23
23
  - `pi-antigravity@0.10.0`
24
+ - `pi-provider-qoder@0.5.0`
24
25
  - `@dietrichgebert/ponytail@5.1.0`
25
26
  - `@juicesharp/rpiv-ask-user-question@2.12.0`
26
27
  - `@narumitw/pi-btw@0.61.1`
27
- - `@narumitw/pi-caffeinate@0.49.10`
28
+ - `@narumitw/pi-caffeinate@0.49.11`
28
29
  - `@pi-plugins/fast-mode@0.1.13`
29
30
  - `@tifan/pi-copy-response@0.2.7`
30
31
  - `@tifan/pi-handoff@2.2.2`
@@ -37,9 +38,8 @@ The package bundles 5 active `@herbertgao/*` child packages—`pi-agency`, `pi-b
37
38
  - `pi-multi-account@1.24.0`
38
39
  - `pi-next-cue@1.0.7`
39
40
  - `pi-jev-auto-mode@0.5.0`
40
- - `pi-lens@4.4.0`
41
- - `pi-web-access@0.37.0`
42
- - `remote-pi@0.7.0`
41
+ - `pi-lens@4.4.1`
42
+ - `pi-web-access@0.38.0`
43
43
  - `resume-from@0.4.1`
44
44
 
45
45
  Pi loads their extensions and skills through `node_modules/` paths inside one package root. The upstream companions are pinned and bundled, not forked or renamed.
@@ -56,11 +56,11 @@ The locally customized CC and SoL-Pi packages now follow complete upstream basel
56
56
 
57
57
  `@herbertgao/pi-bark` sends localized Bark pushes when a user-facing Pi run fully settles or `@juicesharp/rpiv-ask-user-question` needs an answer. Notifications include emoji-labeled machine/path metadata and support the bundled official Pi badge through Bark's `icon` parameter. Configure it in `$PI_CODING_AGENT_DIR/bark.json` (normally `~/.pi/agent/bark.json`); see the [package README](../pi-bark/README.md). Without a valid endpoint it stays inactive.
58
58
 
59
- `@narumitw/pi-caffeinate@0.49.10` uses the host platform's sleep inhibitor during each Pi agent run. On macOS, `/caffeinate sleep` keeps the system awake while allowing the display to sleep; `/caffeinate display` also keeps the display awake. It releases the inhibitor when the run or session ends. Its D-Bus dependency remains on the normal socket transport under Node; Bun on Linux/macOS can use FFI and an in-process reader thread for Unix file-descriptor transport, falling back when unavailable. No daemon or build step is added.
59
+ `@narumitw/pi-caffeinate@0.49.11` uses the host platform's sleep inhibitor during each Pi agent run. On macOS, `/caffeinate sleep` keeps the system awake while allowing the display to sleep; `/caffeinate display` also keeps the display awake. It releases the inhibitor when the run or session ends. Its D-Bus dependency remains on the normal socket transport under Node; Bun on Linux/macOS can use FFI and an in-process reader thread for Unix file-descriptor transport, falling back when unavailable. No daemon or build step is added.
60
60
 
61
61
  `pi-jev-auto-mode@0.5.0` adds fail-closed Jev safety gates for shell commands and file changes. `pi-typesafe@0.9.1` provides `/typesafe` and `typesafe_evaluate` for explicit structured decisions; `/typesafe enable` or `PI_TYPESAFE_ENABLED=1` is still required for agent tool calls. The Pi extension continues to use the TypeSafe API, not Liquid. The package's programmatic client additionally supports Liquid with its own API key and free or paid models; existing usage accounting now merges writes under a short-lived file lock (up to 200ms synchronous wait under contention).
62
62
 
63
- `resume-from@0.4.1` continues sessions across Pi, Claude Code, and Codex; it keeps a Claude Code session matched to its start directory when the active transcript later moves into a nested cwd. `@herbertgao/sol-pi` adds opt-in Action Fusion, ObservationPack, Evidence-Preserving Reducer, and Online Context Compact; see its [configuration guide](../sol-pi/docs/configuration.md). `pi-lens@4.4.0` expands language routing and bounds retained diagnostic facts across multi-root sessions. `pi-web-access@0.37.0` provides configurable web search and fetch tools; its `toolActivation` defaults to `auto`, choosing eager or dynamic tool activation per model. It adds structured search/fetch data for codemode and an optional, manually started `pi-web-access-mcp` stdio CLI; installing the aggregate does not start that server. Degoog and Keenable are explicit-only providers, excluded from automatic and `all` selection. Perplexity search now uses the Search API's ranked pages and snippets rather than a Sonar-generated answer; requests requiring prose still use Sonar. `pi-antigravity@0.10.0` reads Pi 0.86+ transcript system messages, so Antigravity requests carry Pi's system prompt and tools; it also registers `google_search` and `generate_image` tools that use the signed-in Antigravity account. Preferred Thinking 1.0.2 preserves an explicit subagent `--thinking` choice. Deprecated `@tifan/pi-titlebar-spinner` is no longer bundled; Rename remains the single owner of Herdr tab naming.
63
+ `resume-from@0.4.1` continues sessions across Pi, Claude Code, and Codex; it keeps a Claude Code session matched to its start directory when the active transcript later moves into a nested cwd. `@herbertgao/sol-pi` adds opt-in Action Fusion, ObservationPack, Evidence-Preserving Reducer, and Online Context Compact; see its [configuration guide](../sol-pi/docs/configuration.md). `pi-lens@4.4.1` publishes a public LSP config schema, reads user-level custom rule directories (project before user before built-in), normalizes argv-style server entries, downgrades `throw-new-error` to a warning, and counts Docker, JSON, and Jedi servers in idle eviction; language routing and the retained multi-root diagnostic facts are unchanged. `pi-web-access@0.38.0` provides configurable web search and fetch tools; its `toolActivation` defaults to `auto`, choosing eager or dynamic tool activation per model. It adds structured search/fetch data for codemode and an optional, manually started `pi-web-access-mcp` stdio CLI; installing the aggregate does not start that server. Degoog, Keenable, and the new Ceramic provider are explicit-only, excluded from automatic and `all` selection. OpenAI search now defaults to `gpt-6-luna`, results and clone cleanup are scoped per extension instance, and the promoted `@modelcontextprotocol/sdk@^1.32.1` moves the bundle off GHSA-6qxp-vccf-f47h. Perplexity search now uses the Search API's ranked pages and snippets rather than a Sonar-generated answer; requests requiring prose still use Sonar. `pi-antigravity@0.10.0` reads Pi 0.86+ transcript system messages, so Antigravity requests carry Pi's system prompt and tools; it also registers `google_search` and `generate_image` tools that use the signed-in Antigravity account. `pi-provider-qoder@0.5.0` registers the `qoder` and `qoder-cn` model providers. Sign in with `/login qoder` (browser or a personal access token from [qoder.com/account/integrations](https://qoder.com/account/integrations)) or `/login qoder-cn` (token from [qoder.com.cn/account/integrations](https://qoder.com.cn/account/integrations)). `QODER_PERSONAL_ACCESS_TOKEN` and `QODERCN_PERSONAL_ACCESS_TOKEN` log those providers in at startup. `/qoder-usage footer on` replaces the status-bar footer for that session, so leave it off while the pi-cc footer is in use. Preferred Thinking 1.0.2 preserves an explicit subagent `--thinking` choice. Deprecated `@tifan/pi-titlebar-spinner` is no longer bundled; Rename remains the single owner of Herdr tab naming.
64
64
 
65
65
  `pi-stash` is no longer bundled: `/btw` already preserves the main editor draft while handling side questions outside the main conversation. Prior `@herbertgao/pi-stash` releases remain available but are no longer maintained here.
66
66
 
@@ -85,12 +85,6 @@ For the intended compact status text, merge the optional pi-lens widget setting
85
85
 
86
86
  Pi 0.85.1 or newer should use native `fullscreen` TUI mode.
87
87
 
88
- ### Remote Pi trust boundary
89
-
90
- Configure `REMOTE_PI_RELAY` to a private relay, preferably reachable only through Tailscale or another private network, **before** first running `/remote-pi`. TLS/Tailscale protects traffic in transit but the relay process can read routed content; `remote-pi@0.7.0` is not end-to-end encrypted.
91
-
92
- Known accepted `0.7.0` limitations: pairing URI/token data is persisted in Pi session data and may enter model context during its short validity window; local broker/supervisor IPC trusts processes running as the same OS user; cancelling first-time setup can retain its cwd lock until Pi exits. Do not use the public relay or run untrusted local processes if those boundaries are unacceptable.
93
-
94
88
  See the [repository README](https://github.com/HerbertGao/pi-extensions#readme) for the complete package list and provenance.
95
89
 
96
90
  ## License
@@ -62,7 +62,7 @@ SOFTWARE.
62
62
 
63
63
  ## `@narumitw/pi-caffeinate`
64
64
 
65
- The aggregate bundles [`@narumitw/pi-caffeinate`](https://github.com/narumiruna/pi-extensions/tree/main/packages/pi-caffeinate) version 0.49.10 under its original MIT license:
65
+ The aggregate bundles [`@narumitw/pi-caffeinate`](https://github.com/narumiruna/pi-extensions/tree/main/packages/pi-caffeinate) version 0.49.11 under its original MIT license:
66
66
 
67
67
  MIT License
68
68
 
@@ -238,3 +238,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
238
238
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
239
239
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
240
240
  THE SOFTWARE.
241
+
242
+ ## `pi-provider-qoder`
243
+
244
+ The aggregate bundles [`pi-provider-qoder`](https://github.com/simonsmh/pi-provider-qoder) version 0.5.0 under its original package name. npm metadata and the repository README declare the MIT license. The published tarball does not include a LICENSE file. The published package corresponds to git commit [`2e29cbbda03862e20f216c5ecbb6c6042a6cabd7`](https://github.com/simonsmh/pi-provider-qoder/commit/2e29cbbda03862e20f216c5ecbb6c6042a6cabd7).
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.19.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#273](https://github.com/HerbertGao/pi-extensions/pull/273) [`e6ee379`](https://github.com/HerbertGao/pi-extensions/commit/e6ee379393c9f5dde67955d4c28da650835d857f) Thanks [@HerbertGao](https://github.com/HerbertGao)! - Rebase `@herbertgao/pi-subagents` onto upstream v0.20.0 (`13106ab`) and adopt upstream's own mention-clone rewrite: the clone takes its history through `SessionManager.inMemory` and receives the live system prompt through a `DefaultResourceLoader` override instead of the previous context-projection path. The local behavior that hands the spawn the main session's context augmented with the clone's `tools` and `executeTool` is retained, so mentioned agents keep Pi 1.x tool-call capabilities while staying attributed to the main session.
8
+
9
+ Two local patches remain because their upstream pull requests are still open: preserving a worktree when cleanup fails (`tintinweb/pi-subagents#268`, with the refused `--no-gpg-sign` preservation commit) and retaining unconsumed terminal results past the automatic cleanup timer (`tintinweb/pi-subagents#348`). Upstream now declares `typebox` as a host-provided peer and drops `@sinclair/typebox` from runtime dependencies. No installed configuration, credentials, or sessions are migrated.
10
+
3
11
  ## 0.18.5
4
12
 
5
13
  ### Patch Changes
@@ -47,7 +47,7 @@ Or load directly for development:
47
47
  pi -e ./src/index.ts
48
48
  ```
49
49
 
50
- Requires pi **0.84.0 or newer**: the [`SubagentWorkflow`](#subagentworkflow) tool builds on `constrainedSampling` (pi 0.82.0) and pi-tui's `stripTerminalSequences` (0.84.0). The `peerDependencies` range declares it, so npm flags an older pi at install time.
50
+ Requires pi **1.1.0 or newer**: pi 0.86 and 0.87 moved the system prompt and conversation history into the session transcript, and the `@handle` conversation clone and the agent transcript files are built on that model. The `peerDependencies` range declares it, so npm flags an older pi at install time.
51
51
 
52
52
  ### Other hosts
53
53
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herbertgao/pi-subagents",
3
- "version": "0.18.5",
3
+ "version": "0.19.0",
4
4
  "description": "Claude Code-style autonomous subagents and workflow orchestration for Pi, with HerbertGao-maintained UI extensions.",
5
5
  "keywords": [
6
6
  "agent",
@@ -55,7 +55,6 @@
55
55
  "@earendil-works/pi-ai": "*",
56
56
  "@earendil-works/pi-coding-agent": "*",
57
57
  "@earendil-works/pi-tui": "*",
58
- "@sinclair/typebox": "*",
59
58
  "typebox": "*"
60
59
  },
61
60
  "engines": {
@@ -70,9 +69,9 @@
70
69
  },
71
70
  "x-upstream": {
72
71
  "package": "@tintinweb/pi-subagents",
73
- "version": "0.19.0",
74
- "reviewedVersion": "0.19.0",
72
+ "version": "0.20.0",
73
+ "reviewedVersion": "0.20.0",
75
74
  "repository": "https://github.com/tintinweb/pi-subagents",
76
- "commit": "95d10867f391636e6563e3885e972618083f306b"
75
+ "commit": "13106ab6f608b3acc54185da5299ee7fbaabb6b9"
77
76
  }
78
77
  }
@@ -35,7 +35,7 @@ import {
35
35
  Spacer,
36
36
  Text,
37
37
  } from "@earendil-works/pi-tui"
38
- import { Type } from "@sinclair/typebox"
38
+ import { Type } from "typebox"
39
39
  import { abortable } from "./abortable.js"
40
40
  import { hasAgentBadge, renderAgentName } from "./agent-color.js"
41
41
  import {
@@ -1,4 +1,4 @@
1
- import { Type } from "@sinclair/typebox"
1
+ import { Type } from "typebox"
2
2
  import type {
3
3
  AgentConfig,
4
4
  IsolationMode,
@@ -12,31 +12,23 @@
12
12
  * So the turn happens somewhere else. The conversation is cloned into a
13
13
  * throwaway in-memory session — same messages, same system prompt, same model —
14
14
  * and that copy takes the turn off-screen. A literal clone: the session's own
15
- * entries, projected by pi's own `sessionEntryToContextMessages`, not
16
- * `inherit_context`'s text rendering of them.
15
+ * entries, not `inherit_context`'s text rendering of them.
16
+ *
17
+ * Pi builds every request from the session manager, so that is where the
18
+ * clone's history goes: the parent's root-to-leaf entries, handed to
19
+ * `SessionManager.inMemory`. The clone projects them itself, compaction and
20
+ * branch summaries included, so a long conversation clones as what the main
21
+ * model is actually working from. A conversation with nothing in it yet clones
22
+ * to nothing in it yet, which is the correct answer rather than a failure.
17
23
  *
18
24
  * Cloned from memory rather than from the session file, which cannot be relied
19
25
  * on: `SessionManager._persist` withholds every write until the first assistant
20
26
  * message lands, so a fork taken before then reads an empty file and throws.
21
- * `buildSessionContext()` has no such timing, and is compaction-aware — it walks
22
- * the leaf path and substitutes the summary for entries folded into it, so a
23
- * long conversation clones as what the main model is actually working from. A
24
- * conversation with nothing in it yet clones to nothing in it yet, which is the
25
- * correct answer rather than a failure.
26
- *
27
- * It is also the oldest of the equivalent Pi APIs — `buildContextEntries` on
28
- * ReadonlySessionManager and the `sessionEntryToContextMessages` export both
29
- * arrived in 0.80.5 — where this one has been exported unchanged from before
30
- * the declared peer floor, and is the same code path (`byId` is only an index
31
- * cache, so passing it or not cannot change the result). Keeping the floor
32
- * honest costs nothing here: see the `compat-floor-pi` job.
33
27
  *
34
- * Its `thinkingLevel` is NOT used, and is the one place the newer API would be
35
- * better. `getSessionContextSettings` starts at "off" and moves only on an
36
- * explicit `thinking_level_change` entry, so a session where nobody ran
37
- * `/think` reports "off" rather than the level it is really using. Omitting the
38
- * field instead lets `createAgentSession` resolve it from settings, which is
39
- * that real level.
28
+ * The system prompt cannot ride along in those entries. Pi rebuilds it from the
29
+ * session's own options on every request and patches the difference over the
30
+ * transcript, so the parent's prompt would be replaced by the clone's. It goes
31
+ * in through the resource loader's prompt override instead.
40
32
  *
41
33
  * Three details make the spawn belong to the real session rather than the
42
34
  * clone:
@@ -63,8 +55,6 @@
63
55
 
64
56
  import type { Model } from "@earendil-works/pi-ai"
65
57
  import {
66
- buildSessionContext,
67
- convertToLlm,
68
58
  createAgentSession,
69
59
  DefaultResourceLoader,
70
60
  type ExtensionContext,
@@ -74,7 +64,7 @@ import {
74
64
  } from "@earendil-works/pi-coding-agent"
75
65
  import { runInChildSessionContext } from "./child-context.js"
76
66
  import { agentMentionReminder } from "./mention.js"
77
- import type { SubagentType, ThinkingLevel } from "./types.js"
67
+ import type { SubagentType } from "./types.js"
78
68
 
79
69
  export interface MentionCloneOptions {
80
70
  /** The MAIN session's context — what the spawn is attributed to, and the
@@ -156,54 +146,40 @@ export async function runMentionClone(
156
146
  const parentModelRuntime = (
157
147
  ctx.modelRegistry as unknown as { runtime?: unknown }
158
148
  ).runtime
159
- // The conversation as the main session resolves it: compaction applied,
160
- // branch summaries substituted.
161
- const conversation = buildSessionContext(
162
- ctx.sessionManager.getEntries(),
163
- ctx.sessionManager.getLeafId(),
164
- )
165
- // Pi 0.82.0 added this; below it the field is absent and the clone takes
166
- // the settings level instead, which is what a session that never ran
167
- // `/think` is on anyway. Same shim shape as `modelRuntime` below.
168
- const thinkingLevel = (ctx as { thinkingLevel?: ThinkingLevel })
169
- .thinkingLevel
170
- const sessionManager = SessionManager.inMemory(ctx.cwd)
171
- for (const entry of conversation.messages) {
172
- // The live prompt is copied below. Do not replay the parent's system
173
- // messages: newer Pi also stores its tool declarations there.
174
- if ((entry.role as string) === "system") continue
175
- // Summary messages are projections, not appendable session entries.
176
- // Preserve exactly the user message Pi would send for each summary.
177
- if (
178
- entry.role === "compactionSummary" ||
179
- entry.role === "branchSummary"
180
- ) {
181
- for (const message of convertToLlm([entry]))
182
- sessionManager.appendMessage(message)
183
- } else {
184
- sessionManager.appendMessage(entry)
185
- }
186
- }
187
- const systemPrompt = ctx.getSystemPrompt?.()
188
- const created = await runInChildSessionContext(async () => {
189
- const resourceLoader = new DefaultResourceLoader({
190
- cwd: ctx.cwd,
191
- agentDir: getAgentDir(),
192
- extensionFactories: [
193
- (pi) => {
194
- pi.on("before_agent_start", () =>
195
- systemPrompt ? { systemPrompt } : undefined,
196
- )
197
- },
198
- ],
199
- })
200
- await resourceLoader.reload()
201
- return createAgentSession({
149
+ // Absent when the session has no level of its own; the clone then takes the
150
+ // settings level, which is what a session that never ran `/think` is on.
151
+ const thinkingLevel = ctx.thinkingLevel
152
+ // The live system prompt, not the one the clone would build from cwd and
153
+ // agentDir — extensions contribute to it per turn. Everything the loader
154
+ // would add on top (AGENTS.md, skills, APPEND_SYSTEM.md) is already in the
155
+ // rendered prompt, so it is suppressed, as agent-runner does.
156
+ const systemPrompt = ctx.getSystemPrompt()
157
+ const loader = new DefaultResourceLoader({
158
+ cwd: ctx.cwd,
159
+ agentDir: getAgentDir(),
160
+ noExtensions: true,
161
+ noSkills: true,
162
+ noPromptTemplates: true,
163
+ noThemes: true,
164
+ noContextFiles: true,
165
+ systemPromptOverride: (base: string | undefined) => systemPrompt || base,
166
+ appendSystemPromptOverride: () => [],
167
+ })
168
+ await runInChildSessionContext(() => loader.reload())
169
+ const created = await runInChildSessionContext(() =>
170
+ createAgentSession({
202
171
  cwd: ctx.cwd,
203
- // Nothing about the copy is worth persisting, and an in-memory manager
204
- // is also what keeps the real session untouched.
205
- sessionManager,
206
- resourceLoader,
172
+ // The parent's root-to-leaf path, which the clone projects itself:
173
+ // compaction applied, branch summaries substituted. Not `getEntries()`,
174
+ // whose last entry is not the leaf after `/tree` navigation. In memory,
175
+ // so nothing about the copy is persisted and the real session stays
176
+ // untouched.
177
+ sessionManager: SessionManager.inMemory(
178
+ ctx.cwd,
179
+ undefined,
180
+ ctx.sessionManager.getBranch(),
181
+ ),
182
+ resourceLoader: loader,
207
183
  model: ctx.model as Model<never> | undefined,
208
184
  ...(thinkingLevel && { thinkingLevel }),
209
185
  modelRegistry: ctx.modelRegistry,
@@ -220,8 +196,8 @@ export async function runMentionClone(
220
196
  // agent-runner's `tools: sessionTools` beside its nested `customTools`.
221
197
  tools: [cloneAgentTool.name],
222
198
  customTools: [cloneAgentTool],
223
- } as Parameters<typeof createAgentSession>[0])
224
- })
199
+ } as Parameters<typeof createAgentSession>[0]),
200
+ )
225
201
  session = created.session
226
202
 
227
203
  // User text first, reminder after — the order Claude Code's attachment
@@ -6,7 +6,7 @@ import {
6
6
  type ExtensionContext,
7
7
  type ToolDefinition,
8
8
  } from "@earendil-works/pi-coding-agent"
9
- import { Type } from "@sinclair/typebox"
9
+ import { Type } from "typebox"
10
10
  import { abortable } from "./abortable.js"
11
11
  import {
12
12
  buildAgentRegistry,
@@ -122,17 +122,27 @@ export function streamToOutputFile(
122
122
  cwd: string,
123
123
  startIndex?: number,
124
124
  ): () => void {
125
- // Index of the first message this stream is responsible for. A spawn writes
126
- // messages[0] as the initial prompt entry, so it starts at 1. A resume hands
125
+ // Index of the first message this stream is responsible for. A resume hands
127
126
  // in the session's length as of just before the run: the session already
128
127
  // holds every prior turn, and re-emitting those would duplicate history that
129
- // is already in the file.
130
- let writtenCount = startIndex ?? 1
128
+ // is already in the file. A spawn has already written its prompt as the
129
+ // initial entry, so it starts after the first user message — found on the
130
+ // first flush, because pi puts a system message ahead of it and adds both
131
+ // only once the prompt runs.
132
+ let writtenCount = startIndex
131
133
 
132
134
  const flush = () => {
133
135
  const messages = session.messages
136
+ if (writtenCount === undefined) {
137
+ const prompt = messages.findIndex((m) => m.role === "user")
138
+ if (prompt === -1) return
139
+ writtenCount = prompt + 1
140
+ }
134
141
  while (writtenCount < messages.length) {
135
- const msg = messages[writtenCount]
142
+ const msg = messages[writtenCount++]
143
+ // Pi's prompt and tool-loadout records; a Claude Code transcript has no
144
+ // such entry.
145
+ if (msg.role === "system") continue
136
146
  const entry = {
137
147
  isSidechain: true,
138
148
  agentId,
@@ -151,7 +161,6 @@ export function streamToOutputFile(
151
161
  } catch {
152
162
  /* ignore write errors */
153
163
  }
154
- writtenCount++
155
164
  }
156
165
  }
157
166
 
@@ -46,11 +46,14 @@ import { SUBAGENT_TOOL_NAMES } from "../agent-runner.js"
46
46
  *
47
47
  * Our own name, because pi resolves a duplicate registration silently, and
48
48
  * Claude Code's bare `Workflow`, because a port of that tool is what a second
49
- * workflow extension most likely calls itself.
49
+ * workflow extension most likely calls itself. Lowercase `workflow` is the same
50
+ * tool by pi convention: it is what `@quintinshaw/pi-dynamic-workflows`
51
+ * registers, and the match here is exact, so the case has to be listed by hand.
50
52
  */
51
53
  export const FOREIGN_WORKFLOW_TOOL_NAMES: ReadonlySet<string> = new Set([
52
54
  SUBAGENT_TOOL_NAMES.WORKFLOW,
53
55
  "Workflow",
56
+ "workflow",
54
57
  ])
55
58
 
56
59
  /** The fields of a registered tool this decision reads. */
@@ -7,14 +7,15 @@
7
7
  *
8
8
  * ## Which typebox
9
9
  *
10
- * **`typebox`, not `@sinclair/typebox`.** They are different packages and both
11
- * are installed here. `@sinclair/typebox` (0.34) dispatches on a `Kind` symbol
12
- * that a schema arriving over the wire does not carry, so `Value.Check` throws
13
- * `Unknown type` on a plain JSON Schema — and `Type.Unsafe` does not help, it
14
- * stamps a `Kind` that is not registered. `typebox` v1 is a standards JSON
15
- * Schema validator and takes the schema as-is. It is also the package pi itself
16
- * types `ToolDefinition.parameters` against, so the same schema object serves
17
- * both roles with no conversion.
10
+ * **`typebox`, not `@sinclair/typebox`.** They are different packages.
11
+ * `@sinclair/typebox` (0.34) dispatches on a `Kind` symbol that a schema
12
+ * arriving over the wire does not carry, so `Value.Check` throws `Unknown type`
13
+ * on a plain JSON Schema — and `Type.Unsafe` does not help, it stamps a `Kind`
14
+ * that is not registered. `typebox` v1 is a standards JSON Schema validator and
15
+ * takes the schema as-is. It is also the package pi itself types
16
+ * `ToolDefinition.parameters` against and supplies to extensions at runtime
17
+ * (a peer dependency here), so the same schema object serves both roles with no
18
+ * conversion.
18
19
  *
19
20
  * ## Why we validate at all
20
21
  *
@@ -12,7 +12,12 @@ var INHIBIT_APPLICATION_NAME = "pi-caffeinate";
12
12
  var SCREENSAVER_OBJECT_PATHS = ["/org/freedesktop/ScreenSaver", "/ScreenSaver"];
13
13
  var DBUS_CALL_TIMEOUT_MS = 2e3;
14
14
  async function defaultDbusScreenSaverFactory() {
15
- const { sessionBus } = await import("dbus-native");
15
+ const dbus = await import("dbus-native");
16
+ const namespaceSessionBus = "sessionBus" in dbus ? dbus.sessionBus : void 0;
17
+ const sessionBus = typeof namespaceSessionBus === "function" ? namespaceSessionBus : dbus.default?.sessionBus;
18
+ if (typeof sessionBus !== "function") {
19
+ throw new Error("dbus-native did not export sessionBus");
20
+ }
16
21
  return new NativeScreenSaverClient(sessionBus());
17
22
  }
18
23
  var NativeScreenSaverClient = class {