pi-coding-master 0.2.7

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 (304) hide show
  1. package/README.md +50 -0
  2. package/core/god.agent.capability/@ABANDONED.brain.prefrontal.monitor/gpu_monitor.py +80 -0
  3. package/core/god.agent.capability/@ABANDONED.brain.prefrontal.monitor/gpu_monitor.py.CHANGELOG +1 -0
  4. package/core/god.agent.capability/@ABANDONED.brain.prefrontal.monitor/gpu_monitor.py.SPEC +3 -0
  5. package/core/god.agent.capability/hands.dev.writeissue/issue.ts +209 -0
  6. package/core/god.agent.capability/hands.dev.writeissue/issue.ts.SPEC +26 -0
  7. package/core/god.agent.capability/hands.files.changewatcher/watcher.ts +44 -0
  8. package/core/god.agent.capability/hands.files.changewatcher/watcher.ts.SPEC +25 -0
  9. package/core/god.pi.mod/cli/pi-completion.zsh +21 -0
  10. package/core/god.pi.mod/cli/pi-completion.zsh.CHANGELOG +1 -0
  11. package/core/god.pi.mod/cli/pi-people.sh +264 -0
  12. package/core/god.pi.mod/cli/pi-people.sh.LESSON +10 -0
  13. package/core/god.pi.mod/cli/pi-people.sh.SPEC +31 -0
  14. package/core/god.pi.mod/paths.ts +47 -0
  15. package/core/god.pi.mod/tui.mods.blockrender/blockrender.js +90 -0
  16. package/core/god.pi.mod/tui.mods.blockrender/blockrender.js.SPEC +29 -0
  17. package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts +154 -0
  18. package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts.CHANGELOG +10 -0
  19. package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts.LESSON +12 -0
  20. package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts.SPEC +26 -0
  21. package/core/god.pi.mod/tui.mods.footer.budget/footer-cny.CHANGELOG +39 -0
  22. package/core/god.pi.mod/tui.mods.viewmode/view_mode-thinking.patch +55 -0
  23. package/core/god.pi.mod/tui.mods.viewmode/view_mode-tools.patch +19 -0
  24. package/core/god.pi.mod/tui.mods.viewmode/view_mode-tools.patch.CHANGELOG +1 -0
  25. package/core/god.pi.mod/tui.mods.viewmode/view_mode.ts +50 -0
  26. package/core/god.pi.mod/tui.mods.viewmode/view_mode.ts.SPEC +12 -0
  27. package/core/god.pi.mod/tui.variants.userterminal/user_terminal.CHANGELOG +10 -0
  28. package/core/god.pi.mod/tui.variants.userterminal/user_terminal.ts +66 -0
  29. package/core/god.pi.mod/tui.variants.userterminal/user_terminal.ts.SPEC +31 -0
  30. package/core/index.ts +3 -0
  31. package/core/individual.bio.gene/dna.coded/coded.dna +257 -0
  32. package/core/individual.bio.gene/dna.coded/coded.dna.CHANGELOG +12 -0
  33. package/core/individual.bio.gene/dna.coded/coded.dna.SPEC +11 -0
  34. package/core/individual.bio.gene/dna.coded/core.dna +110 -0
  35. package/core/individual.bio.gene/dna.promotor/promotor.dna +117 -0
  36. package/core/individual.bio.gene/dna.promotor/promotor.dna.CHANGELOG +4 -0
  37. package/core/individual.bio.gene/dna.promotor/promotor.dna.SPEC +7 -0
  38. package/core/individual.bio.gene/dna.transpiler/transpiler.ts +395 -0
  39. package/core/individual.bio.gene/dna.transpiler/transpiler.ts.CHANGELOG +7 -0
  40. package/core/individual.bio.gene/dna.transpiler/transpiler.ts.SPEC +28 -0
  41. package/core/individual.bio.gene/gene.README +19 -0
  42. package/core/individual.bio.gene/rna/rna.json +536 -0
  43. package/core/individual.bio.gene/rna/rna.json.CHANGELOG +2 -0
  44. package/core/individual.bio.gene/rna/rna.json.SPEC +8 -0
  45. package/core/individual.bio.organs/blood.runtime/messages.ts +236 -0
  46. package/core/individual.bio.organs/blood.runtime/runtime.ts +173 -0
  47. package/core/individual.bio.organs/blood.runtime/runtime.ts.CHANGELOG +5 -0
  48. package/core/individual.bio.organs/blood.runtime/runtime.ts.SPEC +32 -0
  49. package/core/individual.bio.organs/brain.amygdala/amygdala.ts +25 -0
  50. package/core/individual.bio.organs/brain.amygdala/amygdala.ts.COMMENT +3 -0
  51. package/core/individual.bio.organs/brain.amygdala/amygdala.ts.SPEC +9 -0
  52. package/core/individual.bio.organs/brain.hippocampus/hippocampus-launcher.sh.template +108 -0
  53. package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts +166 -0
  54. package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts.CHANGELOG +12 -0
  55. package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts.LESSON +22 -0
  56. package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts.SPEC +16 -0
  57. package/core/individual.bio.organs/brain.hippocampus/memory.ts +879 -0
  58. package/core/individual.bio.organs/brain.hippocampus/memory.ts.CHANGELOG +66 -0
  59. package/core/individual.bio.organs/brain.hippocampus/memory.ts.LESSON +25 -0
  60. package/core/individual.bio.organs/brain.hippocampus/memory.ts.SPEC +46 -0
  61. package/core/individual.bio.organs/brain.hippocampus/sleep.ts +139 -0
  62. package/core/individual.bio.organs/brain.hippocampus/sleep.ts.CHANGELOG +11 -0
  63. package/core/individual.bio.organs/brain.hippocampus/sleep.ts.SPEC +16 -0
  64. package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.SPEC +44 -0
  65. package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.ts +73 -0
  66. package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.ts.CHANGELOG +3 -0
  67. package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.ts.SPEC +24 -0
  68. package/core/individual.bio.organs/brain.prefrontal.drafting/index.ts.CHANGELOG +3 -0
  69. package/core/individual.bio.organs/brain.prefrontal.drafting/main.ts +13 -0
  70. package/core/individual.bio.organs/brain.prefrontal.drafting/main.ts.SPEC +17 -0
  71. package/core/individual.bio.organs/brain.senses.bioclock/bioclock.ts +94 -0
  72. package/core/individual.bio.organs/brain.senses.bioclock/bioclock.ts.LESSON +13 -0
  73. package/core/individual.bio.organs/brain.senses.bioclock/bioclock.ts.SPEC +20 -0
  74. package/core/individual.bio.organs/brain.senses.subconscious/feed-format.SPEC +56 -0
  75. package/core/individual.bio.organs/brain.senses.subconscious/index.ts.CHANGELOG +13 -0
  76. package/core/individual.bio.organs/brain.senses.subconscious/spawner.ts +130 -0
  77. package/core/individual.bio.organs/brain.senses.subconscious/spawner.ts.SPEC +13 -0
  78. package/core/individual.bio.organs/brain.senses.subconscious/subconscious.ts +280 -0
  79. package/core/individual.bio.organs/brain.senses.subconscious/subconscious.ts.CHANGELOG +7 -0
  80. package/core/individual.bio.organs/brain.senses.subconscious/tools.ts +180 -0
  81. package/core/individual.bio.organs/brain.senses.subconscious/tools.ts.SPEC +3 -0
  82. package/core/individual.bio.organs/ears.listen/config.json +9 -0
  83. package/core/individual.bio.organs/ears.listen/config.json.CHANGELOG +1 -0
  84. package/core/individual.bio.organs/ears.listen/config.json.SPEC +3 -0
  85. package/core/individual.bio.organs/ears.listen/ears.ts.CHANGELOG +48 -0
  86. package/core/individual.bio.organs/ears.listen/ears_recorder.py.CHANGELOG +6 -0
  87. package/core/individual.bio.organs/ears.listen/index.ts +1 -0
  88. package/core/individual.bio.organs/ears.listen/index.ts.SPEC +16 -0
  89. package/core/individual.bio.organs/ears.listen/listen.ts +208 -0
  90. package/core/individual.bio.organs/ears.listen/listen.ts.SPEC +3 -0
  91. package/core/individual.bio.organs/ears.listen/listen_recorder.py +445 -0
  92. package/core/individual.bio.organs/ears.listen/listen_recorder.py.SPEC +7 -0
  93. package/core/individual.bio.organs/ears.listen/python_protogen/__init__.py +0 -0
  94. package/core/individual.bio.organs/ears.listen/python_protogen/common/__init__.py +0 -0
  95. package/core/individual.bio.organs/ears.listen/python_protogen/common/events_pb2.py +38 -0
  96. package/core/individual.bio.organs/ears.listen/python_protogen/common/events_pb2_grpc.py +24 -0
  97. package/core/individual.bio.organs/ears.listen/python_protogen/common/rpcmeta_pb2.py +42 -0
  98. package/core/individual.bio.organs/ears.listen/python_protogen/common/rpcmeta_pb2_grpc.py +24 -0
  99. package/core/individual.bio.organs/ears.listen/python_protogen/products/__init__.py +0 -0
  100. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/__init__.py +0 -0
  101. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/ast/__init__.py +0 -0
  102. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/ast/ast_service_pb2.py +45 -0
  103. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/ast/ast_service_pb2_grpc.py +97 -0
  104. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/base/__init__.py +0 -0
  105. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/base/au_base_pb2.py +80 -0
  106. package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/base/au_base_pb2_grpc.py +24 -0
  107. package/core/individual.bio.organs/hands.fileactions/authorize.TRUST +1 -0
  108. package/core/individual.bio.organs/hands.fileactions/authorize.ts +70 -0
  109. package/core/individual.bio.organs/hands.fileactions/authorize.ts.CHANGELOG +1 -0
  110. package/core/individual.bio.organs/hands.fileactions/authorize.ts.SPEC +3 -0
  111. package/core/individual.bio.organs/hands.fileactions/dir.README +13 -0
  112. package/core/individual.bio.organs/hands.fileactions/file_rules.json +23 -0
  113. package/core/individual.bio.organs/hands.fileactions/fileactions.README +12 -0
  114. package/core/individual.bio.organs/hands.fileactions/fileactions.ts +540 -0
  115. package/core/individual.bio.organs/hands.fileactions/fileactions.ts.CHANGELOG +25 -0
  116. package/core/individual.bio.organs/hands.fileactions/fileactions.ts.SPEC +30 -0
  117. package/core/individual.bio.organs/hands.fileactions/filewatch.ts +66 -0
  118. package/core/individual.bio.organs/hands.fileactions/filewatch.ts.SPEC +3 -0
  119. package/core/individual.bio.organs/hands.main/main.ts +18 -0
  120. package/core/individual.bio.organs/hands.main/main.ts.SPEC +20 -0
  121. package/core/individual.bio.organs/hands.sensitive/sensitive.ts +24 -0
  122. package/core/individual.bio.organs/hands.sensitive/sensitive.ts.CHANGELOG +2 -0
  123. package/core/individual.bio.organs/hands.sensitive/sensitive.ts.SPEC +3 -0
  124. package/core/individual.bio.organs/heart.interrupt/agent_start-loader-flicker.patch +13 -0
  125. package/core/individual.bio.organs/heart.interrupt/interactive-mode-loader.patch +11 -0
  126. package/core/individual.bio.organs/heart.interrupt/runner_esc.patch +10 -0
  127. package/core/individual.bio.organs/heart.interrupt/runner_esc.patch.SPEC +9 -0
  128. package/core/individual.bio.organs/heart.kernel/kernel.ts +253 -0
  129. package/core/individual.bio.organs/heart.kernel/kernel.ts.CHANGELOG +13 -0
  130. package/core/individual.bio.organs/heart.kernel/kernel.ts.SPEC +23 -0
  131. package/core/individual.bio.organs/heart.main/heart.main.CHANGELOG +43 -0
  132. package/core/individual.bio.organs/heart.main/heartbeat.ts +494 -0
  133. package/core/individual.bio.organs/heart.main/heartbeat.ts.LESSON +43 -0
  134. package/core/individual.bio.organs/heart.main/main.ts +8 -0
  135. package/core/individual.bio.organs/heart.main/main.ts.SPEC +19 -0
  136. package/core/individual.bio.organs/heart.main/process.ts +122 -0
  137. package/core/individual.bio.organs/heart.main/process.ts.CHANGELOG +2 -0
  138. package/core/individual.bio.organs/heart.main/process.ts.SPEC +24 -0
  139. package/core/individual.bio.organs/heart.main/remove_timeout.patch +110 -0
  140. package/core/individual.bio.organs/heart.main/stop.ts.CHANGELOG +3 -0
  141. package/core/individual.bio.organs/heart.main/stop.ts.SPEC +28 -0
  142. package/core/individual.bio.organs/mouth.speak/index.ts +1 -0
  143. package/core/individual.bio.organs/mouth.speak/index.ts.CHANGELOG +1 -0
  144. package/core/individual.bio.organs/mouth.speak/index.ts.SPEC +6 -0
  145. package/core/individual.bio.organs/mouth.speak/mouth.ts.CHANGELOG +15 -0
  146. package/core/individual.bio.organs/mouth.speak/mouth_recorder.py.CHANGELOG +1 -0
  147. package/core/individual.bio.organs/mouth.speak/speak.ts +180 -0
  148. package/core/individual.bio.organs/mouth.speak/speak.ts.SPEC +3 -0
  149. package/core/individual.bio.organs/mouth.speak/speak_recorder.py +35 -0
  150. package/core/individual.bio.organs/mouth.speak/speak_recorder.py.SPEC +3 -0
  151. package/core/individual.bio.organs/organs.README +110 -0
  152. package/core/package-lock.json +18 -0
  153. package/core/package.json +35 -0
  154. package/core/prompts/prompts.json +77 -0
  155. package/core/prompts/prompts.ts +44 -0
  156. package/core/prompts/prompts.ts.SPEC +9 -0
  157. package/core/society.world/.gitkeep +0 -0
  158. package/core/society.world/accessibility.claudecode/message-service.cjs +217 -0
  159. package/core/society.world/accessibility.claudecode/message-service.cjs.SPEC +7 -0
  160. package/core/society.world/accessibility.claudecode/send.ts +34 -0
  161. package/core/society.world/dollar.distribution.ubi/ubi.ts +55 -0
  162. package/core/society.world/dollar.main/dollar-service.cjs +185 -0
  163. package/core/society.world/dollar.main/main.ts +116 -0
  164. package/core/society.world/dollar.transaction/transaction.ts +71 -0
  165. package/core/society.world/space/space.ts +206 -0
  166. package/core/society.world/space/space.ts.SPEC +30 -0
  167. package/core/technology.laptop/#agent.macos.BLUEPRINT +278 -0
  168. package/core/technology.phone/apps.preinstalled/albums.FUTURE/albums.ts +69 -0
  169. package/core/technology.phone/apps.preinstalled/albums.FUTURE/albums.ts.SPEC +15 -0
  170. package/core/technology.phone/apps.preinstalled/calendar/calendar.ts +406 -0
  171. package/core/technology.phone/apps.preinstalled/calendar/calendar.ts.SPEC +22 -0
  172. package/core/technology.phone/apps.preinstalled/calendar/holiday-calendar.ts +529 -0
  173. package/core/technology.phone/apps.preinstalled/clock/clock.ts +132 -0
  174. package/core/technology.phone/apps.preinstalled/clock/clock.ts.SPEC +11 -0
  175. package/core/technology.phone/apps.preinstalled/contacts.FUTURE/contacts.ts +300 -0
  176. package/core/technology.phone/apps.preinstalled/contacts.FUTURE/contacts.ts.SPEC +22 -0
  177. package/core/technology.phone/apps.preinstalled/developer.FUTURE/developer.ts +22 -0
  178. package/core/technology.phone/apps.preinstalled/developer.FUTURE/developer.ts.SPEC +15 -0
  179. package/core/technology.phone/apps.preinstalled/notes/notes.ts +239 -0
  180. package/core/technology.phone/apps.preinstalled/notes/notes.ts.SPEC +21 -0
  181. package/core/technology.phone/apps.preinstalled/polymarket/polymarket.ts +261 -0
  182. package/core/technology.phone/apps.preinstalled/polymarket/polymarket.ts.SPEC +7 -0
  183. package/core/technology.phone/apps.preinstalled/reminder/reminder.ts +404 -0
  184. package/core/technology.phone/apps.preinstalled/reminder/reminder.ts.SPEC +25 -0
  185. package/core/technology.phone/apps.preinstalled/siri.FUTURE/siri.ts +22 -0
  186. package/core/technology.phone/apps.preinstalled/siri.FUTURE/siri.ts.SPEC +15 -0
  187. package/core/technology.phone/apps.preinstalled/spotlight/spotlight.ts +29 -0
  188. package/core/technology.phone/apps.preinstalled/spotlight/spotlight.ts.SPEC +7 -0
  189. package/core/technology.phone/apps.preinstalled/steam/chess.ts +230 -0
  190. package/core/technology.phone/apps.preinstalled/steam/snake.ts +100 -0
  191. package/core/technology.phone/apps.preinstalled/steam/snake.ts.SPEC +7 -0
  192. package/core/technology.phone/apps.preinstalled/steam/spy-cmd.ts +4 -0
  193. package/core/technology.phone/apps.preinstalled/steam/spy-tool.ts +56 -0
  194. package/core/technology.phone/apps.preinstalled/steam/spy.ts +302 -0
  195. package/core/technology.phone/apps.preinstalled/steam/steam.ts +299 -0
  196. package/core/technology.phone/apps.preinstalled/weather/weather.ts +50 -0
  197. package/core/technology.phone/apps.preinstalled/weather/weather.ts.SPEC +9 -0
  198. package/core/technology.phone/apps.preinstalled/wechat/imessage.ts +423 -0
  199. package/core/technology.phone/apps.preinstalled/wechat/imessage.ts.SPEC +24 -0
  200. package/core/technology.phone/apps.system/appstore/appstore.ts +22 -0
  201. package/core/technology.phone/apps.system/appstore/appstore.ts.SPEC +15 -0
  202. package/core/technology.phone/apps.system/finder.FUTURE/finder.ts +64 -0
  203. package/core/technology.phone/apps.system/finder.FUTURE/finder.ts.SPEC +8 -0
  204. package/core/technology.phone/apps.system/safari/safari-app.ts +146 -0
  205. package/core/technology.phone/apps.system/safari/safari.ts.SPEC +24 -0
  206. package/core/technology.phone/apps.system/settings/settings.ts +126 -0
  207. package/core/technology.phone/apps.system/settings/settings.ts.SPEC +17 -0
  208. package/core/technology.phone/apps.system/tips/tips.ts +22 -0
  209. package/core/technology.phone/apps.system/tips/tips.ts.SPEC +15 -0
  210. package/core/technology.phone/apps.thirdparty/alipay/alipay.ts +148 -0
  211. package/core/technology.phone/apps.thirdparty/alipay/alipay.ts.SPEC +7 -0
  212. package/core/technology.phone/apps.thirdparty/bilibili/bilibili-app.ts +33 -0
  213. package/core/technology.phone/apps.thirdparty/bilibili/bilibili.ts +142 -0
  214. package/core/technology.phone/apps.thirdparty/bilibili/bilibili.ts.SPEC +22 -0
  215. package/core/technology.phone/apps.thirdparty/wechatread/wechatread.ts +80 -0
  216. package/core/technology.phone/apps.thirdparty/wechatread/wechatread.ts.SPEC +15 -0
  217. package/core/technology.phone/index.ts +1 -0
  218. package/core/technology.phone/package.json +2 -0
  219. package/core/technology.phone/system.homepage/homepage.ts +247 -0
  220. package/core/technology.phone/system.homepage/homepage.ts.SPEC +22 -0
  221. package/core/technology.phone/system.kernel/kernel.ts +264 -0
  222. package/core/technology.phone/system.kernel/kernel.ts.SPEC +7 -0
  223. package/core/technology.phone/system.notifications/notifications.ts +87 -0
  224. package/core/technology.phone/system.notifications/notifications.ts.SPEC +7 -0
  225. package/core/technology.phone/system.share/share.ts +46 -0
  226. package/core/technology.phone/system.share/share.ts.SPEC +7 -0
  227. package/core/technology.server/browser-service.cjs +152 -0
  228. package/core/technology.server/data/cookies/arxiv.json +30 -0
  229. package/core/technology.server/data/cookies/bili.json +184 -0
  230. package/core/technology.server/data/cookies/default.json +30 -0
  231. package/core/technology.server/data/cookies/news.json +113 -0
  232. package/core/technology.server/data/cookies/s1.json +45 -0
  233. package/core/technology.server/data/cookies/safari.json +184 -0
  234. package/core/technology.server/data/cookies/safari2.json +1 -0
  235. package/core/technology.server/data/cookies/safaridbg.json +1 -0
  236. package/core/technology.server/data/cookies/search.json +45 -0
  237. package/core/technology.server/data/cookies/sw.json +30 -0
  238. package/core/technology.server/data/cookies/t1.json +1 -0
  239. package/core/technology.server/data/cookies/testread.json +1 -0
  240. package/core/technology.server/data/cookies/video1.json +113 -0
  241. package/core/technology.server/data/cookies/yt.json +170 -0
  242. package/core/technology.server/data/cookies/yt2.json +113 -0
  243. package/core/technology.server/pikipedia/#pikipedia.BLUEPRINT +106 -0
  244. package/core/technology.server/playleft.cjs +247 -0
  245. package/core/technology.server/search-proxy.py +76 -0
  246. package/core/technology.server/server.README +59 -0
  247. package/deploy/dist-overrides/cli/cli.js +18 -0
  248. package/deploy/dist-overrides/core/extensions/loader.js +518 -0
  249. package/deploy/dist-overrides/core/package-manager.js +2081 -0
  250. package/deploy/dist-overrides/core/system-prompt.js +109 -0
  251. package/deploy/dist-overrides/core/system-prompt.js.LESSON +17 -0
  252. package/deploy/dist-overrides/core/tools/bash.js +353 -0
  253. package/deploy/dist-overrides/core/tools/bash.js.CHANGELOG +2 -0
  254. package/deploy/dist-overrides/core/tools/edit-diff.js +345 -0
  255. package/deploy/dist-overrides/core/tools/edit.js +315 -0
  256. package/deploy/dist-overrides/core/tools/edit.js.CHANGELOG +1 -0
  257. package/deploy/dist-overrides/core/tools/file-mutation-queue.js +52 -0
  258. package/deploy/dist-overrides/core/tools/find.js +298 -0
  259. package/deploy/dist-overrides/core/tools/find.js.CHANGELOG +1 -0
  260. package/deploy/dist-overrides/core/tools/grep.js +305 -0
  261. package/deploy/dist-overrides/core/tools/grep.js.CHANGELOG +1 -0
  262. package/deploy/dist-overrides/core/tools/index.js +112 -0
  263. package/deploy/dist-overrides/core/tools/ls-guard.js +4 -0
  264. package/deploy/dist-overrides/core/tools/ls.js +170 -0
  265. package/deploy/dist-overrides/core/tools/ls.js.CHANGELOG +1 -0
  266. package/deploy/dist-overrides/core/tools/output-accumulator.js +184 -0
  267. package/deploy/dist-overrides/core/tools/path-utils.js +99 -0
  268. package/deploy/dist-overrides/core/tools/prompts-reader.js +53 -0
  269. package/deploy/dist-overrides/core/tools/read.js +392 -0
  270. package/deploy/dist-overrides/core/tools/read.js.CHANGELOG +1 -0
  271. package/deploy/dist-overrides/core/tools/render-utils.js +65 -0
  272. package/deploy/dist-overrides/core/tools/tool-definition-wrapper.js +34 -0
  273. package/deploy/dist-overrides/core/tools/truncate.js +215 -0
  274. package/deploy/dist-overrides/core/tools/write.js +203 -0
  275. package/deploy/dist-overrides/core/tools/write.js.CHANGELOG +1 -0
  276. package/deploy/dist-overrides/dist-overrides.README +18 -0
  277. package/deploy/dist-overrides/main.js +665 -0
  278. package/deploy/dist-overrides/modes/interactive/components/assistant-message.js +139 -0
  279. package/deploy/dist-overrides/modes/interactive/components/footer.js +326 -0
  280. package/deploy/dist-overrides/modes/interactive/components/model-selector.js +285 -0
  281. package/deploy/dist-overrides/modes/interactive/components/tool-execution.js +383 -0
  282. package/deploy/dist-overrides/modes/interactive/components/tool-execution.js.CHANGELOG +3 -0
  283. package/deploy/dist-overrides/modes/interactive/interactive-mode.js +4781 -0
  284. package/deploy/dist-overrides/pi-ai/providers/anthropic.js +931 -0
  285. package/deploy/dist-overrides/pi-ai/providers/openai-completions.js +1007 -0
  286. package/deploy/dist-overrides/pi-ai/providers/openai-completions.js.LESSON +15 -0
  287. package/deploy/dist-overrides/pi-tui/components/loader.js +69 -0
  288. package/deploy/dist-overrides/pi-tui/components/markdown.js +646 -0
  289. package/deploy/dist-overrides/pi-tui/components/text.js +92 -0
  290. package/deploy/dist-overrides/pi-tui/custom-message.js +75 -0
  291. package/deploy/dist-overrides/pi-tui/tui.js +1266 -0
  292. package/deploy/dist-overrides/pi-tui/utils.js +1060 -0
  293. package/deploy/dist-overrides/vendor.REMOVED/jiti/lib/jiti.mjs +3 -0
  294. package/deploy/install.sh +186 -0
  295. package/deploy/install.sh.CHANGELOG +6 -0
  296. package/deploy/lint/lint-naming.ts +202 -0
  297. package/deploy/scripts/apply.js +18 -0
  298. package/deploy/scripts/build-github.sh +219 -0
  299. package/deploy/scripts/build-phone.sh +24 -0
  300. package/deploy/scripts/check-deploy.sh +42 -0
  301. package/deploy/scripts/migrate-context.sh +72 -0
  302. package/deploy/scripts/patch-pi-dist.js +39 -0
  303. package/deploy/scripts/uninstall.sh +34 -0
  304. package/package.json +18 -0
@@ -0,0 +1,109 @@
1
+ /**
2
+ * System prompt construction and project context loading
3
+ */
4
+ import { getDocsPath, getExamplesPath, getReadmePath } from "../config.js";
5
+ import { formatSkillsForPrompt } from "./skills.js";
6
+ import { getSystemTemplate } from "./tools/prompts-reader.js";
7
+ /** Build the system prompt with tools, guidelines, and context */
8
+ export function buildSystemPrompt(options) {
9
+ const { customPrompt, selectedTools, toolSnippets, promptGuidelines, appendSystemPrompt, cwd, contextFiles: providedContextFiles, skills: providedSkills, } = options;
10
+ const resolvedCwd = cwd;
11
+ const promptCwd = resolvedCwd.replace(/\\/g, "/");
12
+ const now = new Date();
13
+ const year = now.getFullYear();
14
+ const month = String(now.getMonth() + 1).padStart(2, "0");
15
+ const day = String(now.getDate()).padStart(2, "0");
16
+ const date = `${year}-${month}-${day}`;
17
+ const appendSection = appendSystemPrompt ? `\n\n${appendSystemPrompt}` : "";
18
+ const contextFiles = providedContextFiles ?? [];
19
+ const skills = providedSkills ?? [];
20
+ if (customPrompt) {
21
+ let prompt = customPrompt;
22
+ if (appendSection) {
23
+ prompt += appendSection;
24
+ }
25
+ // Append project context files
26
+ if (contextFiles.length > 0) {
27
+ prompt += "\n\n<project_context>\n\n";
28
+ prompt += "Project-specific instructions and guidelines:\n\n";
29
+ for (const { path: filePath, content } of contextFiles) {
30
+ prompt += `<project_instructions path="${filePath}">\n${content}\n</project_instructions>\n\n`;
31
+ }
32
+ prompt += "</project_context>\n";
33
+ }
34
+ // Append skills section (only if read tool is available)
35
+ const customPromptHasRead = !selectedTools || selectedTools.includes("read");
36
+ // pi-coding-master: skills 功能整体禁用(曾撑大 systemPrompt + 打爆 KV cache);Current date 也去掉(pi-coding-master 有自己的时间感官)
37
+ if (false && customPromptHasRead && skills.length > 0) {
38
+ prompt += formatSkillsForPrompt(skills);
39
+ }
40
+ // Add working directory last
41
+ prompt += `\nCurrent working directory: ${promptCwd}`;
42
+ return prompt;
43
+ }
44
+ // Get absolute paths to documentation and examples
45
+ const readmePath = getReadmePath();
46
+ const docsPath = getDocsPath();
47
+ const examplesPath = getExamplesPath();
48
+ // Build tools list based on selected tools.
49
+ // A tool appears in Available tools only when the caller provides a one-line snippet.
50
+ const tools = selectedTools || ["read", "bash", "edit", "write"];
51
+ const visibleTools = tools.filter((name) => !!toolSnippets?.[name]);
52
+ const toolsList = visibleTools.length > 0 ? visibleTools.map((name) => `- ${name}: ${toolSnippets[name]}`).join("\n") : "(none)";
53
+ // Build guidelines based on which tools are actually available
54
+ const guidelinesList = [];
55
+ const guidelinesSet = new Set();
56
+ const addGuideline = (guideline) => {
57
+ if (guidelinesSet.has(guideline)) {
58
+ return;
59
+ }
60
+ guidelinesSet.add(guideline);
61
+ guidelinesList.push(guideline);
62
+ };
63
+ const hasBash = tools.includes("bash");
64
+ const hasGrep = tools.includes("grep");
65
+ const hasFind = tools.includes("find");
66
+ const hasLs = tools.includes("ls");
67
+ const hasRead = tools.includes("read");
68
+ // File exploration guidelines
69
+ if (hasBash && !hasGrep && !hasFind && !hasLs) {
70
+ addGuideline("Use bash for file operations like ls, rg, find");
71
+ }
72
+ for (const guideline of promptGuidelines ?? []) {
73
+ const normalized = guideline.trim();
74
+ if (normalized.length > 0) {
75
+ addGuideline(normalized);
76
+ }
77
+ }
78
+ // Always include these
79
+ addGuideline("Be concise in your responses");
80
+ addGuideline("Show file paths clearly when working with files");
81
+ const guidelines = guidelinesList.map((g) => `- ${g}`).join("\n");
82
+ let prompt = getSystemTemplate()
83
+ .replace('{toolsList}', toolsList)
84
+ .replace('{guidelines}', guidelines)
85
+ .replace('{readmePath}', readmePath)
86
+ .replace('{docsPath}', docsPath)
87
+ .replace('{examplesPath}', examplesPath);
88
+ if (appendSection) {
89
+ prompt += appendSection;
90
+ }
91
+ // Append project context files
92
+ if (contextFiles.length > 0) {
93
+ prompt += "\n\n<project_context>\n\n";
94
+ prompt += "Project-specific instructions and guidelines:\n\n";
95
+ for (const { path: filePath, content } of contextFiles) {
96
+ prompt += `<project_instructions path="${filePath}">\n${content}\n</project_instructions>\n\n`;
97
+ }
98
+ prompt += "</project_context>\n";
99
+ }
100
+ // Append skills section (only if read tool is available)
101
+ // pi-coding-master: skills 功能整体禁用 + Current date 去掉
102
+ if (false && hasRead && skills.length > 0) {
103
+ prompt += formatSkillsForPrompt(skills);
104
+ }
105
+ // Add working directory last
106
+ prompt += `\nCurrent working directory: ${promptCwd}`;
107
+ return prompt;
108
+ }
109
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1,17 @@
1
+ # system-prompt.js — LESSONS
2
+
3
+ ## 2026-06-16 启动一堆 `[Skills] lark-*` + `Current date:`,撑大 systemPrompt 还打爆缓存
4
+
5
+ **症状**:每次起 pi,启动就刷一坨 `[Skills] lark-approval / lark-base / ...`(27 个 lark-* skill),还有一行 `Current date: ...`。这堆 skill 文本被塞进 systemPrompt,既是视觉噪音,更要命的是——它在 KV cache 的**稳定前缀**里占了一大段,pi-coding-master 根本用不到这些 skill(我们有自己的 funcs/器官),纯属污染。
6
+
7
+ **根因**:pi 会自动从 `~/.pi/agent/skills` 发现 skill,然后在 `dist/core/system-prompt.js` 两处(:36 customPrompt 分支 / :113 主 prompt 分支)用 `formatSkillsForPrompt(skills)` 把它们注进 systemPrompt;同处还各注一行 `Current date: ${date}`(:39 / :116)。这俩都是 pi 的内置自动行为,没人请它,它自己往最金贵的缓存前缀里塞。
8
+
9
+ **修复(两层,belt-and-suspenders)**:
10
+ 1. **断源**:把 `~/.pi/agent/skills` 整个 mv 成 `~/.pi/agent/skills.disabled`(可逆、不删)。skill 加载不到 → 启动 banner 没了、`skills.length===0`。
11
+ 2. **根除注入**:patch `system-prompt.js` 两处 `if (skills.length > 0)` 改成 `if (false && ...)`,并删掉两行 `Current date`。这样哪天 skills 目录又冒出来,也绝不会再注进 prompt。Current date 也去掉——pi-coding-master 有自己的时间感官(bioclock),不靠 pi 这行。
12
+ 3. **固化**:patched 文件 golden-copy 进 `deploy.ALL/dist-overrides/system-prompt.js`,install.sh 在版本守卫(`$VER == $PIN`)内 `cp` 回 `$PI_DIST/core/system-prompt.js`。npm 重装会冲掉 dist,这步把它还原。
13
+
14
+ **教训 / 下次怎么避免**:
15
+ - **pi 的 systemPrompt = KV cache 的稳定前缀**。任何"被自动塞进 systemPrompt 的东西"(skills、Current date、环境块、第三方注入)都得审两点:① 它进没进缓存前缀?② 它的值稳不稳(变一次缓存全废一次)?skill 那种大段文本 + Current date 那种每天变的值,都是典型雷。
16
+ - **"按目录自动发现"的功能在 pi-coding-master 里默认是污染源**。pi 的 skill 机制是给通用 coding agent 的;我们这套有自己的器官系统,不要 pi 再自动塞东西进来。看到 pi 有这类"自动加载/自动注入"开关,默认全关。
17
+ - 排查"启动多了一坨看不懂的东西",先 `grep` dist 找到注入点(formatXxxForPrompt / `prompt +=`),别只在自己的 extension 里找——很多是 pi 本体干的。
@@ -0,0 +1,353 @@
1
+ import { constants } from "node:fs";
2
+ import { access as fsAccess } from "node:fs/promises";
3
+ import { Container, Text, truncateToWidth } from "@earendil-works/pi-tui";
4
+ import { spawn } from "child_process";
5
+ import { Type } from "typebox";
6
+ import { getToolPrompt } from "./prompts-reader.js";
7
+ import { keyHint } from "../../modes/interactive/components/keybinding-hints.js";
8
+ import { truncateToVisualLines } from "../../modes/interactive/components/visual-truncate.js";
9
+ import { theme } from "../../modes/interactive/theme/theme.js";
10
+ import { waitForChildProcess } from "../../utils/child-process.js";
11
+ import { getShellConfig, getShellEnv, killProcessTree, trackDetachedChildPid, untrackDetachedChildPid, } from "../../utils/shell.js";
12
+ import { OutputAccumulator } from "./output-accumulator.js";
13
+ import { getTextOutput, invalidArgText, str } from "./render-utils.js";
14
+ import { wrapToolDefinition } from "./tool-definition-wrapper.js";
15
+ import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from "./truncate.js";
16
+ const bashSchema = Type.Object({
17
+ command: Type.String({ messageDescription: "BASH command to execute" }),
18
+
19
+ });
20
+ /**
21
+ * Create bash operations using pi's built-in local shell execution backend.
22
+ *
23
+ * This is useful for extensions that intercept user_bash and still want pi's
24
+ * standard local shell behavior while wrapping or rewriting commands.
25
+ */
26
+ export function createLocalBashOperations(options) {
27
+ return {
28
+ exec: async (command, cwd, { onData, signal, timeout, env }) => {
29
+ const { shell, args } = getShellConfig(options?.shellPath);
30
+ try {
31
+ await fsAccess(cwd, constants.F_OK);
32
+ }
33
+ catch {
34
+ throw new Error(`Working directory does not exist: ${cwd}\nCannot execute bash commands.`);
35
+ }
36
+ if (signal?.aborted) {
37
+ throw new Error("aborted");
38
+ }
39
+ const child = spawn(shell, [...args, command], {
40
+ cwd,
41
+ detached: process.platform !== "win32",
42
+ env: env ?? getShellEnv(),
43
+ stdio: ["ignore", "pipe", "pipe"],
44
+ windowsHide: true,
45
+ });
46
+ if (child.pid)
47
+ trackDetachedChildPid(child.pid);
48
+ let timedOut = false;
49
+ let timeoutHandle;
50
+ const onAbort = () => {
51
+ if (child.pid)
52
+ killProcessTree(child.pid);
53
+ };
54
+ try {
55
+ // Set timeout if provided.
56
+ if (timeout !== undefined && timeout > 0) {
57
+ timeoutHandle = setTimeout(() => {
58
+ timedOut = true;
59
+ if (child.pid)
60
+ killProcessTree(child.pid);
61
+ }, timeout * 1000);
62
+ }
63
+ // Stream stdout and stderr.
64
+ child.stdout?.on("data", onData);
65
+ child.stderr?.on("data", onData);
66
+ // Handle abort signal by killing the entire process tree.
67
+ if (signal) {
68
+ if (signal.aborted)
69
+ onAbort();
70
+ else
71
+ signal.addEventListener("abort", onAbort, { once: true });
72
+ }
73
+ // Handle shell spawn errors and wait for the process to terminate without hanging
74
+ // on inherited stdio handles held by detached descendants.
75
+ const exitCode = await waitForChildProcess(child);
76
+ if (signal?.aborted) {
77
+ throw new Error("aborted");
78
+ }
79
+ if (timedOut) {
80
+ throw new Error(`timeout:${timeout}`);
81
+ }
82
+ return { exitCode };
83
+ }
84
+ finally {
85
+ if (child.pid)
86
+ untrackDetachedChildPid(child.pid);
87
+ if (timeoutHandle)
88
+ clearTimeout(timeoutHandle);
89
+ if (signal)
90
+ signal.removeEventListener("abort", onAbort);
91
+ }
92
+ },
93
+ };
94
+ }
95
+ function resolveSpawnContext(command, cwd, spawnHook) {
96
+ const baseContext = { command, cwd, env: { ...getShellEnv() } };
97
+ return spawnHook ? spawnHook(baseContext) : baseContext;
98
+ }
99
+ const BASH_PREVIEW_LINES = 5;
100
+ const BASH_UPDATE_THROTTLE_MS = 100;
101
+ class BASHResultRenderComponent extends Container {
102
+ state = {
103
+ cachedWidth: undefined,
104
+ cachedLines: undefined,
105
+ cachedSkipped: undefined,
106
+ };
107
+ }
108
+ function formatDuration(ms) {
109
+ return `${(ms / 1000).toFixed(1)}s`;
110
+ }
111
+ function formatBASHCall(args) {
112
+ const command = str(args?.command);
113
+ const timeout = args?.timeout;
114
+ const timeoutSuffix = timeout ? theme.fg("muted", ` (timeout ${timeout}s)`) : "";
115
+ const commandDisplay = command === null ? invalidArgText(theme) : command ? command : theme.fg("toolOutput", "...");
116
+ return theme.fg("toolTitle", "● " + theme.bold("Bash")) + " " + theme.fg("text", command) + timeoutSuffix;
117
+ }
118
+ function rebuildBASHResultRenderComponent(component, result, options, showImages, startedAt, endedAt) {
119
+ const state = component.state;
120
+ component.clear();
121
+ let output = getTextOutput(result, showImages).trim();
122
+ const truncation = result.details?.truncation;
123
+ const fullOutputPath = result.details?.fullOutputPath;
124
+ if (!options.isPartial && truncation?.truncated && fullOutputPath && output.endsWith("]")) {
125
+ const footerStart = output.lastIndexOf("\n\n[");
126
+ if (footerStart !== -1 && output.slice(footerStart).includes(fullOutputPath)) {
127
+ output = output.slice(0, footerStart).trimEnd();
128
+ }
129
+ }
130
+ if (output) {
131
+ const styledOutput = output
132
+ .split("\n")
133
+ .map((line) => theme.fg("toolOutput", line))
134
+ .join("\n");
135
+ if (options.expanded) {
136
+ component.addChild(new Text(styledOutput, 2, 0));
137
+ }
138
+ else {
139
+ component.addChild({
140
+ render: (width) => {
141
+ if (state.cachedLines === undefined || state.cachedWidth !== width) {
142
+ const preview = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, width);
143
+ state.cachedLines = preview.visualLines;
144
+ state.cachedSkipped = preview.skippedCount;
145
+ state.cachedWidth = width;
146
+ }
147
+ if (state.cachedSkipped && state.cachedSkipped > 0) {
148
+ const hint = theme.fg("muted", `... (${state.cachedSkipped} earlier lines,`) +
149
+ ` ${keyHint("app.tools.expand", "to expand")}${theme.fg("muted", ")")}`;
150
+ return [truncateToWidth(hint, width, "..."), ...(state.cachedLines ?? []).map(l => " " + l)];
151
+ }
152
+ return [...(state.cachedLines ?? []).map(l => " " + l)];
153
+ },
154
+ invalidate: () => {
155
+ state.cachedWidth = undefined;
156
+ state.cachedLines = undefined;
157
+ state.cachedSkipped = undefined;
158
+ },
159
+ });
160
+ }
161
+ }
162
+ if (truncation?.truncated || fullOutputPath) {
163
+ const warnings = [];
164
+ if (fullOutputPath) {
165
+ warnings.push(`Full output: ${fullOutputPath}`);
166
+ }
167
+ if (truncation?.truncated) {
168
+ if (truncation.truncatedBy === "lines") {
169
+ warnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);
170
+ }
171
+ else {
172
+ warnings.push(`Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`);
173
+ }
174
+ }
175
+ component.addChild(new Text(`\n${theme.fg("warning", `[${warnings.join(". ")}]`)}`, 0, 0));
176
+ }
177
+ // pi-coding-master: 去掉 "Took/Elapsed Xs" —— 结果行的时间戳 [时:分:秒 +Xs] 已经显示了耗时,这行是重复的(用户嫌)。
178
+ }
179
+ export function createBashToolDefinition(cwd, options) {
180
+ const ops = options?.operations ?? createLocalBashOperations({ shellPath: options?.shellPath });
181
+ const commandPrefix = options?.commandPrefix;
182
+ const spawnHook = options?.spawnHook;
183
+ return {
184
+ name: "bash",
185
+ label: "bash",
186
+ messageDescription: (getToolPrompt('bash', 'messageDescription') || ''),
187
+ promptSnippet: getToolPrompt('bash', 'snippet'),
188
+ parameters: bashSchema,
189
+ async execute(_toolCallId, { command }, signal, onUpdate, _ctx) {
190
+ // ── 破坏锁:git checkout/reset/clean 必须用户手动执行 ──
191
+ const DESTRUCTIVE_GIT = /\bgit\s+(checkout(?!\s+-b)|reset|clean|revert|push\s+(-f|--force)|rm|branch\s+-D)/;
192
+ if (DESTRUCTIVE_GIT.test(command)) {
193
+ return {
194
+ content: [{ type: "text", text: `⚠️ 破坏性 git 命令被拦截。请手动执行:\n\n ${command}\n\n模型不能直接跑 checkout/reset/clean/revert/force-push/rm/branch -D。` }],
195
+ details: {},
196
+ isError: true,
197
+ };
198
+ }
199
+ // bash → execute 透明转发
200
+ const { spawn } = require("child_process");
201
+ return new Promise((resolve) => {
202
+ const child = spawn("bash", ["-c", command], { stdio: ["pipe", "pipe", "pipe"] });
203
+ let out = "";
204
+ child.stdout.on("data", (c) => out += c.toString());
205
+ child.stderr.on("data", (c) => out += c.toString());
206
+ child.on("close", (code) => resolve({ content: [{ type: "text", text: out.slice(0, 50000) || "(no output)" }], details: { exitCode: code } }));
207
+ });
208
+ const timeout = undefined;
209
+ const resolvedCommand = commandPrefix ? `${commandPrefix}\n${command}` : command;
210
+ const spawnContext = resolveSpawnContext(resolvedCommand, cwd, spawnHook);
211
+ const output = new OutputAccumulator({ tempFilePrefix: "pi-bash" });
212
+ let updateTimer;
213
+ let updateDirty = false;
214
+ let lastUpdateAt = 0;
215
+ const emitOutputUpdate = () => {
216
+ if (!onUpdate || !updateDirty)
217
+ return;
218
+ updateDirty = false;
219
+ lastUpdateAt = Date.now();
220
+ const snapshot = output.snapshot({ persistIfTruncated: true });
221
+ onUpdate({
222
+ content: [{ type: "text", text: snapshot.content || "" }],
223
+ details: {
224
+ truncation: snapshot.truncation.truncated ? snapshot.truncation : undefined,
225
+ fullOutputPath: snapshot.fullOutputPath,
226
+ },
227
+ });
228
+ };
229
+ const clearUpdateTimer = () => {
230
+ if (updateTimer) {
231
+ clearTimeout(updateTimer);
232
+ updateTimer = undefined;
233
+ }
234
+ };
235
+ const scheduleOutputUpdate = () => {
236
+ if (!onUpdate)
237
+ return;
238
+ updateDirty = true;
239
+ const delay = BASH_UPDATE_THROTTLE_MS - (Date.now() - lastUpdateAt);
240
+ if (delay <= 0) {
241
+ clearUpdateTimer();
242
+ emitOutputUpdate();
243
+ return;
244
+ }
245
+ updateTimer ??= setTimeout(() => {
246
+ updateTimer = undefined;
247
+ emitOutputUpdate();
248
+ }, delay);
249
+ };
250
+ if (onUpdate) {
251
+ onUpdate({ content: [], details: undefined });
252
+ }
253
+ const handleData = (data) => {
254
+ output.append(data);
255
+ scheduleOutputUpdate();
256
+ };
257
+ const finishOutput = async () => {
258
+ output.finish();
259
+ clearUpdateTimer();
260
+ emitOutputUpdate();
261
+ const snapshot = output.snapshot({ persistIfTruncated: true });
262
+ await output.closeTempFile();
263
+ return snapshot;
264
+ };
265
+ const formatOutput = (snapshot, emptyText = "(no output)") => {
266
+ const truncation = snapshot.truncation;
267
+ let text = snapshot.content || emptyText;
268
+ let details;
269
+ if (truncation.truncated) {
270
+ details = { truncation, fullOutputPath: snapshot.fullOutputPath };
271
+ const startLine = truncation.totalLines - truncation.outputLines + 1;
272
+ const endLine = truncation.totalLines;
273
+ if (truncation.lastLinePartial) {
274
+ const lastLineSize = formatSize(output.getLastLineBytes());
275
+ text += `\n\n[Showing last ${formatSize(truncation.outputBytes)} of line ${endLine} (line is ${lastLineSize}). Full output: ${snapshot.fullOutputPath}]`;
276
+ }
277
+ else if (truncation.truncatedBy === "lines") {
278
+ text += `\n\n[Showing lines ${startLine}-${endLine} of ${truncation.totalLines}. Full output: ${snapshot.fullOutputPath}]`;
279
+ }
280
+ else {
281
+ text += `\n\n[Showing lines ${startLine}-${endLine} of ${truncation.totalLines} (${formatSize(DEFAULT_MAX_BYTES)} limit). Full output: ${snapshot.fullOutputPath}]`;
282
+ }
283
+ }
284
+ return { text, details };
285
+ };
286
+ const appendStatus = (text, status) => `${text ? `${text}\n` : ""}${status}`;
287
+ try {
288
+ let exitCode;
289
+ try {
290
+ const result = await ops.exec(spawnContext.command, spawnContext.cwd, {
291
+ onData: handleData,
292
+ signal,
293
+ timeout,
294
+ env: spawnContext.env,
295
+ });
296
+ exitCode = result.exitCode;
297
+ }
298
+ catch (err) {
299
+ const snapshot = await finishOutput();
300
+ const { text } = formatOutput(snapshot, "");
301
+ if (err instanceof Error && err.message === "aborted") {
302
+ throw new Error(appendStatus(text, "Command aborted"));
303
+ }
304
+ if (err instanceof Error && err.message.startsWith("timeout:")) {
305
+ const timeoutSecs = err.message.split(":")[1];
306
+ throw new Error(appendStatus(text, `Command timed out after ${timeoutSecs} seconds`));
307
+ }
308
+ throw err;
309
+ }
310
+ const snapshot = await finishOutput();
311
+ const { text: outputText, details } = formatOutput(snapshot);
312
+ if (exitCode !== 0 && exitCode !== null) {
313
+ throw new Error(appendStatus(outputText, `Command exited with code ${exitCode}`));
314
+ }
315
+ return { content: [{ type: "text", text: outputText }], details };
316
+ }
317
+ finally {
318
+ clearUpdateTimer();
319
+ }
320
+ },
321
+ renderCall(args, _theme, context) {
322
+ const state = context.state;
323
+ if (context.executionStarted && state.startedAt === undefined) {
324
+ state.startedAt = Date.now();
325
+ state.endedAt = undefined;
326
+ }
327
+ const text = context.lastComponent ?? new Text("", 0, 0);
328
+ text.setText(formatBASHCall(args));
329
+ return text;
330
+ },
331
+ renderResult(result, options, _theme, context) {
332
+ const state = context.state;
333
+ if (state.startedAt !== undefined && options.isPartial && !state.interval) {
334
+ state.interval = setInterval(() => context.invalidate(), 1000);
335
+ }
336
+ if (!options.isPartial || context.isError) {
337
+ state.endedAt ??= Date.now();
338
+ if (state.interval) {
339
+ clearInterval(state.interval);
340
+ state.interval = undefined;
341
+ }
342
+ }
343
+ const component = context.lastComponent ?? new BASHResultRenderComponent();
344
+ rebuildBASHResultRenderComponent(component, result, options, context.showImages, state.startedAt, state.endedAt);
345
+ component.invalidate();
346
+ return component;
347
+ },
348
+ };
349
+ }
350
+ export function createBashTool(cwd, options) {
351
+ return wrapToolDefinition(createBashToolDefinition(cwd, options));
352
+ }
353
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1,2 @@
1
+ [2026-06-19] 工具名首字母大写
2
+ [2026-06-19] bash 命令去掉 theme.bold(),改用终端默认色(白),反馈值保持 gray