@herbertgao/pi-extensions 2026.8.1 → 2026.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/README.md +13 -3
  2. package/node_modules/@czottmann/pi-automode/README.md +16 -2
  3. package/node_modules/@czottmann/pi-automode/docs/GLOSSARY.md +35 -0
  4. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +18 -9
  5. package/node_modules/@czottmann/pi-automode/docs/defaults.md +6 -2
  6. package/node_modules/@czottmann/pi-automode/examples/automode.local.json +6 -0
  7. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/classifier.ts +11 -7
  8. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +100 -0
  9. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +32 -0
  10. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +78 -3
  11. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +16 -4
  12. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +23 -1
  13. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +22 -1
  14. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/types.ts +18 -2
  15. package/node_modules/@czottmann/pi-automode/package.json +4 -4
  16. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-audit.md +5 -0
  17. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-debt.md +5 -0
  18. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-gain.md +5 -0
  19. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-help.md +5 -0
  20. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail-review.md +5 -0
  21. package/node_modules/@dietrichgebert/ponytail/.opencode/command/ponytail.md +5 -0
  22. package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail-frontmatter.cjs +23 -0
  23. package/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs +99 -0
  24. package/node_modules/@dietrichgebert/ponytail/.qoder/rules/ponytail.md +30 -0
  25. package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +16 -0
  26. package/node_modules/@dietrichgebert/ponytail/AGENTS.md +32 -0
  27. package/node_modules/@dietrichgebert/ponytail/LICENSE +21 -0
  28. package/node_modules/@dietrichgebert/ponytail/README.es.md +298 -0
  29. package/node_modules/@dietrichgebert/ponytail/README.ko.md +315 -0
  30. package/node_modules/@dietrichgebert/ponytail/README.md +351 -0
  31. package/node_modules/@dietrichgebert/ponytail/assets/benchmark-3model.svg +21 -0
  32. package/node_modules/@dietrichgebert/ponytail/assets/benchmark-agentic.svg +62 -0
  33. package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.png +0 -0
  34. package/node_modules/@dietrichgebert/ponytail/assets/logo-dark.svg +115 -0
  35. package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt-dark.svg +27 -0
  36. package/node_modules/@dietrichgebert/ponytail/assets/logo-greenpt.svg +27 -0
  37. package/node_modules/@dietrichgebert/ponytail/assets/logo.png +0 -0
  38. package/node_modules/@dietrichgebert/ponytail/assets/social-preview.png +0 -0
  39. package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-es.png +0 -0
  40. package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner-ko.png +0 -0
  41. package/node_modules/@dietrichgebert/ponytail/assets/waitlist-banner.png +0 -0
  42. package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +44 -0
  43. package/node_modules/@dietrichgebert/ponytail/hooks/copilot-hooks.json +21 -0
  44. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +96 -0
  45. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-config.js +169 -0
  46. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-instructions.js +98 -0
  47. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-mode-tracker.js +130 -0
  48. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +85 -0
  49. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-statusline.ps1 +24 -0
  50. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-statusline.sh +18 -0
  51. package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-subagent.js +77 -0
  52. package/node_modules/@dietrichgebert/ponytail/hooks/qoder-hooks.json +26 -0
  53. package/node_modules/@dietrichgebert/ponytail/package.json +47 -0
  54. package/node_modules/@dietrichgebert/ponytail/pi-extension/index.js +211 -0
  55. package/node_modules/@dietrichgebert/ponytail/pi-extension/package.json +8 -0
  56. package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +60 -0
  57. package/node_modules/@dietrichgebert/ponytail/skills/ponytail/SKILL.md +120 -0
  58. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-audit/SKILL.md +41 -0
  59. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-debt/SKILL.md +44 -0
  60. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-gain/SKILL.md +50 -0
  61. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-help/SKILL.md +71 -0
  62. package/node_modules/@dietrichgebert/ponytail/skills/ponytail-review/SKILL.md +57 -0
  63. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +6 -10
  64. package/node_modules/@herbertgao/pi-cc-extensions/README.md +5 -9
  65. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.en.svg +101 -0
  66. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +1 -17
  67. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +15 -9
  68. package/node_modules/@herbertgao/pi-cc-extensions/extensions/{utils/agent-summary.ts → feature/agent-summary/core.ts} +37 -35
  69. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{agent-summary.ts → agent-summary/index.ts} +3 -3
  70. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +24 -83
  71. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +1 -1
  72. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{session-reference.ts → reference/index.ts} +1 -1
  73. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{agent-autocomplete.ts → reference/subagent.ts} +19 -9
  74. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{pi-startup-header.ts → shell/startup-header.ts} +1 -1
  75. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{working-message.ts → shell/working-message.ts} +5 -2
  76. package/node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts +32 -28
  77. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +452 -94
  78. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +727 -0
  79. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/index.ts +66 -776
  80. package/node_modules/@herbertgao/pi-cc-extensions/extensions/{feature → renderer}/markdown-enhance.ts +134 -11
  81. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/hover.ts +130 -0
  82. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{mouse-interaction.ts → mouse/interaction.ts} +90 -568
  83. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/layout.ts +144 -0
  84. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/packets.ts +143 -0
  85. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/scroll.ts +195 -0
  86. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/ansi-utils.ts +56 -1
  87. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/diff-renderer.ts +4 -4
  88. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/line-width-safety.ts +1 -1
  89. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-display-utils.ts +12 -0
  90. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/write-execution.ts +1 -2
  91. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-grouping.ts → tool/grouping.ts} +27 -10
  92. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-result.ts → tool/result.ts} +4 -13
  93. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/transcript-refresh.ts +91 -0
  94. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/fullscreen-detect.ts +0 -27
  95. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
  96. package/node_modules/@herbertgao/pi-cc-extensions/themes/cc-dark.json +1 -0
  97. package/node_modules/@herbertgao/pi-cc-extensions/themes/cc-light.json +2 -2
  98. package/node_modules/@herbertgao/pi-stash/README.md +9 -9
  99. package/node_modules/@herbertgao/pi-stash/package.json +1 -1
  100. package/node_modules/@herbertgao/pi-stash/src/index.ts +2 -1
  101. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +20 -0
  102. package/node_modules/@herbertgao/pi-subagents/README.md +6 -2
  103. package/node_modules/@herbertgao/pi-subagents/package.json +3 -3
  104. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +1 -0
  105. package/node_modules/@herbertgao/pi-subagents/src/agent-runner.ts +3 -1
  106. package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +85 -11
  107. package/node_modules/@herbertgao/pi-subagents/src/index.ts +61 -39
  108. package/node_modules/@herbertgao/pi-subagents/src/nested-tools.ts +26 -35
  109. package/node_modules/@herbertgao/pi-subagents/src/prompts.ts +15 -1
  110. package/node_modules/@herbertgao/pi-subagents/src/settings.ts +12 -0
  111. package/node_modules/@herbertgao/pi-subagents/src/types.ts +2 -0
  112. package/node_modules/@narumitw/pi-btw/LICENSE +21 -0
  113. package/node_modules/@narumitw/pi-btw/README.md +210 -0
  114. package/node_modules/@narumitw/pi-btw/package.json +53 -0
  115. package/node_modules/@narumitw/pi-btw/src/bring-to-main.ts +632 -0
  116. package/node_modules/@narumitw/pi-btw/src/btw.ts +996 -0
  117. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +339 -0
  118. package/node_modules/@narumitw/pi-btw/src/index.ts +1 -0
  119. package/node_modules/@narumitw/pi-btw/src/menu.ts +296 -0
  120. package/node_modules/@narumitw/pi-btw/src/settings.ts +237 -0
  121. package/node_modules/@narumitw/pi-btw/src/side-thread.ts +238 -0
  122. package/node_modules/@narumitw/pi-btw/src/text.ts +10 -0
  123. package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +620 -0
  124. package/node_modules/@pi-plugins/fast-mode/LICENSE +21 -0
  125. package/node_modules/@pi-plugins/fast-mode/README.md +92 -0
  126. package/node_modules/@pi-plugins/fast-mode/dist/index.d.mts +6 -0
  127. package/node_modules/@pi-plugins/fast-mode/dist/index.d.mts.map +1 -0
  128. package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +2026 -0
  129. package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -0
  130. package/node_modules/@pi-plugins/fast-mode/package.json +73 -0
  131. package/node_modules/pi-mcp-adapter/CHANGELOG.md +78 -0
  132. package/node_modules/pi-mcp-adapter/README.md +80 -16
  133. package/node_modules/pi-mcp-adapter/agent-dir.ts +40 -0
  134. package/node_modules/pi-mcp-adapter/agent-plugin-loader.ts +377 -0
  135. package/node_modules/pi-mcp-adapter/commands.ts +21 -9
  136. package/node_modules/pi-mcp-adapter/config.ts +110 -49
  137. package/node_modules/pi-mcp-adapter/direct-tools.ts +40 -27
  138. package/node_modules/pi-mcp-adapter/elicitation-handler.ts +37 -36
  139. package/node_modules/pi-mcp-adapter/errors.ts +21 -17
  140. package/node_modules/pi-mcp-adapter/host-html-template.ts +13 -7
  141. package/node_modules/pi-mcp-adapter/index.ts +52 -17
  142. package/node_modules/pi-mcp-adapter/init.ts +9 -7
  143. package/node_modules/pi-mcp-adapter/json-schema-validator.ts +2 -2
  144. package/node_modules/pi-mcp-adapter/lifecycle.ts +8 -8
  145. package/node_modules/pi-mcp-adapter/logger.ts +1 -1
  146. package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +122 -25
  147. package/node_modules/pi-mcp-adapter/mcp-auth.ts +120 -2
  148. package/node_modules/pi-mcp-adapter/mcp-callback-server.ts +138 -61
  149. package/node_modules/pi-mcp-adapter/mcp-code.ts +13 -11
  150. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +62 -17
  151. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +15 -11
  152. package/node_modules/pi-mcp-adapter/mcp-panel.ts +34 -15
  153. package/node_modules/pi-mcp-adapter/mcp-probe.ts +131 -34
  154. package/node_modules/pi-mcp-adapter/mcp-script-worker.mjs +2 -2
  155. package/node_modules/pi-mcp-adapter/mcp-setup-panel.ts +7 -4
  156. package/node_modules/pi-mcp-adapter/mcp-trace.ts +59 -64
  157. package/node_modules/pi-mcp-adapter/metadata-cache.ts +34 -26
  158. package/node_modules/pi-mcp-adapter/npx-resolver.ts +6 -4
  159. package/node_modules/pi-mcp-adapter/oauth-handler.ts +1 -1
  160. package/node_modules/pi-mcp-adapter/oauth.ts +48 -0
  161. package/node_modules/pi-mcp-adapter/onboarding-state.ts +19 -11
  162. package/node_modules/pi-mcp-adapter/package.json +20 -9
  163. package/node_modules/pi-mcp-adapter/panel-keys.ts +20 -4
  164. package/node_modules/pi-mcp-adapter/prompts.ts +2 -2
  165. package/node_modules/pi-mcp-adapter/proxy-modes.ts +56 -21
  166. package/node_modules/pi-mcp-adapter/sampling-handler.ts +22 -15
  167. package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -1
  168. package/node_modules/pi-mcp-adapter/server-manager.ts +165 -113
  169. package/node_modules/pi-mcp-adapter/session-recovery.ts +11 -12
  170. package/node_modules/pi-mcp-adapter/skills/mcp-scripting/SKILL.md +3 -3
  171. package/node_modules/pi-mcp-adapter/state.ts +3 -1
  172. package/node_modules/pi-mcp-adapter/tool-approval.ts +67 -4
  173. package/node_modules/pi-mcp-adapter/tool-metadata.ts +6 -5
  174. package/node_modules/pi-mcp-adapter/tool-registrar.ts +187 -3
  175. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +14 -2
  176. package/node_modules/pi-mcp-adapter/ts-shape.ts +9 -2
  177. package/node_modules/pi-mcp-adapter/types.ts +111 -22
  178. package/node_modules/pi-mcp-adapter/ui-app-bridge-helpers.ts +40 -0
  179. package/node_modules/pi-mcp-adapter/ui-resource-handler.ts +28 -19
  180. package/node_modules/pi-mcp-adapter/ui-server.ts +90 -58
  181. package/node_modules/pi-mcp-adapter/ui-session.ts +16 -14
  182. package/node_modules/pi-mcp-adapter/unix-socket-transport.ts +4 -4
  183. package/node_modules/pi-mcp-adapter/utils.ts +23 -9
  184. package/node_modules/pi-web-access/CHANGELOG.md +45 -0
  185. package/node_modules/pi-web-access/README.md +104 -29
  186. package/node_modules/pi-web-access/bocha.ts +221 -0
  187. package/node_modules/pi-web-access/curator-page.ts +113 -12
  188. package/node_modules/pi-web-access/curator-server.ts +56 -20
  189. package/node_modules/pi-web-access/datalab-pdf-extract.ts +568 -0
  190. package/node_modules/pi-web-access/duckduckgo.ts +123 -0
  191. package/node_modules/pi-web-access/extract.ts +288 -143
  192. package/node_modules/pi-web-access/feature-config.ts +29 -0
  193. package/node_modules/pi-web-access/gemini-api.ts +4 -0
  194. package/node_modules/pi-web-access/gemini-search.ts +45 -12
  195. package/node_modules/pi-web-access/gemini-web.ts +68 -3
  196. package/node_modules/pi-web-access/index.ts +160 -71
  197. package/node_modules/pi-web-access/jina-search.ts +284 -0
  198. package/node_modules/pi-web-access/kagi.ts +12 -12
  199. package/node_modules/pi-web-access/openai-search.ts +12 -2
  200. package/node_modules/pi-web-access/package.json +4 -3
  201. package/node_modules/pi-web-access/pdf-extract.ts +327 -228
  202. package/node_modules/pi-web-access/storage.ts +440 -2
  203. package/node_modules/pi-web-access/summary-model-scope.ts +1 -1
  204. package/node_modules/pi-web-access/summary-review.ts +4 -2
  205. package/node_modules/pi-web-access/video-extract.ts +10 -8
  206. package/node_modules/pi-web-access/xai-search.ts +12 -2
  207. package/node_modules/pi-web-access/youtube-extract.ts +2 -1
  208. package/node_modules/remote-pi/LICENSE +21 -0
  209. package/node_modules/remote-pi/README.md +675 -0
  210. package/node_modules/remote-pi/dist/actions/handlers.d.ts +122 -0
  211. package/node_modules/remote-pi/dist/actions/handlers.js +160 -0
  212. package/node_modules/remote-pi/dist/actions/handlers.js.map +1 -0
  213. package/node_modules/remote-pi/dist/actions/registry.d.ts +39 -0
  214. package/node_modules/remote-pi/dist/actions/registry.js +58 -0
  215. package/node_modules/remote-pi/dist/actions/registry.js.map +1 -0
  216. package/node_modules/remote-pi/dist/bin/supervisord.d.ts +2 -0
  217. package/node_modules/remote-pi/dist/bin/supervisord.js +86 -0
  218. package/node_modules/remote-pi/dist/bin/supervisord.js.map +1 -0
  219. package/node_modules/remote-pi/dist/commands/builtin_mirror.d.ts +58 -0
  220. package/node_modules/remote-pi/dist/commands/builtin_mirror.js +71 -0
  221. package/node_modules/remote-pi/dist/commands/builtin_mirror.js.map +1 -0
  222. package/node_modules/remote-pi/dist/commands/list_commands.d.ts +60 -0
  223. package/node_modules/remote-pi/dist/commands/list_commands.js +73 -0
  224. package/node_modules/remote-pi/dist/commands/list_commands.js.map +1 -0
  225. package/node_modules/remote-pi/dist/config.d.ts +62 -0
  226. package/node_modules/remote-pi/dist/config.js +115 -0
  227. package/node_modules/remote-pi/dist/config.js.map +1 -0
  228. package/node_modules/remote-pi/dist/daemon/client.d.ts +20 -0
  229. package/node_modules/remote-pi/dist/daemon/client.js +131 -0
  230. package/node_modules/remote-pi/dist/daemon/client.js.map +1 -0
  231. package/node_modules/remote-pi/dist/daemon/control_protocol.d.ts +176 -0
  232. package/node_modules/remote-pi/dist/daemon/control_protocol.js +63 -0
  233. package/node_modules/remote-pi/dist/daemon/control_protocol.js.map +1 -0
  234. package/node_modules/remote-pi/dist/daemon/cron_log.d.ts +45 -0
  235. package/node_modules/remote-pi/dist/daemon/cron_log.js +72 -0
  236. package/node_modules/remote-pi/dist/daemon/cron_log.js.map +1 -0
  237. package/node_modules/remote-pi/dist/daemon/cron_registry.d.ts +80 -0
  238. package/node_modules/remote-pi/dist/daemon/cron_registry.js +194 -0
  239. package/node_modules/remote-pi/dist/daemon/cron_registry.js.map +1 -0
  240. package/node_modules/remote-pi/dist/daemon/id.d.ts +24 -0
  241. package/node_modules/remote-pi/dist/daemon/id.js +36 -0
  242. package/node_modules/remote-pi/dist/daemon/id.js.map +1 -0
  243. package/node_modules/remote-pi/dist/daemon/install.d.ts +170 -0
  244. package/node_modules/remote-pi/dist/daemon/install.js +547 -0
  245. package/node_modules/remote-pi/dist/daemon/install.js.map +1 -0
  246. package/node_modules/remote-pi/dist/daemon/registry.d.ts +63 -0
  247. package/node_modules/remote-pi/dist/daemon/registry.js +153 -0
  248. package/node_modules/remote-pi/dist/daemon/registry.js.map +1 -0
  249. package/node_modules/remote-pi/dist/daemon/rpc_child.d.ts +194 -0
  250. package/node_modules/remote-pi/dist/daemon/rpc_child.js +389 -0
  251. package/node_modules/remote-pi/dist/daemon/rpc_child.js.map +1 -0
  252. package/node_modules/remote-pi/dist/daemon/supervisor.d.ts +93 -0
  253. package/node_modules/remote-pi/dist/daemon/supervisor.js +596 -0
  254. package/node_modules/remote-pi/dist/daemon/supervisor.js.map +1 -0
  255. package/node_modules/remote-pi/dist/extension_ui_bridge.d.ts +26 -0
  256. package/node_modules/remote-pi/dist/extension_ui_bridge.js +341 -0
  257. package/node_modules/remote-pi/dist/extension_ui_bridge.js.map +1 -0
  258. package/node_modules/remote-pi/dist/index.d.ts +213 -0
  259. package/node_modules/remote-pi/dist/index.js +4996 -0
  260. package/node_modules/remote-pi/dist/index.js.map +1 -0
  261. package/node_modules/remote-pi/dist/mcp/mesh_result.d.ts +10 -0
  262. package/node_modules/remote-pi/dist/mcp/mesh_result.js +42 -0
  263. package/node_modules/remote-pi/dist/mcp/mesh_result.js.map +1 -0
  264. package/node_modules/remote-pi/dist/mcp/mesh_server.d.ts +16 -0
  265. package/node_modules/remote-pi/dist/mcp/mesh_server.js +327 -0
  266. package/node_modules/remote-pi/dist/mcp/mesh_server.js.map +1 -0
  267. package/node_modules/remote-pi/dist/mesh/canonical.d.ts +30 -0
  268. package/node_modules/remote-pi/dist/mesh/canonical.js +61 -0
  269. package/node_modules/remote-pi/dist/mesh/canonical.js.map +1 -0
  270. package/node_modules/remote-pi/dist/mesh/client.d.ts +18 -0
  271. package/node_modules/remote-pi/dist/mesh/client.js +125 -0
  272. package/node_modules/remote-pi/dist/mesh/client.js.map +1 -0
  273. package/node_modules/remote-pi/dist/mesh/encoding.d.ts +38 -0
  274. package/node_modules/remote-pi/dist/mesh/encoding.js +216 -0
  275. package/node_modules/remote-pi/dist/mesh/encoding.js.map +1 -0
  276. package/node_modules/remote-pi/dist/mesh/self_revoke.d.ts +73 -0
  277. package/node_modules/remote-pi/dist/mesh/self_revoke.js +401 -0
  278. package/node_modules/remote-pi/dist/mesh/self_revoke.js.map +1 -0
  279. package/node_modules/remote-pi/dist/mesh/siblings.d.ts +49 -0
  280. package/node_modules/remote-pi/dist/mesh/siblings.js +159 -0
  281. package/node_modules/remote-pi/dist/mesh/siblings.js.map +1 -0
  282. package/node_modules/remote-pi/dist/mesh/types.d.ts +34 -0
  283. package/node_modules/remote-pi/dist/mesh/types.js +11 -0
  284. package/node_modules/remote-pi/dist/mesh/types.js.map +1 -0
  285. package/node_modules/remote-pi/dist/mesh/verify.d.ts +17 -0
  286. package/node_modules/remote-pi/dist/mesh/verify.js +86 -0
  287. package/node_modules/remote-pi/dist/mesh/verify.js.map +1 -0
  288. package/node_modules/remote-pi/dist/pairing/crypto.d.ts +8 -0
  289. package/node_modules/remote-pi/dist/pairing/crypto.js +22 -0
  290. package/node_modules/remote-pi/dist/pairing/crypto.js.map +1 -0
  291. package/node_modules/remote-pi/dist/pairing/handshake.d.ts +28 -0
  292. package/node_modules/remote-pi/dist/pairing/handshake.js +113 -0
  293. package/node_modules/remote-pi/dist/pairing/handshake.js.map +1 -0
  294. package/node_modules/remote-pi/dist/pairing/noise-sha256.d.ts +16 -0
  295. package/node_modules/remote-pi/dist/pairing/noise-sha256.js +103 -0
  296. package/node_modules/remote-pi/dist/pairing/noise-sha256.js.map +1 -0
  297. package/node_modules/remote-pi/dist/pairing/qr.d.ts +59 -0
  298. package/node_modules/remote-pi/dist/pairing/qr.js +125 -0
  299. package/node_modules/remote-pi/dist/pairing/qr.js.map +1 -0
  300. package/node_modules/remote-pi/dist/pairing/storage.d.ts +120 -0
  301. package/node_modules/remote-pi/dist/pairing/storage.js +604 -0
  302. package/node_modules/remote-pi/dist/pairing/storage.js.map +1 -0
  303. package/node_modules/remote-pi/dist/protocol/codec.d.ts +7 -0
  304. package/node_modules/remote-pi/dist/protocol/codec.js +49 -0
  305. package/node_modules/remote-pi/dist/protocol/codec.js.map +1 -0
  306. package/node_modules/remote-pi/dist/protocol/types.d.ts +393 -0
  307. package/node_modules/remote-pi/dist/protocol/types.js +2 -0
  308. package/node_modules/remote-pi/dist/protocol/types.js.map +1 -0
  309. package/node_modules/remote-pi/dist/rooms.d.ts +29 -0
  310. package/node_modules/remote-pi/dist/rooms.js +57 -0
  311. package/node_modules/remote-pi/dist/rooms.js.map +1 -0
  312. package/node_modules/remote-pi/dist/session/address.d.ts +49 -0
  313. package/node_modules/remote-pi/dist/session/address.js +58 -0
  314. package/node_modules/remote-pi/dist/session/address.js.map +1 -0
  315. package/node_modules/remote-pi/dist/session/agent_bridge.d.ts +55 -0
  316. package/node_modules/remote-pi/dist/session/agent_bridge.js +146 -0
  317. package/node_modules/remote-pi/dist/session/agent_bridge.js.map +1 -0
  318. package/node_modules/remote-pi/dist/session/bridge.d.ts +37 -0
  319. package/node_modules/remote-pi/dist/session/bridge.js +130 -0
  320. package/node_modules/remote-pi/dist/session/bridge.js.map +1 -0
  321. package/node_modules/remote-pi/dist/session/broker.d.ts +189 -0
  322. package/node_modules/remote-pi/dist/session/broker.js +507 -0
  323. package/node_modules/remote-pi/dist/session/broker.js.map +1 -0
  324. package/node_modules/remote-pi/dist/session/broker_remote.d.ts +74 -0
  325. package/node_modules/remote-pi/dist/session/broker_remote.js +583 -0
  326. package/node_modules/remote-pi/dist/session/broker_remote.js.map +1 -0
  327. package/node_modules/remote-pi/dist/session/cwd_lock.d.ts +33 -0
  328. package/node_modules/remote-pi/dist/session/cwd_lock.js +126 -0
  329. package/node_modules/remote-pi/dist/session/cwd_lock.js.map +1 -0
  330. package/node_modules/remote-pi/dist/session/envelope.d.ts +33 -0
  331. package/node_modules/remote-pi/dist/session/envelope.js +117 -0
  332. package/node_modules/remote-pi/dist/session/envelope.js.map +1 -0
  333. package/node_modules/remote-pi/dist/session/global_config.d.ts +33 -0
  334. package/node_modules/remote-pi/dist/session/global_config.js +73 -0
  335. package/node_modules/remote-pi/dist/session/global_config.js.map +1 -0
  336. package/node_modules/remote-pi/dist/session/ipc.d.ts +27 -0
  337. package/node_modules/remote-pi/dist/session/ipc.js +22 -0
  338. package/node_modules/remote-pi/dist/session/ipc.js.map +1 -0
  339. package/node_modules/remote-pi/dist/session/leader_election.d.ts +32 -0
  340. package/node_modules/remote-pi/dist/session/leader_election.js +106 -0
  341. package/node_modules/remote-pi/dist/session/leader_election.js.map +1 -0
  342. package/node_modules/remote-pi/dist/session/local_config.d.ts +55 -0
  343. package/node_modules/remote-pi/dist/session/local_config.js +157 -0
  344. package/node_modules/remote-pi/dist/session/local_config.js.map +1 -0
  345. package/node_modules/remote-pi/dist/session/mesh_message.d.ts +20 -0
  346. package/node_modules/remote-pi/dist/session/mesh_message.js +28 -0
  347. package/node_modules/remote-pi/dist/session/mesh_message.js.map +1 -0
  348. package/node_modules/remote-pi/dist/session/mesh_node.d.ts +116 -0
  349. package/node_modules/remote-pi/dist/session/mesh_node.js +573 -0
  350. package/node_modules/remote-pi/dist/session/mesh_node.js.map +1 -0
  351. package/node_modules/remote-pi/dist/session/peer.d.ts +139 -0
  352. package/node_modules/remote-pi/dist/session/peer.js +451 -0
  353. package/node_modules/remote-pi/dist/session/peer.js.map +1 -0
  354. package/node_modules/remote-pi/dist/session/peer_inventory.d.ts +13 -0
  355. package/node_modules/remote-pi/dist/session/peer_inventory.js +48 -0
  356. package/node_modules/remote-pi/dist/session/peer_inventory.js.map +1 -0
  357. package/node_modules/remote-pi/dist/session/peer_limits.d.ts +9 -0
  358. package/node_modules/remote-pi/dist/session/peer_limits.js +21 -0
  359. package/node_modules/remote-pi/dist/session/peer_limits.js.map +1 -0
  360. package/node_modules/remote-pi/dist/session/setup_wizard.d.ts +39 -0
  361. package/node_modules/remote-pi/dist/session/setup_wizard.js +63 -0
  362. package/node_modules/remote-pi/dist/session/setup_wizard.js.map +1 -0
  363. package/node_modules/remote-pi/dist/session/tool_gate.d.ts +5 -0
  364. package/node_modules/remote-pi/dist/session/tool_gate.js +11 -0
  365. package/node_modules/remote-pi/dist/session/tool_gate.js.map +1 -0
  366. package/node_modules/remote-pi/dist/session/tools.d.ts +24 -0
  367. package/node_modules/remote-pi/dist/session/tools.js +252 -0
  368. package/node_modules/remote-pi/dist/session/tools.js.map +1 -0
  369. package/node_modules/remote-pi/dist/session/wizard.d.ts +13 -0
  370. package/node_modules/remote-pi/dist/session/wizard.js +20 -0
  371. package/node_modules/remote-pi/dist/session/wizard.js.map +1 -0
  372. package/node_modules/remote-pi/dist/settings.d.ts +15 -0
  373. package/node_modules/remote-pi/dist/settings.js +52 -0
  374. package/node_modules/remote-pi/dist/settings.js.map +1 -0
  375. package/node_modules/remote-pi/dist/transport/peer_channel.d.ts +37 -0
  376. package/node_modules/remote-pi/dist/transport/peer_channel.js +98 -0
  377. package/node_modules/remote-pi/dist/transport/peer_channel.js.map +1 -0
  378. package/node_modules/remote-pi/dist/transport/pi_forward_client.d.ts +29 -0
  379. package/node_modules/remote-pi/dist/transport/pi_forward_client.js +62 -0
  380. package/node_modules/remote-pi/dist/transport/pi_forward_client.js.map +1 -0
  381. package/node_modules/remote-pi/dist/transport/relay_client.d.ts +91 -0
  382. package/node_modules/remote-pi/dist/transport/relay_client.js +206 -0
  383. package/node_modules/remote-pi/dist/transport/relay_client.js.map +1 -0
  384. package/node_modules/remote-pi/dist/ui/footer.d.ts +32 -0
  385. package/node_modules/remote-pi/dist/ui/footer.js +34 -0
  386. package/node_modules/remote-pi/dist/ui/footer.js.map +1 -0
  387. package/node_modules/remote-pi/docs/daemon.md +289 -0
  388. package/node_modules/remote-pi/package.json +88 -0
  389. package/node_modules/remote-pi/service-templates/launchd.plist.template +35 -0
  390. package/node_modules/remote-pi/service-templates/systemd.service.template +19 -0
  391. package/node_modules/remote-pi/service-templates/task-launcher.vbs.template +10 -0
  392. package/node_modules/remote-pi/service-templates/task-scheduler.xml.template +38 -0
  393. package/node_modules/remote-pi/skills/agent-network/SKILL.md +310 -0
  394. package/package.json +37 -12
  395. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool-diff/write-display-utils.ts +0 -29
  396. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{session-reference-core.ts → reference/session.ts} +0 -0
  397. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/{pi-aliases.ts → shell/aliases.ts} +0 -0
  398. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/ATTRIBUTION.md +0 -0
  399. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/diff-presentation.ts +0 -0
  400. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/index.ts +0 -0
  401. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/render-utils.ts +0 -0
  402. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/shiki-highlight.ts +0 -0
  403. /package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{tool-diff → tool/diff}/types.ts +0 -0
@@ -13,6 +13,14 @@ import {
13
13
  } from "@earendil-works/pi-coding-agent";
14
14
  import { getKeybindings } from "@earendil-works/pi-tui";
15
15
  import { Markdown, Spacer, Text, type Component } from "@earendil-works/pi-tui";
16
+ import {
17
+ animateCompactThinkingText,
18
+ formatThoughtDuration,
19
+ styleCompactThinkingText,
20
+ } from "../renderer/compact-mode.ts";
21
+ import { refreshMountedTranscript } from "../renderer/transcript-refresh.ts";
22
+ // 保持导出兼容:渲染函数已并入 renderer/compact-mode.ts,这里 re-export。
23
+ export { animateCompactThinkingText, formatThoughtDuration, styleCompactThinkingText };
16
24
 
17
25
  // pi-tui 类型声明中 TUI 的 re-export 解析失败,本地用最小结构化类型(只用到 requestRender)。
18
26
  type RenderTui = { requestRender(force?: boolean): void };
@@ -146,70 +154,6 @@ function restoreDurationEntries(
146
154
  }
147
155
  }
148
156
 
149
- function formatThoughtDuration(durationMs: number) {
150
- if (durationMs < 1_000) {
151
- return `${Math.max(1, Math.round(durationMs))}ms`;
152
- }
153
-
154
- const totalSeconds = Math.max(1, Math.round(durationMs / 1_000));
155
- const minutes = Math.floor(totalSeconds / 60);
156
- const seconds = totalSeconds % 60;
157
- if (minutes === 0) return `${seconds}s`;
158
- return seconds === 0 ? `${minutes}m` : `${minutes}m ${seconds}s`;
159
- }
160
-
161
- export { formatThoughtDuration };
162
-
163
- type CompactThinkingTheme = Pick<Theme, "fg" | "italic" | "bold">;
164
-
165
- /** 与 compact-thinking 主渲染器共用的静态文字样式。 */
166
- export function styleCompactThinkingText(
167
- text: string,
168
- theme: CompactThinkingTheme | undefined,
169
- bold = false,
170
- ): string {
171
- if (!theme) return text;
172
- const colored = typeof theme.fg === "function" ? theme.fg("thinkingText", text) : text;
173
- const weighted = bold && typeof theme.bold === "function" ? theme.bold(colored) : colored;
174
- return typeof theme.italic === "function" ? theme.italic(weighted) : weighted;
175
- }
176
-
177
- /** 与 compact-thinking 主渲染器共用的活动思考扫光动画。 */
178
- export function animateCompactThinkingText(
179
- text: string,
180
- theme: CompactThinkingTheme | undefined,
181
- animationFrame: number,
182
- boldBase = false,
183
- ): string {
184
- if (!theme) return text;
185
- const characters = Array.from(text);
186
- if (characters.length === 0) return "";
187
- const highlightWidth = Math.max(1, Math.min(5, Math.ceil(characters.length * 0.28)));
188
- const start = (animationFrame % (characters.length + highlightWidth)) - highlightWidth;
189
- const end = start + highlightWidth;
190
- const before = characters.slice(0, Math.max(0, start)).join("");
191
- const highlighted = characters
192
- .slice(Math.max(0, start), Math.min(characters.length, end))
193
- .join("");
194
- const after = characters.slice(Math.max(0, end)).join("");
195
- const highlightedColored =
196
- highlighted && typeof theme.fg === "function" ? theme.fg("text", highlighted) : highlighted;
197
- const highlightedWeighted =
198
- highlightedColored && typeof theme.bold === "function"
199
- ? theme.bold(highlightedColored)
200
- : highlightedColored;
201
- const highlightedText =
202
- highlightedWeighted && typeof theme.italic === "function"
203
- ? theme.italic(highlightedWeighted)
204
- : highlightedWeighted;
205
-
206
- return (
207
- styleCompactThinkingText(before, theme, boldBase) +
208
- highlightedText +
209
- styleCompactThinkingText(after, theme, boldBase)
210
- );
211
- }
212
-
213
157
  function getThinkingToggleHint() {
214
158
  const keys = getKeybindings().getKeys("app.thinking.toggle");
215
159
  return keys.length > 0 ? `${keys.join("/")} to expand` : undefined;
@@ -343,7 +287,6 @@ function compactThinking(pi: ExtensionAPI) {
343
287
  };
344
288
 
345
289
  const completedDurations = new Map<number, Map<number, number>>();
346
- const renderedComponents = new Set<AssistantMessageComponentLike>();
347
290
  const streamingComponents = new Set<AssistantMessageComponentLike>();
348
291
  let activeThinking: ActiveThinking | undefined;
349
292
  let activeTheme: Theme | undefined;
@@ -355,14 +298,6 @@ function compactThinking(pi: ExtensionAPI) {
355
298
  let compactSummaryActive = false;
356
299
  let patchInstalled = true;
357
300
 
358
- function refreshRenderedComponents() {
359
- for (const component of renderedComponents) {
360
- const self = component as unknown as AssistantInternals;
361
- if (self.lastMessage) self.updateContent(self.lastMessage);
362
- }
363
- activeTui?.requestRender(true);
364
- }
365
-
366
301
  function thinkingStyle(text: string) {
367
302
  return styleCompactThinkingText(text, activeTheme);
368
303
  }
@@ -403,7 +338,6 @@ function compactThinking(pi: ExtensionAPI) {
403
338
  const component = this as AssistantMessageComponentLike;
404
339
  const self = this as unknown as AssistantInternals;
405
340
  self.lastMessage = message;
406
- renderedComponents.add(component);
407
341
  latestComponent = component;
408
342
  latestComponentTimestamp = message.timestamp;
409
343
 
@@ -512,8 +446,10 @@ function compactThinking(pi: ExtensionAPI) {
512
446
  (durationText ? thinkingStyle(` · ${durationText}`) : "");
513
447
  } else {
514
448
  // Completed compact blocks use one provider-independent status line.
449
+ // 无时长记录(中断流/旧会话/entry 缺失或索引错位)时不回退到加载文案
450
+ // "Thinking...":改用摘要标题或中性 "Thought"。
515
451
  heading = thinkingStyle(
516
- durationText ? `Thought for ${durationText}` : self.hiddenThinkingLabel || "Thinking...",
452
+ durationText ? `Thought for ${durationText}` : (latestSummary?.title ?? "Thought"),
517
453
  );
518
454
  }
519
455
  self.contentContainer.addChild(new Text(heading, self.outputPad, 0));
@@ -684,7 +620,7 @@ function compactThinking(pi: ExtensionAPI) {
684
620
  content?.type === "toolCall" &&
685
621
  (content.name === "Agent" ||
686
622
  content.name === "Agents" ||
687
- content.args?.subagent_type != null),
623
+ content.arguments?.subagent_type != null),
688
624
  )
689
625
  );
690
626
  }
@@ -728,7 +664,9 @@ function compactThinking(pi: ExtensionAPI) {
728
664
  // OpenAI-compatible providers may not close reasoning until the response ends.
729
665
  pi.on("tool_execution_start", (event: any) => {
730
666
  if (event.toolName === "Agent" || event.toolName === "Agents") {
731
- resumeAgentThinking(latestComponent?.lastMessage ?? undefined);
667
+ const lastMessage = (latestComponent as unknown as { lastMessage?: AssistantMessage })
668
+ ?.lastMessage;
669
+ resumeAgentThinking(lastMessage);
732
670
  } else {
733
671
  finishThinking();
734
672
  }
@@ -751,20 +689,24 @@ function compactThinking(pi: ExtensionAPI) {
751
689
 
752
690
  // An empty widget gives the animation loop access to requestRender without
753
691
  // enabling terminal mouse reporting or intercepting native scrollback input.
692
+ // setWidget 的 factory 同步执行,此刻补丁已安装。
754
693
  ctx.ui.setWidget(WIDGET_ID, (tui) => {
755
694
  activeTui = tui;
756
695
  return { render: () => [], invalidate() {} };
757
696
  });
758
697
 
759
- // On resume, Pi may construct the chat before session_start is emitted.
760
- // Rebuild those already-rendered components now that persisted durations
761
- // and the active theme are available.
762
- refreshRenderedComponents();
698
+ // pi 在 reload/resume 时先于 session_start 用原始原型重建聊天组件
699
+ // (rebuildChatFromMessages / renderCurrentSessionState)。由共享的
700
+ // refreshMountedTranscript 扫描挂载树重绘这些组件,恢复 compact 渲染、
701
+ // 持久化时长与工具调用显示。
702
+ refreshMountedTranscript(activeTui);
703
+ activeTui?.requestRender(true);
763
704
  });
764
705
 
765
706
  pi.on("session_tree", (_event, ctx) => {
766
707
  restoreDurationEntries(ctx.sessionManager.getBranch(), completedDurations);
767
- refreshRenderedComponents();
708
+ refreshMountedTranscript(activeTui);
709
+ activeTui?.requestRender(true);
768
710
  });
769
711
 
770
712
  pi.on("session_shutdown", (_event, ctx) => {
@@ -781,7 +723,6 @@ function compactThinking(pi: ExtensionAPI) {
781
723
  latestComponent = undefined;
782
724
  latestComponentTimestamp = undefined;
783
725
  completedDurations.clear();
784
- renderedComponents.clear();
785
726
  streamingComponents.clear();
786
727
  if (ctx.mode === "tui") ctx.ui.setWidget(WIDGET_ID, undefined);
787
728
 
@@ -639,7 +639,7 @@ export default function contextUsageExtension(pi: ExtensionAPI) {
639
639
  );
640
640
 
641
641
  if (!action) break;
642
- const preview = previewByKey.get(action);
642
+ const preview = previewByKey.get(action as PreviewKey);
643
643
  if (!preview) continue;
644
644
 
645
645
  await showTextPreview(ctx, preview.title, preview.content);
@@ -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);