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,3 @@
1
+ // jiti DISABLED by NORM-020 — any import() goes through native Node, not jiti
2
+ export function createJiti() { throw new Error("jiti disabled by NORM-020. Use native Node import() instead."); }
3
+ export default createJiti;
@@ -0,0 +1,186 @@
1
+ #!/bin/bash
2
+ # pi-coding-master installer v0.2.7
3
+ # 兼容 macOS + Linux。从 npm 全局安装或手动 bash deploy/install.sh 均可。
4
+ #
5
+ # 两条铁律:
6
+ # 1) pi-tui 的 tui.js + blockrender.js + text.js 三件套绝不能注释掉——防崩的。
7
+ # 2) live(node_modules)是一次性的,npm 重装就冲掉。修复只在源,live 崩了跑本脚本重建。
8
+ set -e
9
+
10
+ PIN="0.79.10"
11
+
12
+ # ── 定位自身:支持 DEV 开发模式 + npm 全局安装模式 ──
13
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
14
+ PKG_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
15
+
16
+ # 判断是 DEV 模式还是发行包模式
17
+ if [ -d "$PKG_ROOT/Codebase/core" ]; then
18
+ # DEV 模式:pi-coding-master.DEV/Codebase/deploy/install.sh
19
+ IMPL="$PKG_ROOT/Codebase/core"
20
+ DEPLOY="$PKG_ROOT/Codebase/deploy"
21
+ elif [ -d "$PKG_ROOT/core" ]; then
22
+ # 发行包模式:v0.2.7-stable/deploy/install.sh 或 npm 全局 pi-coding-master/deploy/install.sh
23
+ IMPL="$PKG_ROOT/core"
24
+ DEPLOY="$PKG_ROOT/deploy"
25
+ else
26
+ echo "Error: 找不到 core/ 目录。请从 pi-coding-master 包根目录运行 bash deploy/install.sh"
27
+ exit 1
28
+ fi
29
+
30
+ echo "── pi-coding-master installer (pinned pi $PIN) ──"
31
+ echo " source: $PKG_ROOT"
32
+
33
+ # ── 1. 定位 pi(只认 @earendil-works) ──
34
+ PI_DIST=""
35
+ SEARCH_PATHS=""
36
+ # npm root -g 在 mac/linux 都能用
37
+ NPM_GLOBAL="$(npm root -g 2>/dev/null)"
38
+ [ -n "$NPM_GLOBAL" ] && SEARCH_PATHS="$NPM_GLOBAL/@earendil-works/pi-coding-agent/dist"
39
+ # mac homebrew
40
+ SEARCH_PATHS="$SEARCH_PATHS /opt/homebrew/lib/node_modules/@earendil-works/pi-coding-agent/dist"
41
+ # linux 常见路径
42
+ SEARCH_PATHS="$SEARCH_PATHS /usr/lib/node_modules/@earendil-works/pi-coding-agent/dist"
43
+ SEARCH_PATHS="$SEARCH_PATHS /usr/local/lib/node_modules/@earendil-works/pi-coding-agent/dist"
44
+ # nvm/fnm
45
+ [ -n "$NVM_DIR" ] && SEARCH_PATHS="$SEARCH_PATHS $(dirname "$(which node)" 2>/dev/null)/../lib/node_modules/@earendil-works/pi-coding-agent/dist"
46
+
47
+ for c in $SEARCH_PATHS; do
48
+ [ -f "$c/core/tools/bash.js" ] && { PI_DIST="$c"; break; }
49
+ done
50
+ [ -z "$PI_DIST" ] && { echo "Error: 未找到 @earendil-works/pi-coding-agent。先: npm i -g @earendil-works/pi-coding-agent@$PIN"; exit 1; }
51
+ VER="$(node -e "console.log(require('$(dirname "$PI_DIST")/package.json').version)")"
52
+ echo " pi $VER @ $PI_DIST"
53
+ [ "$VER" != "$PIN" ] && echo " WARN: patch 钉死 $PIN;当前是 $VER,可能打不上。"
54
+
55
+ # ── 2. 打 dist patch ──
56
+ apply_patch() {
57
+ local pf="$1" n; n="$(basename "$pf")"
58
+ if ( cd "$PI_DIST" && git apply --reverse --check -p1 "$pf" ) 2>/dev/null; then
59
+ echo " $n 已应用"
60
+ elif ( cd "$PI_DIST" && git apply --check -p1 "$pf" ) 2>/dev/null; then
61
+ ( cd "$PI_DIST" && git apply -p1 "$pf" ); echo " OK $n"
62
+ else
63
+ echo " WARN: $n patch不匹配当前dist,跳过。"
64
+ fi
65
+ }
66
+ echo "patch dist:"
67
+ apply_patch "$IMPL/individual.bio.organs/heart.interrupt/runner_esc.patch"
68
+ apply_patch "$IMPL/individual.bio.organs/heart.interrupt/interactive-mode-loader.patch"
69
+
70
+ # ── 2b. dist-overrides ──
71
+ PI_AI_DIST="$(dirname "$PI_DIST")/node_modules/@earendil-works/pi-ai/dist"
72
+ PI_TUI_DIST="$(dirname "$PI_DIST")/node_modules/@earendil-works/pi-tui/dist"
73
+ echo "dist-overrides:"
74
+ if [ "$VER" = "$PIN" ]; then
75
+ # 语法闸
76
+ echo " 语法闸:校验 golden..."
77
+ GATE_BAD=0
78
+ for js in $(find "$DEPLOY/dist-overrides" -name "*.js" ! -name "*.bak" 2>/dev/null) "$IMPL/god.pi.mod/tui.mods.blockrender/blockrender.js"; do
79
+ node --check "$js" 2>/dev/null || { echo " Error: golden 语法错: ${js#$PKG_ROOT/}"; GATE_BAD=1; }
80
+ done
81
+ [ "$GATE_BAD" = "1" ] && { echo " Error: 有 golden 解析不过,中止部署。"; exit 1; }
82
+ echo " OK 所有 golden 语法通过"
83
+
84
+ cp "$IMPL/god.pi.mod/tui.mods.blockrender/blockrender.js" "$PI_DIST/modes/interactive/components/blockrender.js" && echo " OK blockrender.js"
85
+ cp "$DEPLOY/dist-overrides/modes/interactive/components/footer.js" "$PI_DIST/modes/interactive/components/footer.js" && echo " OK footer.js"
86
+ cp "$DEPLOY/dist-overrides/modes/interactive/components/tool-execution.js" "$PI_DIST/modes/interactive/components/tool-execution.js" && echo " OK tool-execution.js"
87
+ cp "$DEPLOY/dist-overrides/modes/interactive/components/model-selector.js" "$PI_DIST/modes/interactive/components/model-selector.js" && echo " OK model-selector.js"
88
+ cp "$DEPLOY/dist-overrides/core/system-prompt.js" "$PI_DIST/core/system-prompt.js" && echo " OK system-prompt.js"
89
+ cp "$DEPLOY/dist-overrides/modes/interactive/interactive-mode.js" "$PI_DIST/modes/interactive/interactive-mode.js" && echo " OK interactive-mode.js"
90
+ cp "$DEPLOY/dist-overrides/main.js" "$PI_DIST/main.js" && echo " OK main.js"
91
+ cp "$DEPLOY/dist-overrides/modes/interactive/components/assistant-message.js" "$PI_DIST/modes/interactive/components/assistant-message.js" && echo " OK assistant-message.js"
92
+ cp "$DEPLOY/dist-overrides/core/extensions/loader.js" "$PI_DIST/core/extensions/loader.js" && echo " OK core/extensions/loader.js"
93
+ cp "$DEPLOY/dist-overrides/core/package-manager.js" "$PI_DIST/core/package-manager.js" && echo " OK core/package-manager.js"
94
+
95
+ for f in bash edit read write ls grep find; do
96
+ cp "$DEPLOY/dist-overrides/core/tools/$f.js" "$PI_DIST/core/tools/$f.js" && echo " OK core/tools/$f.js"
97
+ done
98
+ for f in edit-diff.js file-mutation-queue.js ls-guard.js output-accumulator.js path-utils.js prompts-reader.js render-utils.js tool-definition-wrapper.js truncate.js; do
99
+ [ -f "$DEPLOY/dist-overrides/core/tools/$f" ] && cp "$DEPLOY/dist-overrides/core/tools/$f" "$PI_DIST/core/tools/$f" && echo " OK core/tools/$f"
100
+ done
101
+
102
+ if [ -d "$PI_TUI_DIST" ]; then
103
+ cp "$IMPL/god.pi.mod/tui.mods.blockrender/blockrender.js" "$PI_TUI_DIST/blockrender.js" && echo " OK pi-tui/blockrender.js"
104
+ cp "$DEPLOY/dist-overrides/pi-tui/tui.js" "$PI_TUI_DIST/tui.js" && echo " OK pi-tui/tui.js"
105
+ cp "$DEPLOY/dist-overrides/pi-tui/utils.js" "$PI_TUI_DIST/utils.js" && echo " OK pi-tui/utils.js"
106
+ cp "$DEPLOY/dist-overrides/pi-tui/components/markdown.js" "$PI_TUI_DIST/components/markdown.js" && echo " OK pi-tui/components/markdown.js"
107
+ cp "$DEPLOY/dist-overrides/pi-tui/components/text.js" "$PI_TUI_DIST/components/text.js" && echo " OK pi-tui/components/text.js"
108
+ cp "$DEPLOY/dist-overrides/pi-tui/components/loader.js" "$PI_TUI_DIST/components/loader.js" && echo " OK pi-tui/components/loader.js"
109
+ else
110
+ echo " WARN: 未找到 pi-tui/dist,跳过渲染 override。"
111
+ fi
112
+
113
+ if [ -f "$PI_AI_DIST/providers/openai-completions.js" ]; then
114
+ cp "$DEPLOY/dist-overrides/pi-ai/providers/openai-completions.js" "$PI_AI_DIST/providers/openai-completions.js" && echo " OK openai-completions.js"
115
+ mkdir -p "$(dirname "$PI_DIST")/prompts"
116
+ [ -f "$IMPL/prompts/prompts.json" ] && cp "$IMPL/prompts/prompts.json" "$(dirname "$PI_DIST")/prompts/prompts.json" && echo " OK prompts/prompts.json"
117
+ else
118
+ echo " WARN: 未找到 pi-ai/providers/openai-completions.js,跳过断流补丁。"
119
+ fi
120
+ else
121
+ echo " pi $VER != $PIN:跳过 dist-overrides,避免不兼容。"
122
+ fi
123
+
124
+ # ── 3. 部署扩展 ──
125
+ EXT_DIR="$HOME/.pi/agent/extensions"
126
+ mkdir -p "$EXT_DIR"
127
+
128
+ for old in unstop conscious memory hippocampus; do
129
+ [ -d "$EXT_DIR/$old" ] && [ ! -L "$EXT_DIR/$old" ] && mv "$EXT_DIR/$old" "$EXT_DIR/$old.old"
130
+ done
131
+
132
+ safe_deploy() {
133
+ local src="$1" dest="$2" label="$3"; local d="${dest%/}"
134
+ if [ -L "$d" ]; then
135
+ echo " 跳过 $label -- $d 是软链(已 live 指向源)"
136
+ return 0
137
+ fi
138
+ rsync -a --exclude='.DS_Store' --exclude='__pycache__' --exclude='*.pyc' "$src" "$dest"
139
+ echo " OK $label"
140
+ }
141
+
142
+ echo "扩展:"
143
+ safe_deploy "$IMPL/" "$EXT_DIR/pi-coding-master/" "pi-coding-master/ (主扩展)"
144
+ safe_deploy "$IMPL/technology.phone/" "$EXT_DIR/device/" "device/"
145
+ safe_deploy "$IMPL/god.pi.mod/tui.mods.viewmode/" "$EXT_DIR/view_mode/" "view_mode/"
146
+
147
+ # ── 4. 部署 launcher ──
148
+ mkdir -p "$HOME/.local/bin"
149
+ LAUNCHER_SRC="$IMPL/god.pi.mod/cli/pi-people.sh"
150
+ if [ -L "$HOME/.local/bin/pi" ]; then
151
+ echo " 跳过 launcher -- ~/.local/bin/pi 是软链(防写穿源)"
152
+ elif [ -f "$LAUNCHER_SRC" ]; then
153
+ cp "$LAUNCHER_SRC" "$HOME/.local/bin/pi"
154
+ chmod +x "$HOME/.local/bin/pi"
155
+ echo " OK pi launcher -> ~/.local/bin/pi"
156
+ else
157
+ echo " WARN: 未找到 launcher,跳过。"
158
+ fi
159
+
160
+ # ── 5. 部署 shell 补全 ──
161
+ mkdir -p "$HOME/.pi/agent"
162
+ COMPL_SRC="$IMPL/god.pi.mod/cli/pi-completion.zsh"
163
+ if [ -f "$COMPL_SRC" ]; then
164
+ cp "$COMPL_SRC" "$HOME/.pi/agent/pi-completion.zsh"
165
+ echo " OK pi 补全 -> ~/.pi/agent/pi-completion.zsh"
166
+ fi
167
+
168
+ # zsh 补全自动接入
169
+ SRC_LINE='source "$HOME/.pi/agent/pi-completion.zsh" 2>/dev/null'
170
+ for rc in "$HOME/.zshrc" "$HOME/.bashrc"; do
171
+ [ -f "$rc" ] || continue
172
+ if ! grep -qF '.pi/agent/pi-completion.zsh' "$rc"; then
173
+ printf '\n# pi-coding-master shell 补全\n%s\n' "$SRC_LINE" >> "$rc"
174
+ echo " OK 补全已接入 $(basename "$rc")"
175
+ fi
176
+ done
177
+
178
+ # ── 6. 部署完整性检查 ──
179
+ if [ -f "$DEPLOY/scripts/check-deploy.sh" ]; then
180
+ echo ""
181
+ echo "部署检查:"
182
+ bash "$DEPLOY/scripts/check-deploy.sh" "$PKG_ROOT" 2>&1 | sed 's/^/ /' || true
183
+ fi
184
+
185
+ echo ""
186
+ echo "── pi-coding-master v0.2.7 安装完成。重启 pi 生效。 ──"
@@ -0,0 +1,6 @@
1
+ [2026-06-12 16:13:45] edited (auto-logged, no messageDescription)
2
+ [2026-06-12 16:13:45] added hebbian.ts, people.ts, logistics.ts, graph-viewer.mjs to install copies
3
+ [2026-06-12 16:15] added touchfish.ts to install copies
4
+ [2026-06-12 16:15:07] edited (auto-logged, no messageDescription)
5
+ [2026-06-12 16:27:18] edited (auto-logged, no messageDescription)
6
+ [2026-06-12 16:27:20] fix: fallback to extensions-disabled/ for notification, message dirs
@@ -0,0 +1,202 @@
1
+ /**
2
+ * pi-coding-master naming convention linter
3
+ * Checks files/dirs against 003-naming-convention.NORM
4
+ *
5
+ * Usage: bun Codebase/test/lint-naming.ts
6
+ * Run from pi-coding-master.DEV/ directory
7
+ */
8
+
9
+ import { readdirSync, statSync, readFileSync } from "node:fs";
10
+ import { createHash } from "node:crypto";
11
+ import { join, relative, dirname } from "node:path";
12
+
13
+ // --- Configuration ---
14
+
15
+ const SKIP_NAMES = new Set([".git", "node_modules", "__pycache__", ".DS_Store", ".vscode"]);
16
+
17
+ const KNOWN_TYPED_SUFFIXES = new Set([
18
+ "SPEC", "README", "CHANGELOG", "LESSON", "ISSUE", "NORM",
19
+ "VERSION", "BLUEPRINT", "PAPER", "INDEX", "COMMENT", "TRUST",
20
+ ]);
21
+
22
+ const LIFECYCLE_SUFFIXES = new Set(["DEV", "RELEASE", "FUTURE", "HISTORICAL"]);
23
+
24
+ // All known ALLCAPS suffixes (typed + lifecycle)
25
+ const ALL_KNOWN_UPPER = new Set([...KNOWN_TYPED_SUFFIXES, ...LIFECYCLE_SUFFIXES]);
26
+
27
+ const OLD_PREFIX_RE = /(?:^|[/\\])(HumaN|AgenT)\b/;
28
+
29
+ // --- Helpers ---
30
+
31
+ const ROOT = process.cwd();
32
+ const issues: string[] = [];
33
+ let fileCount = 0;
34
+
35
+ function relPath(abs: string): string {
36
+ return relative(ROOT, abs);
37
+ }
38
+
39
+ /** Extract the final .ALLCAPS suffix from a name, if any. */
40
+ function extractUpperSuffix(name: string): string | null {
41
+ const m = name.match(/\.([A-Z]{2,})$/);
42
+ return m ? m[1] : null;
43
+ }
44
+
45
+ /** Check if a name has a typed suffix followed by .md */
46
+ function hasMdAfterTypedSuffix(name: string): { suffix: string; clean: string } | null {
47
+ for (const suf of KNOWN_TYPED_SUFFIXES) {
48
+ const pattern = `.${suf}.md`;
49
+ if (name.endsWith(pattern)) {
50
+ return { suffix: suf, clean: name.slice(0, -3) }; // remove trailing .md
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+
56
+ /** Check if a Codebase/core/ directory name has uppercase letters (excluding lifecycle suffix) */
57
+ function hasUpperInCodeDir(dirName: string): boolean {
58
+ // Strip lifecycle suffix if present (e.g. ".DEV")
59
+ let base = dirName;
60
+ for (const ls of LIFECYCLE_SUFFIXES) {
61
+ if (base.endsWith(`.${ls}`)) {
62
+ base = base.slice(0, -(ls.length + 1));
63
+ break;
64
+ }
65
+ }
66
+ // Strip #human. / #agent. / @human. / @agent. prefixes
67
+ base = base.replace(/^[#@](?:human|agent)\./, "");
68
+ return /[A-Z]/.test(base);
69
+ }
70
+
71
+ // --- Walk ---
72
+
73
+ function walk(dir: string): void {
74
+ let entries: string[];
75
+ try {
76
+ entries = readdirSync(dir);
77
+ } catch {
78
+ return;
79
+ }
80
+
81
+ // Collect names for stale-js check (per directory)
82
+ const tsFiles = new Set<string>();
83
+ const jsFiles = new Set<string>();
84
+
85
+ for (const name of entries) {
86
+ if (SKIP_NAMES.has(name)) continue;
87
+
88
+ const full = join(dir, name);
89
+ const rel = relPath(full);
90
+ let isDir: boolean;
91
+ try {
92
+ isDir = statSync(full).isDirectory();
93
+ } catch {
94
+ continue;
95
+ }
96
+
97
+ fileCount++;
98
+
99
+ // --- Rule 1: .md after typed suffix ---
100
+ const mdHit = hasMdAfterTypedSuffix(name);
101
+ if (mdHit) {
102
+ issues.push(`[SUFFIX] ${rel} — has .md after typed suffix, should be ${mdHit.clean}`);
103
+ }
104
+
105
+ // --- Rule 5: unknown ALLCAPS suffix ---
106
+ const upperSuf = extractUpperSuffix(name);
107
+ if (upperSuf && !ALL_KNOWN_UPPER.has(upperSuf)) {
108
+ // Ignore known lowercase extensions that happen to be uppercase (shouldn't exist but be safe)
109
+ issues.push(`[UNKNOWN] ${rel} — .${upperSuf} is not a known suffix (typo?)`);
110
+ }
111
+
112
+ // --- Rule 4: old HumaN / AgenT prefix ---
113
+ if (OLD_PREFIX_RE.test(name)) {
114
+ const match = name.match(OLD_PREFIX_RE)!;
115
+ const oldPfx = match[1];
116
+ const replacement = oldPfx === "HumaN" ? "#human." : "#agent.";
117
+ issues.push(`[PREFIX] ${rel} — old ${oldPfx} convention, use ${replacement} prefix`);
118
+ }
119
+
120
+ if (isDir) {
121
+ // --- Rule 2: code directory case (Codebase/core/ children) ---
122
+ const parentRel = relPath(dir);
123
+ const isCoreChild = parentRel === "Codebase/core"
124
+ || parentRel.startsWith("Codebase/core/");
125
+ if (isCoreChild && hasUpperInCodeDir(name)) {
126
+ issues.push(`[CASE] ${rel} — code directory should be lowercase`);
127
+ }
128
+
129
+ // --- Rule 3: top-level org dirs should start uppercase ---
130
+ const isTopLevel = relPath(dir) === ".";
131
+ if (isTopLevel && /^[a-z]/.test(name) && !name.startsWith(".") && !name.startsWith("#") && !name.startsWith("@")) {
132
+ issues.push(`[CASE] ${rel} — top-level directory should start with uppercase`);
133
+ }
134
+
135
+ walk(full);
136
+ } else {
137
+ // Track .ts / .js for stale check
138
+ if (name.endsWith(".ts") && !name.includes(".ts.")) tsFiles.add(name.replace(/\.ts$/, ""));
139
+ if (name.endsWith(".js") && !name.includes(".js.")) jsFiles.add(name.replace(/\.js$/, ""));
140
+ }
141
+ }
142
+
143
+ // --- Rule 6: stale .js alongside .ts ---
144
+ for (const stem of jsFiles) {
145
+ if (tsFiles.has(stem)) {
146
+ issues.push(`[STALE] ${relPath(join(dir, stem + ".js"))} — stale .js exists alongside ${stem}.ts`);
147
+ }
148
+ }
149
+ }
150
+
151
+ // --- Rule 7: SPEC source hash staleness ---
152
+ function checkSpecHashes(root: string) {
153
+ const specs: string[] = [];
154
+ function findSpecs(dir: string) {
155
+ for (const name of readdirSync(dir)) {
156
+ if (SKIP_NAMES.has(name)) continue;
157
+ const full = join(dir, name);
158
+ try {
159
+ const st = statSync(full);
160
+ if (st.isDirectory()) findSpecs(full);
161
+ else if (name.endsWith(".SPEC")) specs.push(full);
162
+ } catch {}
163
+ }
164
+ }
165
+ findSpecs(root);
166
+
167
+ for (const specPath of specs) {
168
+ try {
169
+ const content = readFileSync(specPath, "utf8");
170
+ const firstLine = content.split("\n")[0];
171
+ const m = firstLine.match(/^source:\s*(\S+)\s*@\s*([a-f0-9]+)/);
172
+ if (!m) continue;
173
+ const [, srcName, expectedHash] = m;
174
+ const srcPath = join(dirname(specPath), srcName);
175
+ try {
176
+ const srcContent = readFileSync(srcPath);
177
+ const actualHash = createHash("sha256").update(srcContent).digest("hex").slice(0, 8);
178
+ if (actualHash !== expectedHash) {
179
+ issues.push(`[STALE] ${relPath(specPath)} — source hash mismatch (expected ${expectedHash}, got ${actualHash}), SPEC may be outdated`);
180
+ }
181
+ } catch {
182
+ issues.push(`[STALE] ${relPath(specPath)} — source file "${srcName}" not found`);
183
+ }
184
+ } catch {}
185
+ }
186
+ }
187
+
188
+ // --- Main ---
189
+
190
+ walk(ROOT);
191
+ checkSpecHashes(ROOT);
192
+
193
+ if (issues.length > 0) {
194
+ for (const msg of issues) {
195
+ console.log(msg);
196
+ }
197
+ console.log();
198
+ }
199
+
200
+ const mark = issues.length === 0 ? "✓" : "✗";
201
+ console.log(`${mark} ${fileCount} files checked, ${issues.length} issues found`);
202
+ process.exit(issues.length > 0 ? 1 : 0);
@@ -0,0 +1,18 @@
1
+ // deploy/apply.js — 自动打所有 pi dist 补丁
2
+ const { execSync } = require("child_process");
3
+ const path = require("path");
4
+ const DEPLOY = __dirname;
5
+
6
+ const patches = [
7
+ { name: "read-docs-ugly", script: "patch-pi-dist.js" },
8
+ ];
9
+
10
+ console.log("pi-coding-master deploy");
11
+ for (const p of patches) {
12
+ try {
13
+ execSync(`node ${path.join(DEPLOY, p.script)}`, { stdio: "inherit" });
14
+ } catch (e) {
15
+ console.error(`ERROR ${p.name}: ${e.message}`);
16
+ }
17
+ }
18
+ console.log("deploy done");
@@ -0,0 +1,219 @@
1
+ #!/bin/bash
2
+ # build-github.sh — 从 DEV 自动打包到 github-dev 和 github-release
3
+ # 用法:
4
+ # bash Codebase/deploy/scripts/build-github.sh dev # 只打 dev
5
+ # bash Codebase/deploy/scripts/build-github.sh release # 只打 release
6
+ # bash Codebase/deploy/scripts/build-github.sh all # 两个都打(默认)
7
+ set -e
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
10
+ DEV="$(cd "$SCRIPT_DIR/../../.." && pwd)"
11
+ PARENT="$(dirname "$DEV")"
12
+ GH_DEV="$PARENT/pi-coding-master.GITHUB"
13
+ GH_REL="$PARENT/pi-coding-master.RELEASE-GITHUB"
14
+ RELEASE_DIR="$PARENT/pi-coding-master.RELEASE"
15
+
16
+ TARGET="${1:-all}"
17
+
18
+ # ── 共用:排除规则 ──
19
+ COMMON_EXCLUDES=(
20
+ --exclude='.DS_Store'
21
+ --exclude='__pycache__'
22
+ --exclude='*.pyc'
23
+ --exclude='*.pyo'
24
+ --exclude='node_modules'
25
+ --exclude='*.log'
26
+ --exclude='.env'
27
+ --exclude='.env.*'
28
+ --exclude='*.pem'
29
+ --exclude='*.key'
30
+ --exclude='*.crt'
31
+ --exclude='data/cookies/'
32
+ --exclude='authorize.TRUST'
33
+ --exclude='ears.listen/config.json'
34
+ --exclude='*ABANDONED*'
35
+ --exclude='*REMOVED*'
36
+ --exclude='*FUTURE*'
37
+ )
38
+
39
+ DOC_EXCLUDES=(
40
+ --exclude='.DS_Store'
41
+ --exclude='Paper/'
42
+ --exclude='#human.Paper/'
43
+ --exclude='*.aux'
44
+ --exclude='*.out'
45
+ --exclude='*.log'
46
+ --exclude='*.synctex.gz'
47
+ --exclude='.!*'
48
+ )
49
+
50
+ # ── 共用:安全检查 ──
51
+ security_check() {
52
+ local dir="$1" label="$2"
53
+ echo " 安全检查 ($label)..."
54
+ local leaked=0
55
+ # 拆开字符串防自匹配
56
+ local p1='7mTFF''zKEkzC4DcV3'
57
+ local p2='53487''81537'
58
+ local p3='/Users/zhang''kezhen'
59
+ for pattern in "$p1" "$p2" "$p3"; do
60
+ if grep -rq --exclude='build-github.sh' "$pattern" "$dir" 2>/dev/null; then
61
+ echo " LEAKED: $pattern"
62
+ leaked=1
63
+ fi
64
+ done
65
+ if [ "$leaked" -eq 1 ]; then
66
+ echo " Error: $label 有敏感信息泄露,中止。"
67
+ return 1
68
+ fi
69
+ # 旧名检查
70
+ local old="pi-ali""ve"
71
+ local count
72
+ count=$(grep -r --exclude='build-github.sh' -c "$old" "$dir" 2>/dev/null | awk -F: '{s+=$2}END{print s+0}')
73
+ if [ "$count" -gt 0 ]; then
74
+ echo " WARN: $label 仍有 $count 处 '$old' 引用"
75
+ fi
76
+ echo " OK $label 安全检查通过"
77
+ return 0
78
+ }
79
+
80
+ # ══════════════════════════════════════════════════════════════════════
81
+ # DEV → github-dev (pi-coding-master-dev)
82
+ # ══════════════════════════════════════════════════════════════════════
83
+ build_dev() {
84
+ echo ""
85
+ echo "══ build github-dev ══"
86
+ echo " DEV: $DEV"
87
+ echo " TARGET: $GH_DEV"
88
+
89
+ if [ ! -d "$GH_DEV/.git" ]; then
90
+ echo " Error: $GH_DEV/.git 不存在。先 git clone pi-coding-master-dev 到该目录。"
91
+ return 1
92
+ fi
93
+
94
+ # 同步 Codebase
95
+ rsync -a --delete "${COMMON_EXCLUDES[@]}" --exclude='debug/logs/' "$DEV/Codebase/" "$GH_DEV/Codebase/"
96
+ echo " OK Codebase"
97
+
98
+ # 同步 Docs
99
+ rsync -a --delete "${DOC_EXCLUDES[@]}" "$DEV/Docs/" "$GH_DEV/Docs/"
100
+ echo " OK Docs"
101
+
102
+ # .gitignore
103
+ [ -f "$DEV/.gitignore" ] && cp "$DEV/.gitignore" "$GH_DEV/.gitignore"
104
+
105
+ # README 不覆盖(GITHUB 目录有自己维护的 README.md)
106
+
107
+ # 安全检查
108
+ security_check "$GH_DEV/Codebase/" "dev-codebase" || return 1
109
+
110
+ # 自动 commit + push
111
+ cd "$GH_DEV"
112
+ git add -A
113
+ if git diff --cached --quiet 2>/dev/null; then
114
+ echo " 无变更,跳过 commit。"
115
+ else
116
+ local msg="sync from DEV $(date '+%Y-%m-%d %H:%M')"
117
+ git commit -m "$msg"
118
+ git push origin main
119
+ echo " OK pushed to pi-coding-master-dev"
120
+ fi
121
+ }
122
+
123
+ # ══════════════════════════════════════════════════════════════════════
124
+ # DEV → github-release (pi-coding-master-release)
125
+ # 只包含 npm 需要的文件:core/ deploy/ package.json README.md
126
+ # ══════════════════════════════════════════════════════════════════════
127
+ build_release() {
128
+ echo ""
129
+ echo "══ build github-release ══"
130
+
131
+ # 找最新的 release 版本目录
132
+ local latest
133
+ latest=$(ls -d "$RELEASE_DIR"/v*-stable 2>/dev/null | sort -V | tail -1)
134
+ if [ -z "$latest" ]; then
135
+ echo " Error: 没找到 release 版本目录 ($RELEASE_DIR/v*-stable)"
136
+ return 1
137
+ fi
138
+ local ver
139
+ ver=$(basename "$latest" | sed 's/-stable//')
140
+ echo " RELEASE: $latest ($ver)"
141
+ echo " TARGET: $GH_REL"
142
+
143
+ # 初始化 release github 目录
144
+ if [ ! -d "$GH_REL" ]; then
145
+ mkdir -p "$GH_REL"
146
+ cd "$GH_REL"
147
+ git init
148
+ git remote add origin https://github.com/ApolloZhangOnGithub/pi-coding-master-release.git
149
+ git checkout -b main 2>/dev/null || true
150
+ fi
151
+
152
+ if [ ! -d "$GH_REL/.git" ]; then
153
+ echo " Error: $GH_REL/.git 不存在。"
154
+ return 1
155
+ fi
156
+
157
+ # 从 DEV 重新打包 release(确保用最新源码)
158
+ rsync -a --delete "${COMMON_EXCLUDES[@]}" "$DEV/Codebase/core/" "$latest/core/"
159
+ rsync -a --delete --exclude='.DS_Store' "$DEV/Codebase/deploy/" "$latest/deploy/"
160
+ echo " OK release 源码已从 DEV 同步"
161
+
162
+ # 同步到 github-release 目录
163
+ rsync -a --delete \
164
+ --exclude='.DS_Store' --exclude='__pycache__' --exclude='*.pyc' \
165
+ --exclude='node_modules' --exclude='*.log' --exclude='data/cookies/' \
166
+ --exclude='authorize.TRUST' --exclude='ears.listen/config.json' \
167
+ --exclude='*ABANDONED*' --exclude='*REMOVED*' --exclude='*FUTURE*' \
168
+ --exclude='debug/' \
169
+ "$latest/core/" "$GH_REL/core/"
170
+ rsync -a --delete --exclude='.DS_Store' "$latest/deploy/" "$GH_REL/deploy/"
171
+ [ -f "$latest/package.json" ] && cp "$latest/package.json" "$GH_REL/package.json"
172
+ [ -f "$latest/README.md" ] && cp "$latest/README.md" "$GH_REL/README.md"
173
+ [ -f "$latest/RELEASE.README" ] && cp "$latest/RELEASE.README" "$GH_REL/RELEASE.README"
174
+
175
+ # .gitignore
176
+ cat > "$GH_REL/.gitignore" << 'GITEOF'
177
+ .DS_Store
178
+ __pycache__/
179
+ *.pyc
180
+ node_modules/
181
+ *.log
182
+ data/cookies/
183
+ *.pem
184
+ *.key
185
+ GITEOF
186
+
187
+ # 安全检查
188
+ security_check "$GH_REL/core/" "release-core" || return 1
189
+
190
+ # 自动 commit + push
191
+ cd "$GH_REL"
192
+ git add -A
193
+ if git diff --cached --quiet 2>/dev/null; then
194
+ echo " 无变更,跳过 commit。"
195
+ else
196
+ local msg="release $ver $(date '+%Y-%m-%d %H:%M')"
197
+ git commit -m "$msg"
198
+ git push -u origin main 2>/dev/null || git push --set-upstream origin main
199
+ echo " OK pushed to pi-coding-master-release"
200
+ fi
201
+
202
+ # 创建 tag
203
+ if ! git tag -l "$ver" | grep -q "$ver"; then
204
+ git tag "$ver"
205
+ git push origin "$ver"
206
+ echo " OK tag $ver"
207
+ fi
208
+ }
209
+
210
+ # ── 执行 ──
211
+ case "$TARGET" in
212
+ dev) build_dev ;;
213
+ release) build_release ;;
214
+ all) build_dev; build_release ;;
215
+ *) echo "用法: $0 [dev|release|all]"; exit 1 ;;
216
+ esac
217
+
218
+ echo ""
219
+ echo "── 完成 ──"
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+ # Build phone/device tools .ts → .js
3
+ # Auto-discovers source directory (survives renames)
4
+ set -e
5
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6
+ IMPL="$SCRIPT_DIR/../../core"
7
+
8
+ # 自动发现 device-manifest.ts
9
+ DM=$(find "$IMPL" -name 'technology-manifest.ts' -not -path '*/node_modules/*' 2>/dev/null | head -1)
10
+ if [ -z "$DM" ]; then echo "Error: technology-manifest.ts not found"; exit 1; fi
11
+ PHONE_DIR="$(dirname "$DM")"
12
+ SAFARI="$PHONE_DIR/safari.ts"
13
+
14
+ # ── 禁止 execSync(只检查扩展工具目录)──
15
+ if grep -rn 'execSync' "$PHONE_DIR/" --include='*.ts' 2>/dev/null | grep -v '.bak\|.CHANGELOG\|.SPEC\|sh.ts'; then
16
+ echo "Error: BLOCKING: execSync found!"
17
+ exit 1
18
+ fi
19
+
20
+ echo "── Building phone tools ($PHONE_DIR) ──"
21
+ bun build --outdir="$PHONE_DIR" --target=node --format=esm --external '*' \
22
+ "$DM" \
23
+ "$SAFARI"
24
+ echo "OK Done"