@herbertgao/pi-extensions 2026.8.2 → 2026.8.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 (392) hide show
  1. package/README.md +50 -2
  2. package/examples/pi-footer.json +275 -0
  3. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +6 -8
  4. package/node_modules/@herbertgao/pi-cc-extensions/README.md +5 -7
  5. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.en.svg +101 -0
  6. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +1 -17
  7. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +5 -3
  8. package/node_modules/@herbertgao/pi-cc-extensions/extensions/{utils/agent-summary.ts → feature/agent-summary/core.ts} +37 -35
  9. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{agent-summary.ts → agent-summary/index.ts} +2 -6
  10. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{session-reference.ts → reference/index.ts} +1 -1
  11. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{agent-autocomplete.ts → reference/subagent.ts} +19 -9
  12. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{pi-startup-header.ts → shell/startup-header.ts} +1 -1
  13. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{working-message.ts → shell/working-message.ts} +5 -2
  14. package/node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts +32 -28
  15. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +379 -85
  16. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +727 -0
  17. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/index.ts +65 -775
  18. package/node_modules/@herbertgao/pi-cc-extensions/extensions/{feature → renderer}/markdown-enhance.ts +35 -31
  19. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-hover.ts → mouse/hover.ts} +5 -5
  20. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-interaction.ts → mouse/interaction.ts} +34 -35
  21. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-layout.ts → mouse/layout.ts} +5 -21
  22. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-packets.ts → mouse/packets.ts} +1 -1
  23. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-scroll.ts → mouse/scroll.ts} +48 -37
  24. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/ansi-utils.ts +56 -1
  25. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/diff-renderer.ts +2 -2
  26. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/line-width-safety.ts +1 -1
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-display-utils.ts +12 -0
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/write-execution.ts +1 -2
  29. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-grouping.ts → tool/grouping.ts} +18 -8
  30. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-result.ts → tool/result.ts} +4 -13
  31. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/fullscreen-detect.ts +0 -27
  32. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
  33. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
  34. package/node_modules/@herbertgao/pi-subagents/package.json +2 -2
  35. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +1 -0
  36. package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +3 -1
  37. package/node_modules/@herbertgao/pi-subagents/src/index.ts +33 -35
  38. package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +26 -35
  39. package/node_modules/@herbertgao/pi-subagents/src/prompts.ts +15 -1
  40. package/node_modules/pi-footer/CHANGELOG.md +145 -0
  41. package/node_modules/pi-footer/LICENSE +21 -0
  42. package/node_modules/pi-footer/README.md +354 -0
  43. package/node_modules/pi-footer/package.json +68 -0
  44. package/node_modules/pi-footer/src/cache.ts +106 -0
  45. package/node_modules/pi-footer/src/colors.ts +237 -0
  46. package/node_modules/pi-footer/src/config.ts +202 -0
  47. package/node_modules/pi-footer/src/event-widgets.ts +41 -0
  48. package/node_modules/pi-footer/src/extension-statuses.ts +102 -0
  49. package/node_modules/pi-footer/src/git.ts +135 -0
  50. package/node_modules/pi-footer/src/index.ts +268 -0
  51. package/node_modules/pi-footer/src/metrics.ts +141 -0
  52. package/node_modules/pi-footer/src/presets.ts +383 -0
  53. package/node_modules/pi-footer/src/render.ts +114 -0
  54. package/node_modules/pi-footer/src/separators.ts +52 -0
  55. package/node_modules/pi-footer/src/types.ts +122 -0
  56. package/node_modules/pi-footer/src/ui/color-level-confirm.ts +22 -0
  57. package/node_modules/pi-footer/src/ui/color-options.ts +195 -0
  58. package/node_modules/pi-footer/src/ui/config-lifecycle.ts +61 -0
  59. package/node_modules/pi-footer/src/ui/edit-colors.ts +13 -0
  60. package/node_modules/pi-footer/src/ui/events.ts +35 -0
  61. package/node_modules/pi-footer/src/ui/extension-status-picker.ts +60 -0
  62. package/node_modules/pi-footer/src/ui/extension-statuses.ts +73 -0
  63. package/node_modules/pi-footer/src/ui/fields.ts +252 -0
  64. package/node_modules/pi-footer/src/ui/global-menu.ts +126 -0
  65. package/node_modules/pi-footer/src/ui/helpers.ts +44 -0
  66. package/node_modules/pi-footer/src/ui/layout.ts +17 -0
  67. package/node_modules/pi-footer/src/ui/line-list.ts +19 -0
  68. package/node_modules/pi-footer/src/ui/model.ts +64 -0
  69. package/node_modules/pi-footer/src/ui/navigation.ts +29 -0
  70. package/node_modules/pi-footer/src/ui/option-edit.ts +93 -0
  71. package/node_modules/pi-footer/src/ui/overlay-render.ts +103 -0
  72. package/node_modules/pi-footer/src/ui/screen-context.ts +18 -0
  73. package/node_modules/pi-footer/src/ui/screen-controller.ts +27 -0
  74. package/node_modules/pi-footer/src/ui/screen-render.ts +32 -0
  75. package/node_modules/pi-footer/src/ui/screen-state.ts +20 -0
  76. package/node_modules/pi-footer/src/ui/screen.ts +243 -0
  77. package/node_modules/pi-footer/src/ui/screens/add-widget.ts +92 -0
  78. package/node_modules/pi-footer/src/ui/screens/confirm-exit.ts +52 -0
  79. package/node_modules/pi-footer/src/ui/screens/controller.ts +12 -0
  80. package/node_modules/pi-footer/src/ui/screens/edit-colors.ts +68 -0
  81. package/node_modules/pi-footer/src/ui/screens/edit-widget.ts +115 -0
  82. package/node_modules/pi-footer/src/ui/screens/extension-status-row.ts +61 -0
  83. package/node_modules/pi-footer/src/ui/screens/global.ts +75 -0
  84. package/node_modules/pi-footer/src/ui/screens/line-list.ts +108 -0
  85. package/node_modules/pi-footer/src/ui/screens/main.ts +99 -0
  86. package/node_modules/pi-footer/src/ui/screens/terminal.ts +121 -0
  87. package/node_modules/pi-footer/src/ui/screens/widget-list.ts +154 -0
  88. package/node_modules/pi-footer/src/ui/terminal-menu.ts +32 -0
  89. package/node_modules/pi-footer/src/ui/theme.ts +48 -0
  90. package/node_modules/pi-footer/src/ui/title-bar.ts +100 -0
  91. package/node_modules/pi-footer/src/ui/widget-actions.ts +76 -0
  92. package/node_modules/pi-footer/src/ui.ts +66 -0
  93. package/node_modules/pi-footer/src/widgets/context.ts +28 -0
  94. package/node_modules/pi-footer/src/widgets/core/active-tools.ts +17 -0
  95. package/node_modules/pi-footer/src/widgets/core/context-window.ts +24 -0
  96. package/node_modules/pi-footer/src/widgets/core/cwd-basename.ts +19 -0
  97. package/node_modules/pi-footer/src/widgets/core/cwd.ts +108 -0
  98. package/node_modules/pi-footer/src/widgets/core/event.ts +34 -0
  99. package/node_modules/pi-footer/src/widgets/core/external-status.ts +102 -0
  100. package/node_modules/pi-footer/src/widgets/core/model-provider.ts +20 -0
  101. package/node_modules/pi-footer/src/widgets/core/model.ts +35 -0
  102. package/node_modules/pi-footer/src/widgets/core/provider.ts +17 -0
  103. package/node_modules/pi-footer/src/widgets/core/session-name.ts +17 -0
  104. package/node_modules/pi-footer/src/widgets/core/text-verbosity.ts +17 -0
  105. package/node_modules/pi-footer/src/widgets/core/thinking-level.ts +17 -0
  106. package/node_modules/pi-footer/src/widgets/git/ahead-behind.ts +17 -0
  107. package/node_modules/pi-footer/src/widgets/git/branch.ts +81 -0
  108. package/node_modules/pi-footer/src/widgets/git/clean.ts +19 -0
  109. package/node_modules/pi-footer/src/widgets/git/deletions.ts +17 -0
  110. package/node_modules/pi-footer/src/widgets/git/diff.ts +38 -0
  111. package/node_modules/pi-footer/src/widgets/git/insertions.ts +17 -0
  112. package/node_modules/pi-footer/src/widgets/git/remote.ts +17 -0
  113. package/node_modules/pi-footer/src/widgets/git/root.ts +17 -0
  114. package/node_modules/pi-footer/src/widgets/git/sha.ts +17 -0
  115. package/node_modules/pi-footer/src/widgets/git/staged.ts +17 -0
  116. package/node_modules/pi-footer/src/widgets/git/status.ts +19 -0
  117. package/node_modules/pi-footer/src/widgets/git/unstaged.ts +17 -0
  118. package/node_modules/pi-footer/src/widgets/git/untracked.ts +17 -0
  119. package/node_modules/pi-footer/src/widgets/instance.ts +118 -0
  120. package/node_modules/pi-footer/src/widgets/layout/custom-text.ts +18 -0
  121. package/node_modules/pi-footer/src/widgets/layout/flex-separator.ts +32 -0
  122. package/node_modules/pi-footer/src/widgets/layout/separator.ts +57 -0
  123. package/node_modules/pi-footer/src/widgets/layout/spacer.ts +31 -0
  124. package/node_modules/pi-footer/src/widgets/options.ts +122 -0
  125. package/node_modules/pi-footer/src/widgets/project/runtime.ts +361 -0
  126. package/node_modules/pi-footer/src/widgets/registry.ts +223 -0
  127. package/node_modules/pi-footer/src/widgets/session/assistant-messages.ts +17 -0
  128. package/node_modules/pi-footer/src/widgets/session/compactions.ts +17 -0
  129. package/node_modules/pi-footer/src/widgets/session/elapsed.ts +18 -0
  130. package/node_modules/pi-footer/src/widgets/session/last-activity.ts +18 -0
  131. package/node_modules/pi-footer/src/widgets/session/messages.ts +19 -0
  132. package/node_modules/pi-footer/src/widgets/session/session-id.ts +17 -0
  133. package/node_modules/pi-footer/src/widgets/session/session-start.ts +18 -0
  134. package/node_modules/pi-footer/src/widgets/session/tool-results.ts +17 -0
  135. package/node_modules/pi-footer/src/widgets/session/total-messages.ts +19 -0
  136. package/node_modules/pi-footer/src/widgets/session/total-time.ts +18 -0
  137. package/node_modules/pi-footer/src/widgets/session/user-messages.ts +17 -0
  138. package/node_modules/pi-footer/src/widgets/store.ts +26 -0
  139. package/node_modules/pi-footer/src/widgets/tokens/cache-hit-rate.ts +55 -0
  140. package/node_modules/pi-footer/src/widgets/tokens/cache-read.ts +18 -0
  141. package/node_modules/pi-footer/src/widgets/tokens/cache-write.ts +18 -0
  142. package/node_modules/pi-footer/src/widgets/tokens/context-bar.ts +108 -0
  143. package/node_modules/pi-footer/src/widgets/tokens/context-length.ts +26 -0
  144. package/node_modules/pi-footer/src/widgets/tokens/context-remaining.ts +29 -0
  145. package/node_modules/pi-footer/src/widgets/tokens/context.ts +29 -0
  146. package/node_modules/pi-footer/src/widgets/tokens/cost.ts +51 -0
  147. package/node_modules/pi-footer/src/widgets/tokens/input-speed.ts +25 -0
  148. package/node_modules/pi-footer/src/widgets/tokens/input-tokens.ts +18 -0
  149. package/node_modules/pi-footer/src/widgets/tokens/output-speed.ts +25 -0
  150. package/node_modules/pi-footer/src/widgets/tokens/output-tokens.ts +18 -0
  151. package/node_modules/pi-footer/src/widgets/tokens/tokens.ts +20 -0
  152. package/node_modules/pi-footer/src/widgets/tokens/total-speed.ts +25 -0
  153. package/node_modules/pi-footer/src/widgets/tokens/total-tokens.ts +18 -0
  154. package/node_modules/pi-footer/src/widgets/types.ts +181 -0
  155. package/node_modules/pi-footer/src/widgets/utils/colors.ts +11 -0
  156. package/node_modules/pi-footer/src/widgets/utils/context.ts +112 -0
  157. package/node_modules/pi-footer/src/widgets/utils/session.ts +19 -0
  158. package/node_modules/pi-footer/src/widgets/utils/token-format.ts +78 -0
  159. package/node_modules/pi-mcp-adapter/CHANGELOG.md +19 -0
  160. package/node_modules/pi-mcp-adapter/README.md +19 -4
  161. package/node_modules/pi-mcp-adapter/agent-dir.ts +40 -0
  162. package/node_modules/pi-mcp-adapter/commands.ts +12 -2
  163. package/node_modules/pi-mcp-adapter/direct-tools.ts +6 -8
  164. package/node_modules/pi-mcp-adapter/index.ts +15 -3
  165. package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +87 -4
  166. package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +138 -61
  167. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +43 -4
  168. package/node_modules/pi-mcp-adapter/oauth.ts +48 -0
  169. package/node_modules/pi-mcp-adapter/package.json +8 -2
  170. package/node_modules/pi-mcp-adapter/proxy-modes.ts +8 -10
  171. package/node_modules/pi-mcp-adapter/tool-registrar.ts +187 -3
  172. package/node_modules/pi-mcp-adapter/types.ts +2 -0
  173. package/node_modules/pi-web-access/CHANGELOG.md +45 -0
  174. package/node_modules/pi-web-access/README.md +104 -29
  175. package/node_modules/pi-web-access/bocha.ts +221 -0
  176. package/node_modules/pi-web-access/curator-page.ts +113 -12
  177. package/node_modules/pi-web-access/curator-server.ts +56 -20
  178. package/node_modules/pi-web-access/datalab-pdf-extract.ts +568 -0
  179. package/node_modules/pi-web-access/duckduckgo.ts +123 -0
  180. package/node_modules/pi-web-access/extract.ts +288 -143
  181. package/node_modules/pi-web-access/feature-config.ts +29 -0
  182. package/node_modules/pi-web-access/gemini-api.ts +4 -0
  183. package/node_modules/pi-web-access/gemini-search.ts +45 -12
  184. package/node_modules/pi-web-access/gemini-web.ts +68 -3
  185. package/node_modules/pi-web-access/index.ts +160 -71
  186. package/node_modules/pi-web-access/jina-search.ts +284 -0
  187. package/node_modules/pi-web-access/kagi.ts +12 -12
  188. package/node_modules/pi-web-access/openai-search.ts +12 -2
  189. package/node_modules/pi-web-access/package.json +4 -3
  190. package/node_modules/pi-web-access/pdf-extract.ts +327 -228
  191. package/node_modules/pi-web-access/storage.ts +440 -2
  192. package/node_modules/pi-web-access/summary-model-scope.ts +1 -1
  193. package/node_modules/pi-web-access/summary-review.ts +4 -2
  194. package/node_modules/pi-web-access/video-extract.ts +10 -8
  195. package/node_modules/pi-web-access/xai-search.ts +12 -2
  196. package/node_modules/pi-web-access/youtube-extract.ts +2 -1
  197. package/node_modules/remote-pi/LICENSE +21 -0
  198. package/node_modules/remote-pi/README.md +675 -0
  199. package/node_modules/remote-pi/dist/actions/handlers.d.ts +122 -0
  200. package/node_modules/remote-pi/dist/actions/handlers.js +160 -0
  201. package/node_modules/remote-pi/dist/actions/handlers.js.map +1 -0
  202. package/node_modules/remote-pi/dist/actions/registry.d.ts +39 -0
  203. package/node_modules/remote-pi/dist/actions/registry.js +58 -0
  204. package/node_modules/remote-pi/dist/actions/registry.js.map +1 -0
  205. package/node_modules/remote-pi/dist/bin/supervisord.d.ts +2 -0
  206. package/node_modules/remote-pi/dist/bin/supervisord.js +86 -0
  207. package/node_modules/remote-pi/dist/bin/supervisord.js.map +1 -0
  208. package/node_modules/remote-pi/dist/commands/builtin_mirror.d.ts +58 -0
  209. package/node_modules/remote-pi/dist/commands/builtin_mirror.js +71 -0
  210. package/node_modules/remote-pi/dist/commands/builtin_mirror.js.map +1 -0
  211. package/node_modules/remote-pi/dist/commands/list_commands.d.ts +60 -0
  212. package/node_modules/remote-pi/dist/commands/list_commands.js +73 -0
  213. package/node_modules/remote-pi/dist/commands/list_commands.js.map +1 -0
  214. package/node_modules/remote-pi/dist/config.d.ts +62 -0
  215. package/node_modules/remote-pi/dist/config.js +115 -0
  216. package/node_modules/remote-pi/dist/config.js.map +1 -0
  217. package/node_modules/remote-pi/dist/daemon/client.d.ts +20 -0
  218. package/node_modules/remote-pi/dist/daemon/client.js +131 -0
  219. package/node_modules/remote-pi/dist/daemon/client.js.map +1 -0
  220. package/node_modules/remote-pi/dist/daemon/control_protocol.d.ts +176 -0
  221. package/node_modules/remote-pi/dist/daemon/control_protocol.js +63 -0
  222. package/node_modules/remote-pi/dist/daemon/control_protocol.js.map +1 -0
  223. package/node_modules/remote-pi/dist/daemon/cron_log.d.ts +45 -0
  224. package/node_modules/remote-pi/dist/daemon/cron_log.js +72 -0
  225. package/node_modules/remote-pi/dist/daemon/cron_log.js.map +1 -0
  226. package/node_modules/remote-pi/dist/daemon/cron_registry.d.ts +80 -0
  227. package/node_modules/remote-pi/dist/daemon/cron_registry.js +194 -0
  228. package/node_modules/remote-pi/dist/daemon/cron_registry.js.map +1 -0
  229. package/node_modules/remote-pi/dist/daemon/id.d.ts +24 -0
  230. package/node_modules/remote-pi/dist/daemon/id.js +36 -0
  231. package/node_modules/remote-pi/dist/daemon/id.js.map +1 -0
  232. package/node_modules/remote-pi/dist/daemon/install.d.ts +170 -0
  233. package/node_modules/remote-pi/dist/daemon/install.js +547 -0
  234. package/node_modules/remote-pi/dist/daemon/install.js.map +1 -0
  235. package/node_modules/remote-pi/dist/daemon/registry.d.ts +63 -0
  236. package/node_modules/remote-pi/dist/daemon/registry.js +153 -0
  237. package/node_modules/remote-pi/dist/daemon/registry.js.map +1 -0
  238. package/node_modules/remote-pi/dist/daemon/rpc_child.d.ts +194 -0
  239. package/node_modules/remote-pi/dist/daemon/rpc_child.js +389 -0
  240. package/node_modules/remote-pi/dist/daemon/rpc_child.js.map +1 -0
  241. package/node_modules/remote-pi/dist/daemon/supervisor.d.ts +93 -0
  242. package/node_modules/remote-pi/dist/daemon/supervisor.js +596 -0
  243. package/node_modules/remote-pi/dist/daemon/supervisor.js.map +1 -0
  244. package/node_modules/remote-pi/dist/extension_ui_bridge.d.ts +26 -0
  245. package/node_modules/remote-pi/dist/extension_ui_bridge.js +341 -0
  246. package/node_modules/remote-pi/dist/extension_ui_bridge.js.map +1 -0
  247. package/node_modules/remote-pi/dist/index.d.ts +213 -0
  248. package/node_modules/remote-pi/dist/index.js +4996 -0
  249. package/node_modules/remote-pi/dist/index.js.map +1 -0
  250. package/node_modules/remote-pi/dist/mcp/mesh_result.d.ts +10 -0
  251. package/node_modules/remote-pi/dist/mcp/mesh_result.js +42 -0
  252. package/node_modules/remote-pi/dist/mcp/mesh_result.js.map +1 -0
  253. package/node_modules/remote-pi/dist/mcp/mesh_server.d.ts +16 -0
  254. package/node_modules/remote-pi/dist/mcp/mesh_server.js +327 -0
  255. package/node_modules/remote-pi/dist/mcp/mesh_server.js.map +1 -0
  256. package/node_modules/remote-pi/dist/mesh/canonical.d.ts +30 -0
  257. package/node_modules/remote-pi/dist/mesh/canonical.js +61 -0
  258. package/node_modules/remote-pi/dist/mesh/canonical.js.map +1 -0
  259. package/node_modules/remote-pi/dist/mesh/client.d.ts +18 -0
  260. package/node_modules/remote-pi/dist/mesh/client.js +125 -0
  261. package/node_modules/remote-pi/dist/mesh/client.js.map +1 -0
  262. package/node_modules/remote-pi/dist/mesh/encoding.d.ts +38 -0
  263. package/node_modules/remote-pi/dist/mesh/encoding.js +216 -0
  264. package/node_modules/remote-pi/dist/mesh/encoding.js.map +1 -0
  265. package/node_modules/remote-pi/dist/mesh/self_revoke.d.ts +73 -0
  266. package/node_modules/remote-pi/dist/mesh/self_revoke.js +401 -0
  267. package/node_modules/remote-pi/dist/mesh/self_revoke.js.map +1 -0
  268. package/node_modules/remote-pi/dist/mesh/siblings.d.ts +49 -0
  269. package/node_modules/remote-pi/dist/mesh/siblings.js +159 -0
  270. package/node_modules/remote-pi/dist/mesh/siblings.js.map +1 -0
  271. package/node_modules/remote-pi/dist/mesh/types.d.ts +34 -0
  272. package/node_modules/remote-pi/dist/mesh/types.js +11 -0
  273. package/node_modules/remote-pi/dist/mesh/types.js.map +1 -0
  274. package/node_modules/remote-pi/dist/mesh/verify.d.ts +17 -0
  275. package/node_modules/remote-pi/dist/mesh/verify.js +86 -0
  276. package/node_modules/remote-pi/dist/mesh/verify.js.map +1 -0
  277. package/node_modules/remote-pi/dist/pairing/crypto.d.ts +8 -0
  278. package/node_modules/remote-pi/dist/pairing/crypto.js +22 -0
  279. package/node_modules/remote-pi/dist/pairing/crypto.js.map +1 -0
  280. package/node_modules/remote-pi/dist/pairing/handshake.d.ts +28 -0
  281. package/node_modules/remote-pi/dist/pairing/handshake.js +113 -0
  282. package/node_modules/remote-pi/dist/pairing/handshake.js.map +1 -0
  283. package/node_modules/remote-pi/dist/pairing/noise-sha256.d.ts +16 -0
  284. package/node_modules/remote-pi/dist/pairing/noise-sha256.js +103 -0
  285. package/node_modules/remote-pi/dist/pairing/noise-sha256.js.map +1 -0
  286. package/node_modules/remote-pi/dist/pairing/qr.d.ts +59 -0
  287. package/node_modules/remote-pi/dist/pairing/qr.js +125 -0
  288. package/node_modules/remote-pi/dist/pairing/qr.js.map +1 -0
  289. package/node_modules/remote-pi/dist/pairing/storage.d.ts +120 -0
  290. package/node_modules/remote-pi/dist/pairing/storage.js +604 -0
  291. package/node_modules/remote-pi/dist/pairing/storage.js.map +1 -0
  292. package/node_modules/remote-pi/dist/protocol/codec.d.ts +7 -0
  293. package/node_modules/remote-pi/dist/protocol/codec.js +49 -0
  294. package/node_modules/remote-pi/dist/protocol/codec.js.map +1 -0
  295. package/node_modules/remote-pi/dist/protocol/types.d.ts +393 -0
  296. package/node_modules/remote-pi/dist/protocol/types.js +2 -0
  297. package/node_modules/remote-pi/dist/protocol/types.js.map +1 -0
  298. package/node_modules/remote-pi/dist/rooms.d.ts +29 -0
  299. package/node_modules/remote-pi/dist/rooms.js +57 -0
  300. package/node_modules/remote-pi/dist/rooms.js.map +1 -0
  301. package/node_modules/remote-pi/dist/session/address.d.ts +49 -0
  302. package/node_modules/remote-pi/dist/session/address.js +58 -0
  303. package/node_modules/remote-pi/dist/session/address.js.map +1 -0
  304. package/node_modules/remote-pi/dist/session/agent_bridge.d.ts +55 -0
  305. package/node_modules/remote-pi/dist/session/agent_bridge.js +146 -0
  306. package/node_modules/remote-pi/dist/session/agent_bridge.js.map +1 -0
  307. package/node_modules/remote-pi/dist/session/bridge.d.ts +37 -0
  308. package/node_modules/remote-pi/dist/session/bridge.js +130 -0
  309. package/node_modules/remote-pi/dist/session/bridge.js.map +1 -0
  310. package/node_modules/remote-pi/dist/session/broker.d.ts +189 -0
  311. package/node_modules/remote-pi/dist/session/broker.js +507 -0
  312. package/node_modules/remote-pi/dist/session/broker.js.map +1 -0
  313. package/node_modules/remote-pi/dist/session/broker_remote.d.ts +74 -0
  314. package/node_modules/remote-pi/dist/session/broker_remote.js +583 -0
  315. package/node_modules/remote-pi/dist/session/broker_remote.js.map +1 -0
  316. package/node_modules/remote-pi/dist/session/cwd_lock.d.ts +33 -0
  317. package/node_modules/remote-pi/dist/session/cwd_lock.js +126 -0
  318. package/node_modules/remote-pi/dist/session/cwd_lock.js.map +1 -0
  319. package/node_modules/remote-pi/dist/session/envelope.d.ts +33 -0
  320. package/node_modules/remote-pi/dist/session/envelope.js +117 -0
  321. package/node_modules/remote-pi/dist/session/envelope.js.map +1 -0
  322. package/node_modules/remote-pi/dist/session/global_config.d.ts +33 -0
  323. package/node_modules/remote-pi/dist/session/global_config.js +73 -0
  324. package/node_modules/remote-pi/dist/session/global_config.js.map +1 -0
  325. package/node_modules/remote-pi/dist/session/ipc.d.ts +27 -0
  326. package/node_modules/remote-pi/dist/session/ipc.js +22 -0
  327. package/node_modules/remote-pi/dist/session/ipc.js.map +1 -0
  328. package/node_modules/remote-pi/dist/session/leader_election.d.ts +32 -0
  329. package/node_modules/remote-pi/dist/session/leader_election.js +106 -0
  330. package/node_modules/remote-pi/dist/session/leader_election.js.map +1 -0
  331. package/node_modules/remote-pi/dist/session/local_config.d.ts +55 -0
  332. package/node_modules/remote-pi/dist/session/local_config.js +157 -0
  333. package/node_modules/remote-pi/dist/session/local_config.js.map +1 -0
  334. package/node_modules/remote-pi/dist/session/mesh_message.d.ts +20 -0
  335. package/node_modules/remote-pi/dist/session/mesh_message.js +28 -0
  336. package/node_modules/remote-pi/dist/session/mesh_message.js.map +1 -0
  337. package/node_modules/remote-pi/dist/session/mesh_node.d.ts +116 -0
  338. package/node_modules/remote-pi/dist/session/mesh_node.js +573 -0
  339. package/node_modules/remote-pi/dist/session/mesh_node.js.map +1 -0
  340. package/node_modules/remote-pi/dist/session/peer.d.ts +139 -0
  341. package/node_modules/remote-pi/dist/session/peer.js +451 -0
  342. package/node_modules/remote-pi/dist/session/peer.js.map +1 -0
  343. package/node_modules/remote-pi/dist/session/peer_inventory.d.ts +13 -0
  344. package/node_modules/remote-pi/dist/session/peer_inventory.js +48 -0
  345. package/node_modules/remote-pi/dist/session/peer_inventory.js.map +1 -0
  346. package/node_modules/remote-pi/dist/session/peer_limits.d.ts +9 -0
  347. package/node_modules/remote-pi/dist/session/peer_limits.js +21 -0
  348. package/node_modules/remote-pi/dist/session/peer_limits.js.map +1 -0
  349. package/node_modules/remote-pi/dist/session/setup_wizard.d.ts +39 -0
  350. package/node_modules/remote-pi/dist/session/setup_wizard.js +63 -0
  351. package/node_modules/remote-pi/dist/session/setup_wizard.js.map +1 -0
  352. package/node_modules/remote-pi/dist/session/tool_gate.d.ts +5 -0
  353. package/node_modules/remote-pi/dist/session/tool_gate.js +11 -0
  354. package/node_modules/remote-pi/dist/session/tool_gate.js.map +1 -0
  355. package/node_modules/remote-pi/dist/session/tools.d.ts +24 -0
  356. package/node_modules/remote-pi/dist/session/tools.js +252 -0
  357. package/node_modules/remote-pi/dist/session/tools.js.map +1 -0
  358. package/node_modules/remote-pi/dist/session/wizard.d.ts +13 -0
  359. package/node_modules/remote-pi/dist/session/wizard.js +20 -0
  360. package/node_modules/remote-pi/dist/session/wizard.js.map +1 -0
  361. package/node_modules/remote-pi/dist/settings.d.ts +15 -0
  362. package/node_modules/remote-pi/dist/settings.js +52 -0
  363. package/node_modules/remote-pi/dist/settings.js.map +1 -0
  364. package/node_modules/remote-pi/dist/transport/peer_channel.d.ts +37 -0
  365. package/node_modules/remote-pi/dist/transport/peer_channel.js +98 -0
  366. package/node_modules/remote-pi/dist/transport/peer_channel.js.map +1 -0
  367. package/node_modules/remote-pi/dist/transport/pi_forward_client.d.ts +29 -0
  368. package/node_modules/remote-pi/dist/transport/pi_forward_client.js +62 -0
  369. package/node_modules/remote-pi/dist/transport/pi_forward_client.js.map +1 -0
  370. package/node_modules/remote-pi/dist/transport/relay_client.d.ts +91 -0
  371. package/node_modules/remote-pi/dist/transport/relay_client.js +206 -0
  372. package/node_modules/remote-pi/dist/transport/relay_client.js.map +1 -0
  373. package/node_modules/remote-pi/dist/ui/footer.d.ts +32 -0
  374. package/node_modules/remote-pi/dist/ui/footer.js +34 -0
  375. package/node_modules/remote-pi/dist/ui/footer.js.map +1 -0
  376. package/node_modules/remote-pi/docs/daemon.md +289 -0
  377. package/node_modules/remote-pi/package.json +88 -0
  378. package/node_modules/remote-pi/service-templates/launchd.plist.template +35 -0
  379. package/node_modules/remote-pi/service-templates/systemd.service.template +19 -0
  380. package/node_modules/remote-pi/service-templates/task-launcher.vbs.template +10 -0
  381. package/node_modules/remote-pi/service-templates/task-scheduler.xml.template +38 -0
  382. package/node_modules/remote-pi/skills/agent-network/SKILL.md +310 -0
  383. package/package.json +25 -10
  384. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool-diff/write-display-utils.ts +0 -29
  385. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{session-reference-core.ts → reference/session.ts} +0 -0
  386. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{pi-aliases.ts → shell/aliases.ts} +0 -0
  387. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/ATTRIBUTION.md +0 -0
  388. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/diff-presentation.ts +0 -0
  389. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/index.ts +0 -0
  390. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/render-utils.ts +0 -0
  391. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/shiki-highlight.ts +0 -0
  392. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/types.ts +0 -0
@@ -1,26 +1,24 @@
1
1
  /**
2
2
  * Agent 回合摘要:统计一次 agent 运行的工具使用并格式化成摘要文本。
3
3
  *
4
- * 统计口径参考已删除的 compact-style(ea64df0 "sunset fixed-editor and compact
5
- * mode"):read 按文件去重、edit/write 按文件去重、bash 计命令数、其余工具计数、
6
- * 失败计数、回合耗时。与旧实现一致,`read`/`edit`/`write` 只认精确的工具名
7
- * (MCP 风格 `server__read` 归入 other)。
4
+ * 分类:bash / read / edit / write / other(精确工具名;MCP 风格名归 other)。
5
+ * 计数:bash 按调用次数;read/edit/write 按非空 path/file_path 去重;other 按调用次数。
6
+ * 失败单独累计;另记回合耗时。
8
7
  *
9
- * 呈现:`summaryLine` 输出纯文本(旧格式),`summaryMarkdown` 输出 Markdown
10
- * 增强版——加粗统计词,box 模式包 `> [!TIP]` 提示框(由 markdown-enhance 渲染
11
- * 成带图标的表格框),供当前 Markdown 渲染管线使用。
8
+ * 呈现:`summaryLine` 纯文本,`summaryMarkdown` Markdown(可 box 引用块)。
12
9
  */
13
10
 
14
11
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
15
12
 
16
- /** 工具分类,与旧 compact-style 统计口径一致。 */
17
- export type AgentToolCategory = "read" | "edit" | "bash" | "other";
13
+ /** 工具分类。 */
14
+ export type AgentToolCategory = "bash" | "read" | "edit" | "write" | "other";
18
15
 
19
16
  /** 一次 agent 回合的统计快照。 */
20
17
  export type AgentSummaryData = {
18
+ commands: number;
21
19
  reads: number;
22
20
  edits: number;
23
- commands: number;
21
+ writes: number;
24
22
  others: number;
25
23
  failed: number;
26
24
  durationMs: number;
@@ -28,9 +26,10 @@ export type AgentSummaryData = {
28
26
 
29
27
  export function classifyTool(toolName: string): AgentToolCategory {
30
28
  const base = toolName.split(".").pop() ?? toolName;
31
- if (base === "read") return "read";
32
- if (base === "edit" || base === "write") return "edit";
33
29
  if (base === "bash") return "bash";
30
+ if (base === "read") return "read";
31
+ if (base === "edit") return "edit";
32
+ if (base === "write") return "write";
34
33
  return "other";
35
34
  }
36
35
 
@@ -38,12 +37,18 @@ function nonEmptyString(value: unknown): value is string {
38
37
  return typeof value === "string" && value.length > 0;
39
38
  }
40
39
 
40
+ function toolPath(args?: Record<string, unknown> | null): string | undefined {
41
+ if (nonEmptyString(args?.path)) return args.path;
42
+ return nonEmptyString(args?.file_path) ? args.file_path : undefined;
43
+ }
44
+
41
45
  /** 累积一次 agent 回合的工具统计;agent_start 时新建实例。 */
42
46
  export class AgentRunSummary {
43
47
  toolCount = 0;
48
+ commandCount = 0;
44
49
  readFiles = new Set<string>();
45
50
  editFiles = new Set<string>();
46
- commandCount = 0;
51
+ writeFiles = new Set<string>();
47
52
  otherCount = 0;
48
53
  failedCount = 0;
49
54
 
@@ -56,16 +61,19 @@ export class AgentRunSummary {
56
61
  /** tool_execution_start 时调用。 */
57
62
  recordToolStart(toolName: string, args?: Record<string, unknown> | null): void {
58
63
  this.toolCount++;
59
- const path = args?.path ?? args?.file_path;
64
+ const path = toolPath(args);
60
65
  switch (classifyTool(toolName)) {
66
+ case "bash":
67
+ this.commandCount++;
68
+ break;
61
69
  case "read":
62
- if (nonEmptyString(path)) this.readFiles.add(path);
70
+ if (path) this.readFiles.add(path);
63
71
  break;
64
72
  case "edit":
65
- if (nonEmptyString(path)) this.editFiles.add(path);
73
+ if (path) this.editFiles.add(path);
66
74
  break;
67
- case "bash":
68
- this.commandCount++;
75
+ case "write":
76
+ if (path) this.writeFiles.add(path);
69
77
  break;
70
78
  default:
71
79
  this.otherCount++;
@@ -79,9 +87,10 @@ export class AgentRunSummary {
79
87
 
80
88
  snapshot(now = Date.now()): AgentSummaryData {
81
89
  return {
90
+ commands: this.commandCount,
82
91
  reads: this.readFiles.size,
83
92
  edits: this.editFiles.size,
84
- commands: this.commandCount,
93
+ writes: this.writeFiles.size,
85
94
  others: this.otherCount,
86
95
  failed: this.failedCount,
87
96
  durationMs: now - this.startedAt,
@@ -103,17 +112,19 @@ export function formatDuration(ms: number): string {
103
112
 
104
113
  const plural = (count: number) => (count === 1 ? "" : "s");
105
114
 
115
+ /** 输出顺序:bash → read → edit → write → other → failed。 */
106
116
  function summaryParts(data: AgentSummaryData): string[] {
107
117
  const parts: string[] = [];
118
+ if (data.commands) parts.push(`ran ${data.commands} command${plural(data.commands)}`);
108
119
  if (data.reads) parts.push(`read ${data.reads} file${plural(data.reads)}`);
109
120
  if (data.edits) parts.push(`edited ${data.edits} file${plural(data.edits)}`);
121
+ if (data.writes) parts.push(`wrote ${data.writes} file${plural(data.writes)}`);
110
122
  if (data.others) parts.push(`${data.others} other tool${plural(data.others)}`);
111
- if (data.commands) parts.push(`ran ${data.commands} command${plural(data.commands)}`);
112
123
  if (data.failed) parts.push(`${data.failed} failed`);
113
124
  return parts;
114
125
  }
115
126
 
116
- /** 纯文本摘要行(旧 compact-style 格式):"Read 3 files, edited 2 files · 42s"。 */
127
+ /** 纯文本摘要行:句首大写 + 可选耗时。 */
117
128
  export function summaryLine(data: AgentSummaryData): string {
118
129
  const parts = summaryParts(data);
119
130
  if (parts.length === 0) return "";
@@ -125,13 +136,8 @@ export function summaryLine(data: AgentSummaryData): string {
125
136
 
126
137
  /**
127
138
  * Markdown 摘要行。
128
- * `box` 为 true:markdown 引用块 `> *斜体内容*`(渲染为引用,主题 mdQuote=muted 即灰色,
129
- * 内容斜体)。entry renderer 场景直接用。
130
- * `box` 为 false:整体加粗单行。
131
- * `colors`:成功/失败计数的 ANSI 前缀,取自主题(`theme.getFgAnsi("success")` /
132
- * `theme.getFgAnsi("error")`),缺省不染色。仅数字染色:成功计数的数字染
133
- * success 色、failed 计数的数字染 error 色,文本与时长不染色。颜色 span 以
134
- * `\x1b[0m` 复位,引用块渲染器会在复位后重贴引用样式,后续文本不受影响。
139
+ * `box` 为 true:引用块 `> *斜体*`;false:整体加粗。
140
+ * `colors`:仅数字染色(success / failed)。
135
141
  */
136
142
  export function summaryMarkdown(
137
143
  data: AgentSummaryData,
@@ -140,12 +146,10 @@ export function summaryMarkdown(
140
146
  ): string {
141
147
  const parts = summaryParts(data);
142
148
  if (parts.length === 0) return "";
143
- // 仅首段动词大写(与纯文本版“句首大写”一致)
144
149
  const capitalizeFirst = (part: string, first: boolean) => {
145
150
  const verb = part.match(/^[a-z]+/)?.[0] ?? "";
146
151
  return first && verb ? verb[0].toUpperCase() + verb.slice(1) + part.slice(verb.length) : part;
147
152
  };
148
- // 仅染数字:`Read 2 files` → `Read <色>2</色> files`
149
153
  const paintNumber = (code: string, part: string) =>
150
154
  code ? part.replace(/(\d+)/, `${code}$1\x1b[0m`) : part;
151
155
  const text = parts
@@ -159,11 +163,9 @@ export function summaryMarkdown(
159
163
 
160
164
  /**
161
165
  * 绑定 pi 事件到摘要统计:
162
- * - agent_start 重置统计
163
- * - tool_execution_start / tool_execution_end 累计
164
- * - agent_end 时回调快照(工具数 < minToolCount 不回调:单工具行本身已是摘要)
165
- *
166
- * 返回取消函数:清除当前统计引用(pi.on 不支持解绑,取消后不再产生回调)。
166
+ * - agent_start 重置
167
+ * - tool_execution_start / end 累计
168
+ * - agent_end 回调(toolCount < minToolCount 跳过)
167
169
  */
168
170
  export function bindAgentSummary(
169
171
  pi: ExtensionAPI,
@@ -2,7 +2,7 @@
2
2
  * Agent 回合摘要展示:agent_end 时把本回合工具统计写入会话条目,
3
3
  * 由 entry renderer 渲染为 markdown 引用块 `> [!TIP] *斜体内容*`。
4
4
  *
5
- * 统计复用 utils/agent-summary.ts(口径同旧 compact-style,ea64df0 删除)。
5
+ * 统计复用 ./core.ts(bash/read/edit/write/other)。
6
6
  * appendEntry 不进 LLM 上下文,只显示在聊天区。
7
7
  * 引用块文字色取主题 mdQuote(cc 主题下为 muted 灰),内容用 *斜体* 语法。
8
8
  */
@@ -10,11 +10,7 @@
10
10
  import { Markdown } from "@earendil-works/pi-tui";
11
11
  import { getMarkdownTheme } from "@earendil-works/pi-coding-agent";
12
12
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
13
- import {
14
- bindAgentSummary,
15
- summaryMarkdown,
16
- type AgentSummaryData,
17
- } from "../utils/agent-summary.ts";
13
+ import { bindAgentSummary, summaryMarkdown, type AgentSummaryData } from "./core.ts";
18
14
 
19
15
  export const AGENT_SUMMARY_ENTRY_TYPE = "agent-summary";
20
16
 
@@ -20,7 +20,7 @@ import {
20
20
  sessionTitle,
21
21
  type ReferenceSessionInfo,
22
22
  type ReferenceSource,
23
- } from "./session-reference-core.ts";
23
+ } from "./session.ts";
24
24
 
25
25
  const MAX_SESSION_SUGGESTIONS = 3;
26
26
  const MAX_FILE_SUGGESTIONS = 7;
@@ -23,8 +23,8 @@ const MAX_SUGGESTIONS = 2;
23
23
  const AGENT_NAME_PATTERN = /(?:^|[\t ])@((?:[^\s:@][^\s:]*)?)$/;
24
24
 
25
25
  function getAgentDir(): string {
26
- const override = process.env.PI_CODING_AGENT_DIR;
27
- return join(override ? override : homedir(), ".pi", "agent", "agents");
26
+ const root = process.env.PI_CODING_AGENT_DIR ?? join(homedir(), ".pi", "agent");
27
+ return join(root, "agents");
28
28
  }
29
29
 
30
30
  function parseFrontmatter(content: string): Record<string, string> {
@@ -41,23 +41,34 @@ function parseFrontmatter(content: string): Record<string, string> {
41
41
  function loadAgents(): AgentInfo[] {
42
42
  const dir = getAgentDir();
43
43
  if (!existsSync(dir)) return [];
44
+ let files: string[];
45
+ try {
46
+ files = readdirSync(dir);
47
+ } catch {
48
+ return [];
49
+ }
44
50
 
45
- return readdirSync(dir)
46
- .filter((f) => f.endsWith(".md"))
47
- .map((file) => {
51
+ const agents: AgentInfo[] = [];
52
+ for (const file of files) {
53
+ if (!file.endsWith(".md")) continue;
54
+ try {
48
55
  const filePath = join(dir, file);
49
56
  const content = readFileSync(filePath, "utf-8");
50
57
  const fm = parseFrontmatter(content);
51
58
  const name = file.replace(/\.md$/, "");
52
- return {
59
+ agents.push({
53
60
  name,
54
61
  displayName: fm.display_name || name,
55
62
  description: fm.description || "",
56
63
  model: fm.model,
57
64
  thinking: fm.thinking,
58
65
  filePath,
59
- };
60
- });
66
+ });
67
+ } catch {
68
+ // One unreadable agent file must not break autocomplete or prompt submission.
69
+ }
70
+ }
71
+ return agents;
61
72
  }
62
73
 
63
74
  export function createAgentAutocompleteProvider(
@@ -184,7 +195,6 @@ export default function agentAutocompleteExtension(pi: ExtensionAPI): void {
184
195
 
185
196
  const agentMap = new Map(agents.map((a) => [a.name, a]));
186
197
  const agentList = mentions.map((n) => `"${n}" (${agentMap.get(n)!.displayName})`).join(", ");
187
- const agentTypes = mentions.map((n) => `"${n}"`).join(" | ");
188
198
 
189
199
  return {
190
200
  systemPrompt:
@@ -1,7 +1,7 @@
1
1
  import { VERSION, type AppKeybinding } from "@earendil-works/pi-coding-agent";
2
2
  import { getKeybindings } from "@earendil-works/pi-tui";
3
3
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
4
- import { config } from "../config/config.ts";
4
+ import { config } from "../../config/config.ts";
5
5
 
6
6
  type Rgb = [number, number, number];
7
7
  type StyledPart = {
@@ -87,7 +87,10 @@ export default function (pi: ExtensionAPI): void {
87
87
  }
88
88
 
89
89
  function buildWorkingMessage(): string {
90
- const elapsed = Date.now() - (agentStartTime || turnStartTime);
90
+ if (!turnActive) return "";
91
+ const startedAt = agentStartTime || turnStartTime;
92
+ if (!startedAt) return "";
93
+ const elapsed = Date.now() - startedAt;
91
94
  const tokens = tokenCount();
92
95
  const parts: string[] = [];
93
96
  if (tokens > 0) parts.push(`↓ ${formatCount(tokens)} tokens`);
@@ -185,7 +188,7 @@ export default function (pi: ExtensionAPI): void {
185
188
  } else if (evt.type === "done") {
186
189
  resetResponseTracking(evt.message);
187
190
  } else if (evt.type === "error") {
188
- resetResponseTracking(evt.error);
191
+ resetResponseTracking();
189
192
  } else {
190
193
  updateProviderUsage(evt.partial);
191
194
  }
@@ -1,43 +1,47 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
- import agentAutocomplete from "./feature/agent-autocomplete.ts";
3
- import agentSummary from "./feature/agent-summary.ts";
4
- import claudeCodeStyle, { getCompactThinkingConfig } from "./renderer/index.ts";
2
+
3
+ // shell
4
+ import piAliases from "./feature/shell/aliases.ts";
5
+ import piStartupHeader from "./feature/shell/startup-header.ts";
6
+ import workingMessage from "./feature/shell/working-message.ts";
7
+
8
+ // feature
9
+ import agentAutocomplete from "./feature/reference/subagent.ts";
10
+ import agentSummary from "./feature/agent-summary/index.ts";
11
+ import context from "./feature/context.ts";
12
+ import sessionReference from "./feature/reference/index.ts";
5
13
  import {
6
14
  installCompactThinking,
7
15
  type CompactThinkingController,
8
16
  } from "./feature/compact-thinking.ts";
9
- import context from "./feature/context.ts";
10
- import markdownEnhance from "./feature/markdown-enhance.ts";
11
- import piAliases from "./feature/pi-aliases.ts";
12
- import piStartupHeader from "./feature/pi-startup-header.ts";
13
- import sessionReference from "./feature/session-reference.ts";
14
- import workingMessage from "./feature/working-message.ts";
17
+
18
+ // renderer
19
+ import claudeCodeStyle, { getCompactThinkingConfig } from "./renderer/index.ts";
20
+ import markdownEnhance from "./renderer/markdown-enhance.ts";
15
21
 
16
22
  export default function (pi: ExtensionAPI): void {
23
+ // shell chrome
17
24
  piAliases(pi);
18
25
  piStartupHeader(pi);
19
- markdownEnhance(pi);
26
+ workingMessage(pi);
27
+
28
+ // Renderer 必须先注册 lifecycle handler,shutdown 时才能先解开外层 compact
29
+ // patch;bridge 让稍后安装的 thinking controller 仍可直接供 renderer query。
20
30
  let compactThinking: CompactThinkingController | undefined;
21
- const compactThinkingBridge: CompactThinkingController = {
22
- updateConfig(next) {
23
- compactThinking?.updateConfig(next);
24
- },
25
- getMessageThinkingDurationMs(messageTimestamp) {
26
- return compactThinking?.getMessageThinkingDurationMs?.(messageTimestamp);
27
- },
28
- isMessageThinkingActive(messageTimestamp) {
29
- return compactThinking?.isMessageThinkingActive?.(messageTimestamp) ?? false;
30
- },
31
- getThinkingAnimationFrame() {
32
- return compactThinking?.getThinkingAnimationFrame?.() ?? 0;
33
- },
34
- setCompactSummaryActive(active) {
35
- compactThinking?.setCompactSummaryActive?.(active);
36
- },
31
+ const compactThinkingQuery: CompactThinkingController = {
32
+ updateConfig: (next) => compactThinking?.updateConfig(next),
33
+ getMessageThinkingDurationMs: (timestamp) =>
34
+ compactThinking?.getMessageThinkingDurationMs?.(timestamp),
35
+ isMessageThinkingActive: (timestamp) =>
36
+ compactThinking?.isMessageThinkingActive?.(timestamp) ?? false,
37
+ getThinkingAnimationFrame: () => compactThinking?.getThinkingAnimationFrame?.() ?? 0,
38
+ setCompactSummaryActive: (active) => compactThinking?.setCompactSummaryActive?.(active),
37
39
  };
38
- claudeCodeStyle(pi, undefined, compactThinkingBridge);
40
+ markdownEnhance(pi);
41
+ claudeCodeStyle(pi, undefined, compactThinkingQuery);
39
42
  compactThinking = installCompactThinking(pi, getCompactThinkingConfig());
40
- workingMessage(pi);
43
+
44
+ // features
41
45
  context(pi);
42
46
  sessionReference(pi);
43
47
  agentAutocomplete(pi);