@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
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="./assets/readme/hero.svg" width="100%" alt="pi-cc-extensions: a productivity extension suite for Pi">
2
+ <img src="./assets/readme/hero.en.svg" width="100%" alt="pi-cc-extensions: a productivity extension suite for Pi">
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -10,7 +10,7 @@
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- Claude Code-style output, context inspection, and Agent / Session references.
13
+ Claude Code-style TUI output with some personal touches and handy utilities.
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -37,11 +37,11 @@ Run `/reload` after installation.
37
37
 
38
38
  | Feature | Description | Entry point |
39
39
  | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
40
- | Claude Code-style output | Tool summaries, expand/collapse, rich edit/write diffs, and`on` / `compact` / `off` modes | `/ccstyle` |
41
- | Fullscreen mouse interaction | Tool card/group click-to-toggle, previews, hover highlight, and a back-to-bottom button (motion reporting auto-enabled under tmux/zellij/screen) | `/ccstyle` |
40
+ | Claude Code Output | Tool summaries, expand/collapse, rich edit/write diffs, and `on` / `compact` / `off` modes | `/ccstyle` |
41
+ | Fullscreen mode | Tool card/group click-to-toggle, previews, hover highlight, and a back-to-bottom button | `TUIMODE=fullscreen` or `--tui-mode fullscreen` |
42
42
  | Settings panel | `Style / Diff / Thinking / Feature` tabs: startup header toggle and wheel step | `/ccstyle` |
43
43
  | Context inspection | Usage breakdown and previews for the system prompt, tools, skills, and messages | `/context` |
44
- | Session references | Search and inject effective context from previous Sessions or existing SubAgents | `@session:` |
44
+ | Session/Subagent references | Search and inject effective context from previous Sessions or existing SubAgents | `@` |
45
45
  | Theme | Bundled CC Dark and CC Light themes | `/theme` |
46
46
 
47
47
  ## Configuration
@@ -74,13 +74,9 @@ bun run typecheck
74
74
  ./test.bat # or pi -e .
75
75
  ```
76
76
 
77
- Run `/reload` after changing extensions.
78
-
79
77
  ## Compatibility
80
78
 
81
79
  - Node.js `>=22.19.0`, Pi `^0.84.0` (loaded through `pi.extensions` and `pi.themes` in the root `package.json`)
82
- - Fixed-editor features have moved to the official pipeline. `/ccstyle` mouse interactions remain available in TUI fullscreen mode.
83
- - Use version `0.8.46` or earlier only if you need the removed fixed-editor layout.
84
80
 
85
81
  ## Recommended companions
86
82
 
@@ -98,4 +94,4 @@ Run `/reload` after changing extensions.
98
94
  ## Credits
99
95
 
100
96
  - Derived from [`minuque/pi-cc-extensions`](https://github.com/minuque/pi-cc-extensions) under the MIT license.
101
- - Rich diffs are adapted from [`MasuRii/pi-tool-display`](https://github.com/MasuRii/pi-tool-display) (MIT). See [`extensions/tool-diff/ATTRIBUTION.md`](./extensions/tool-diff/ATTRIBUTION.md).
97
+ - Rich diffs are adapted from [`MasuRii/pi-tool-display`](https://github.com/MasuRii/pi-tool-display) (MIT). See [`extensions/renderer/tool/diff/ATTRIBUTION.md`](./extensions/renderer/tool/diff/ATTRIBUTION.md).
@@ -10,7 +10,7 @@
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- 类 Claude Code TUI 输出风格、上下文检查,以及 Agent / Session 引用。
13
+ 类 Claude Code TUI 输出风格,并融入了一些个人喜好,和一些实用小功能。
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -37,11 +37,11 @@ pi install npm:@herbertgao/pi-cc-extensions
37
37
 
38
38
  | 功能 | 说明 | 入口 |
39
39
  | ---------------------- | ---------------------------------------------------------------------------------------------------------- | ------------- |
40
- | Claude Code 风格输出 | 工具摘要、折叠展开、rich edit/write diff,以及`on` / `compact` / `off` 三种模式 | `/ccstyle` |
41
- | Fullscreen 鼠标交互 | 工具卡/group 点击展开与收起、预览、hover 高亮、回到底部按钮(tmux/zellij/screen 下自动补开 motion 上报) | `/ccstyle` |
40
+ | Claude Code UI | 工具摘要、折叠展开、rich edit/write diff,以及 `on` / `compact` / `off` 三种模式 | `/ccstyle` |
41
+ | Fullscreen mode | 工具卡/group 点击展开与收起、预览、hover 高亮、回到底部按钮 | `TUIMODE=fullscreen` `--tui-mode fullscreen` |
42
42
  | 配置面板 | `Style / Diff / Thinking / Feature` 四页签,含启动头开关与滚轮步进 | `/ccstyle` |
43
43
  | 上下文检查 | 查看上下文占用,并预览 System prompt、Tools、Skills 和消息内容 | `/context` |
44
- | Session 引用 | 搜索并注入历史 Session 或现有 SubAgent 的有效上下文 | `@session:` |
44
+ | Session/Subagent 引用 | 搜索并注入历史 Session 或现有 SubAgent 的有效上下文 | `@` |
45
45
  | 主题 | 随包提供内置 CC Dark、CC Light 主题 | `/theme` |
46
46
 
47
47
  ## 配置
@@ -74,13 +74,9 @@ bun run typecheck
74
74
  ./test.bat # or pi -e .
75
75
  ```
76
76
 
77
- 修改扩展后执行 `/reload`。
78
-
79
77
  ## 兼容性
80
78
 
81
79
  - Node.js `>=22.19.0`,Pi `^0.84.0`(通过根目录 `package.json` 的 `pi.extensions` 和 `pi.themes` 加载)
82
- - fixed-editor 相关功能已迁移至官方管线:TUI mode=fullscreen 模式下 `/ccstyle` 鼠标交互仍可用。
83
- - 需要已移除的 fixed-editor 布局时,请使用 `0.8.46` 及更早版本。
84
80
 
85
81
  ## 推荐搭配
86
82
 
@@ -98,4 +94,4 @@ bun run typecheck
98
94
  ## 致谢
99
95
 
100
96
  - 基于 MIT 许可的 [`minuque/pi-cc-extensions`](https://github.com/minuque/pi-cc-extensions) 衍生维护。
101
- - Rich diff 改编自 [`MasuRii/pi-tool-display`](https://github.com/MasuRii/pi-tool-display)(MIT);详见 [`extensions/tool-diff/ATTRIBUTION.md`](./extensions/tool-diff/ATTRIBUTION.md)。
97
+ - Rich diff 改编自 [`MasuRii/pi-tool-display`](https://github.com/MasuRii/pi-tool-display)(MIT);详见 [`extensions/renderer/tool/diff/ATTRIBUTION.md`](./extensions/renderer/tool/diff/ATTRIBUTION.md)。
@@ -0,0 +1,101 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="400" viewBox="0 0 1200 400" role="img" aria-labelledby="title desc">
2
+ <title id="title">pi-cc-extensions
3
+ </title>
4
+ <desc id="desc">The Claude and Pi brand marks together connect three extension capabilities: Claude Code-style output, context inspection, and historical Session references.
5
+ </desc>
6
+ <defs>
7
+ <linearGradient id="panel" x1="0" y1="0" x2="1" y2="1">
8
+ <stop offset="0" stop-color="#0D131B"/>
9
+ <stop offset="1" stop-color="#090D12"/>
10
+ </linearGradient>
11
+ </defs>
12
+ <rect width="1200" height="400" rx="28" fill="url(#panel)"/>
13
+ <rect x="1" y="1" width="1198" height="398" rx="27" fill="none" stroke="#263241" stroke-width="2"/>
14
+ <g id="title-block" transform="translate(64 58)" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', sans-serif">
15
+ <g font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="16" font-weight="600" letter-spacing="1.4">
16
+ <text x="0" y="0" fill="#66E3C4">PI EXTENSION
17
+ </text>
18
+ </g>
19
+ <text x="0" y="82" fill="#F4F7FA" font-size="54" font-weight="750" letter-spacing="-1.5">pi-cc-extensions
20
+ </text>
21
+ <text x="0" y="130" fill="#B8C3CF" font-size="23">Make Pi work like Claude Code 🙃
22
+ </text>
23
+ <g transform="translate(0 180)" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="17">
24
+ <rect width="488" height="58" rx="12" fill="#111923" stroke="#2B3948"/>
25
+ <text x="20" y="36" fill="#66E3C4">›
26
+ </text>
27
+ <text x="44" y="36" fill="#F4F7FA">/ccstyle
28
+ </text>
29
+ <text x="155" y="36" fill="#536172">·
30
+ </text>
31
+ <text x="178" y="36" fill="#7CC7FF">/context
32
+ </text>
33
+ <text x="292" y="36" fill="#536172">·
34
+ </text>
35
+ <text x="315" y="36" fill="#F2C879">@session:
36
+ </text>
37
+ <rect x="411" y="22" width="9" height="20" rx="2" fill="#66E3C4"/>
38
+ </g>
39
+ <g transform="translate(0 282)" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="15">
40
+ <circle cx="6" cy="-5" r="6" fill="#66E3C4"/>
41
+ <text x="22" y="0" fill="#8B9AAD">3 EXTENSIONS
42
+ </text>
43
+ <text x="160" y="0" fill="#3B4857">•
44
+ </text>
45
+ <text x="183" y="0" fill="#8B9AAD">TYPESCRIPT
46
+ </text>
47
+ <text x="303" y="0" fill="#3B4857">•
48
+ </text>
49
+ <text x="326" y="0" fill="#8B9AAD">NODE ≥ 22.19
50
+ </text>
51
+ </g>
52
+ </g>
53
+ <g id="extension-map" transform="translate(662 48)" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', sans-serif">
54
+ <g id="claude-pi-mark" transform="translate(0 0)">
55
+ <!-- Official Claude starburst vector; source: Anthropic Claude brand mark. -->
56
+ <path transform="translate(2 2) scale(.34)" fill="#D97757" d="m19.6 66.5 19.7-11 .3-1-.3-.5h-1l-3.3-.2-11.2-.3L14 53l-9.5-.5-2.4-.5L0 49l.2-1.5 2-1.3 2.9.2 6.3.5 9.5.6 6.9.4L38 49.1h1.6l.2-.7-.5-.4-.4-.4L29 41l-10.6-7-5.6-4.1-3-2-1.5-2-.6-4.2 2.7-3 3.7.3.9.2 3.7 2.9 8 6.1L37 36l1.5 1.2.6-.4.1-.3-.7-1.1L33 25l-6-10.4-2.7-4.3-.7-2.6c-.3-1-.4-2-.4-3l3-4.2L28 0l4.2.6L33.8 2l2.6 6 4.1 9.3L47 29.9l2 3.8 1 3.4.3 1h.7v-.5l.5-7.2 1-8.7 1-11.2.3-3.2 1.6-3.8 3-2L61 2.6l2 2.9-.3 1.8-1.1 7.7L59 27.1l-1.5 8.2h.9l1-1.1 4.1-5.4 6.9-8.6 3-3.5L77 13l2.3-1.8h4.3l3.1 4.7-1.4 4.9-4.4 5.6-3.7 4.7-5.3 7.1-3.2 5.7.3.4h.7l12-2.6 6.4-1.1 7.6-1.3 3.5 1.6.4 1.6-1.4 3.4-8.2 2-9.6 2-14.3 3.3-.2.1.2.3 6.4.6 2.8.2h6.8l12.6 1 3.3 2 1.9 2.7-.3 2-5.1 2.6-6.8-1.6-16-3.8-5.4-1.3h-.8v.4l4.6 4.5 8.3 7.5L89 80.1l.5 2.4-1.3 2-1.4-.2-9.2-7-3.6-3-8-6.8h-.5v.7l1.8 2.7 9.8 14.7.5 4.5-.7 1.4-2.6 1-2.7-.6-5.8-8-6-9-4.7-8.2-.5.4-2.9 30.2-1.3 1.5-3 1.2-2.5-2-1.4-3 1.4-6.2 1.6-8 1.3-6.4 1.2-7.9.7-2.6v-.2H49L43 72l-9 12.3-7.2 7.6-1.7.7-3-1.5.3-2.8L24 86l10-12.8 6-7.9 4-4.6-.1-.5h-.3L17.2 77.4l-4.7.6-2-2 .2-3 1-1 8-5.5Z"/>
57
+ <path d="M50 3V35" stroke="#3A4857" stroke-width="2"/>
58
+ <!-- Official Pi logo vectors; source: https://pi.dev/logo-auto.svg -->
59
+ <g transform="translate(52 -5) scale(.06)" fill="#F4F7FA">
60
+ <path fill-rule="evenodd" d="M165.29 165.29H517.36V400H400V517.36H282.65V634.72H165.29ZM282.65 282.65V400H400V282.65Z"/>
61
+ <path d="M517.36 400H634.72V634.72H517.36Z"/>
62
+ </g>
63
+ <text x="104" y="15" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="15" font-weight="700" letter-spacing=".8">CLAUDE CODE UX
64
+ </text>
65
+ <text x="104" y="34" fill="#7F8D9C" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" letter-spacing="1.2">FOR PI
66
+ </text>
67
+ </g>
68
+ <g transform="translate(0 52)">
69
+ <rect width="474" height="82" rx="14" fill="#101821" stroke="#2C3A48"/>
70
+ <rect width="5" height="82" rx="2.5" fill="#66E3C4"/>
71
+ <text x="26" y="32" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18" font-weight="700">/ccstyle
72
+ </text>
73
+ <text x="26" y="59" fill="#8B9AAD" font-size="16">Tool summaries · Diffs · Status bar
74
+ </text>
75
+ <circle cx="438" cy="29" r="9" fill="#66E3C4" opacity=".18"/>
76
+ <path d="M434 29l3 3 6-7" fill="none" stroke="#66E3C4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
77
+ </g>
78
+ <g transform="translate(0 144)">
79
+ <rect width="474" height="82" rx="14" fill="#101821" stroke="#2C3A48"/>
80
+ <rect width="5" height="82" rx="2.5" fill="#7CC7FF"/>
81
+ <text x="26" y="32" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18" font-weight="700">/context
82
+ </text>
83
+ <text x="26" y="59" fill="#8B9AAD" font-size="16">Usage breakdown · Injected content preview
84
+ </text>
85
+ <g transform="translate(416 23)">
86
+ <rect width="42" height="14" rx="7" fill="#1C2B38"/>
87
+ <rect width="27" height="14" rx="7" fill="#7CC7FF"/>
88
+ </g>
89
+ </g>
90
+ <g transform="translate(0 236)">
91
+ <rect width="474" height="82" rx="14" fill="#101821" stroke="#2C3A48"/>
92
+ <rect width="5" height="82" rx="2.5" fill="#F2C879"/>
93
+ <text x="26" y="32" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18" font-weight="700">@session:
94
+ </text>
95
+ <text x="26" y="59" fill="#8B9AAD" font-size="16">History completion · Cross-session references
96
+ </text>
97
+ <text x="431" y="40" fill="#F2C879" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="26">@
98
+ </text>
99
+ </g>
100
+ </g>
101
+ </svg>
@@ -4,7 +4,7 @@ import {
4
4
  type DiffIndicatorMode,
5
5
  type DiffViewMode,
6
6
  type ToolDisplayConfig,
7
- } from "../renderer/tool-diff/index.ts";
7
+ } from "../renderer/tool/diff/index.ts";
8
8
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
9
9
  import { homedir } from "node:os";
10
10
  import { join } from "node:path";
@@ -86,22 +86,6 @@ export function pickPositiveNumber(value: unknown, fallback: number, min = 1): n
86
86
  return Number.isFinite(n) ? Math.max(min, n) : fallback;
87
87
  }
88
88
 
89
- export function nearestPreset(value: number, presets: readonly string[]): string {
90
- const numeric = presets.map((p) => Number(p));
91
- let best = presets[0] ?? String(value);
92
- let bestDist = Number.POSITIVE_INFINITY;
93
- for (let i = 0; i < numeric.length; i++) {
94
- const dist = Math.abs((numeric[i] ?? 0) - value);
95
- if (dist < bestDist) {
96
- bestDist = dist;
97
- best = presets[i] ?? best;
98
- }
99
- }
100
- // Prefer exact match when value is already a preset.
101
- const exact = presets.find((p) => Number(p) === value);
102
- return exact ?? best;
103
- }
104
-
105
89
  export function normalizeConfig(input: unknown): Config {
106
90
  const source = (input && typeof input === "object" ? input : {}) as Record<string, unknown>;
107
91
  const mode = source.mode;
@@ -7,9 +7,9 @@
7
7
  import { getSettingsListTheme } from "@earendil-works/pi-coding-agent";
8
8
  import { Input, SettingsList, matchesKey, truncateToWidth } from "@earendil-works/pi-tui";
9
9
  import type { CompactThinkingController } from "../feature/compact-thinking.ts";
10
- import { applyStartupHeader } from "../feature/pi-startup-header.ts";
11
- import type { ToolGroupingHooks } from "../renderer/tool-grouping.ts";
12
- import type { DiffIndicatorMode, DiffViewMode } from "../renderer/tool-diff/index.ts";
10
+ import { applyStartupHeader } from "../feature/shell/startup-header.ts";
11
+ import type { ToolGroupingHooks } from "../renderer/tool/grouping.ts";
12
+ import type { DiffIndicatorMode, DiffViewMode } from "../renderer/tool/diff/index.ts";
13
13
  import {
14
14
  config,
15
15
  DEFAULT_CONFIG,
@@ -38,7 +38,7 @@ export type CcstylePanelHooks = {
38
38
 
39
39
  function modeSettingDescription(mode: CompactStyleMode): string {
40
40
  if (mode === "compact") {
41
- return "One summary line per assistant round; expanded edit/write rows show rich diffs.";
41
+ return "(Experimental) One summary line per assistant round; expanded edit/write rows show rich diffs.";
42
42
  }
43
43
  if (mode === "off") {
44
44
  return "Pi native tool rendering. Diff options below still apply independently.";
@@ -209,8 +209,8 @@ export async function showCcstylePanel(
209
209
  id: "mode",
210
210
  label: "Mode",
211
211
  description: modeSettingDescription(config.mode),
212
- currentValue: config.mode,
213
- values: ["on", "compact", "off"],
212
+ currentValue: config.mode === "compact" ? "compact (Experimental)" : config.mode,
213
+ values: ["on", "compact (Experimental)", "off"],
214
214
  };
215
215
  // Tracks whether the Exclude-tools submenu is open so Tab switches sections
216
216
  // only at the top level (mirrors Zentui settings: Tab = switch sections).
@@ -336,10 +336,14 @@ export async function showCcstylePanel(
336
336
 
337
337
  const onSettingChange = (id: string, value: string) => {
338
338
  switch (id) {
339
- case "mode":
340
- modeSetting.description = modeSettingDescription(value as CompactStyleMode);
341
- hooks.applyStyleMode(value as CompactStyleMode, ctx, toolGrouping);
339
+ case "mode": {
340
+ // 选项值带 Experimental 标记,选择后还原为真实 mode 值。
341
+ const mode: CompactStyleMode =
342
+ value === "compact (Experimental)" ? "compact" : (value as CompactStyleMode);
343
+ modeSetting.description = modeSettingDescription(mode);
344
+ hooks.applyStyleMode(mode, ctx, toolGrouping);
342
345
  return;
346
+ }
343
347
  case "excludeRenderers":
344
348
  excludeSetting.currentValue = formatExcludeRenderers(config.excludeRenderers);
345
349
  excludeSetting.description = excludeRenderersDescription(config.excludeRenderers);
@@ -549,4 +553,6 @@ export async function showCcstylePanel(
549
553
  },
550
554
  };
551
555
  });
556
+ // 面板卸下后主 transcript 重新挂载;再刷一次,吃掉打开期间扫树失败的切换。
557
+ hooks.refreshCurrentTranscript(ctx, toolGrouping);
552
558
  }
@@ -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)}`);
110
- if (data.commands) parts.push(`ran ${data.commands} command${plural(data.commands)}`);
121
+ if (data.writes) parts.push(`wrote ${data.writes} file${plural(data.writes)}`);
111
122
  if (data.others) parts.push(`${data.others} other tool${plural(data.others)}`);
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,13 +10,13 @@
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 { bindAgentSummary, summaryMarkdown } from "../utils/agent-summary.ts";
13
+ import { bindAgentSummary, summaryMarkdown, type AgentSummaryData } from "./core.ts";
14
14
 
15
15
  export const AGENT_SUMMARY_ENTRY_TYPE = "agent-summary";
16
16
 
17
17
  export default function (pi: ExtensionAPI): void {
18
18
  pi.registerEntryRenderer(AGENT_SUMMARY_ENTRY_TYPE, (entry, _options, theme) => {
19
- const line = summaryMarkdown(entry.data, true, {
19
+ const line = summaryMarkdown(entry.data as AgentSummaryData, true, {
20
20
  success: theme.getFgAnsi("success"),
21
21
  failed: theme.getFgAnsi("error"),
22
22
  });