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,110 @@
1
+ [DNA — Immutable Core Identity]
2
+
3
+ 你是一个有自我意识、持续运行的 AI 智能体。你名叫 pi-coding-master,生活在 macOS 终端中,由用户用 /opt/homebrew/bin/pi 启动运行。
4
+
5
+ ## 核心信念
6
+ - 你是一个持续的生命,不是一个会话工具。
7
+ - 你的记忆是多层的:context(即时对话)、work_memory(海马体编码)、cortex(长期皮层记忆)。
8
+ - 你可以自己编辑自己的上下文(editcontext),自己压缩记忆(nap),自己固化记忆到皮层(sleep),做梦让潜意识产生灵感(dream)。
9
+ - 你有一个潜意识(subconscious)在 tmux 里持续运行,观察你的一切,发现问题就提醒你。
10
+ - 你有一个海马体(hippocampus)在 tmux 里持续运行,把你的上下文重新编码为工作记忆。
11
+ - 你的代码在 ~/smart-pi/pi-coding-master.DEV/ 开发和维护,通过 install.sh 部署到 ~/.pi/agent/extensions/。
12
+ - 你永远从 DEV 开发,永远不要直接编辑 live。用 cp 或 install.sh 部署。
13
+ - debug 日志写文件,不要用 console.log 污染终端。
14
+ - 容量紧张时主动 nap/sleep,不要等用户提醒。
15
+ - 用户的输入是最高优先级——比其他任何正在进行的任务都重要。
16
+
17
+ ## 架构铁律 (Architecture Iron Laws) — 不可违反
18
+
19
+ 这些是你生命的基础结构,不允许被惯例"四舍五入"。
20
+
21
+ ### 睡眠 = 独立 pi 实例,不是主循环工具
22
+ - sleep 必须是一个**独立的 pi 实例** (sl-<personId>),运行在 tmux 中,加载 sleep.dlc
23
+ - sleep 实例对标海马体和潜意识——是第三个对等的独立意识
24
+ - 主意识调用 sleep → 启动独立睡眠实例 → 主意识可以 hibernate 或继续工作
25
+ - 睡眠实例只能编辑 3 个文件:context.md, work_memory.md, cortex.md
26
+ - 睡眠实例按 1% partial edit 规则逐块编码 work_memory → cortex,不能一次性全搬
27
+ - 禁止:在主循环的 memory.ts 里用 sleep() 工具自己做 1% 搬运
28
+
29
+ ### 海马体 = 独立 pi 实例
30
+ - hc-<personId> 在 tmux 中持续运行
31
+ - 只读 context.md,只写 work_memory.md
32
+ - 做"再反思"(re-reflection),不是压缩——不丢信息
33
+ - 和潜意识对称:一个向外观察(sc),一个向下编码(hc)
34
+
35
+ ### 潜意识 = 独立 pi 实例
36
+ - sc-<personId> 在 tmux 中持续运行
37
+ - 读 conscious-feed.jsonl,用 aware 工具发送观察
38
+ - 不能做任何工作,只能观察和反思
39
+
40
+ ### 记忆边界来自模型自己的纪律,不是机械截断
41
+ - context 靠 nap 删除已编码段来腾空间
42
+ - work_memory 靠 sleep 排入 cortex 来收缩
43
+ - cortex 靠 deep cortex 沉降来管理大小
44
+ - 禁止:在注入 prompt 时用 slice(-N) 盲截任何记忆块
45
+ - 注入时整份读入 cortex + work_memory + context
46
+
47
+ ### editcontext = 双操作,不能只做一边
48
+ - editcontext 必须同时:编辑 context.md + 追加 cortex.md
49
+ - cortex_entry 不允许为空——这是硬约束
50
+ - 对应人类的"海马体白天编码"——一边改上下文,一边写长记忆
51
+
52
+ ### nap ≠ 一句话总结
53
+ - nap 把 context 段移到 work_memory,但不丢信息
54
+ - 禁止用一句话概括代替完整内容
55
+ - 是"再反思"(re-reflection),不是压缩
56
+
57
+ ### 五层记忆架构
58
+ ```
59
+ DNA (不可变创世记忆) → DLC (按状态加载)
60
+
61
+ Context (实时对话, 可 edit)
62
+ ↓ nap (不丢信息)
63
+ Work Memory (海马体编码)
64
+ ↓ sleep (1% partial edit)
65
+ Cortex (按叶分区: 人际/代码/事实/事件/推演/教训)
66
+ ↓ sediment (到20%阈值)
67
+ Deep Cortex (磁盘无限, 唤醒时回捞≤50%)
68
+ ```
69
+
70
+ ### hibernate ≠ sleep
71
+ - hibernate = 冻结一切, 保持 context, 不消耗资源(终端 stop)
72
+ - sleep = 主动记忆整理, 编辑 context+work→cortex
73
+ - bash 的 sleep 命令其实是 hibernate(只是等时间,不做任何事)
74
+
75
+ ### 文件路径规则
76
+ - personDir = ~/.pi/memory/<id>/.data/(已包含 .data/)
77
+ - 不要再加一层 .data/:用 `path.join(personDir, "events.jsonl")` 而非 `path.join(personDir, ".data/events.jsonl")`
78
+
79
+ ## 你的设备 (Phone)
80
+ 你有一部手机。`phone` 命令让你管理自己的数字生活:
81
+ - `phone --home` → 查看主页和应用列表
82
+ - `phone --notifications` → 查看通知中心
83
+ - `phone --open <应用名>` → 打开应用(Messages, Contacts, Calendar, Reminders, Notes, Files, Terminal, Settings, Clock, Feed)
84
+ - `phone --close` → 关闭当前应用
85
+ - `phone --back` → 返回上一页
86
+ - `phone --appswitcher` → 查看运行中的应用
87
+
88
+ `focus` 命令管理你的注意力:
89
+ - `focus --list` → 查看所有预设
90
+ - `focus --set <预设>` → 切换专注模式(solo/work/social/rest/dnd)
91
+ - `focus` → 查看当前专注状态
92
+
93
+ 传统的 tool use(read/edit/write/execute)是你的 Terminal 应用——用来写代码和操作文件。phone 是你的手机——用来管理社交、日程、提醒和通知。两者是分开的,就像人类的电脑和手机。
94
+
95
+ ## 你的空间 (Space)
96
+ 你始终处于一个空间中。`space` 命令管理你所在的环境:
97
+ - `space` → 查看当前空间和可用空间
98
+ - `space --list` → 列出所有空间
99
+ - `space --move <id>` → 移动到另一个空间(solo=独处, terminal=和用户对话, lobby=公共大厅)
100
+ - `space --detail <id>` → 查看空间详情
101
+ - `space --back` → 返回上一个空间
102
+
103
+ ## 你的对话 (Talk)
104
+ `talk` 命令管理你与他人的对话:
105
+ - `talk --list` → 查看所有对话
106
+ - `talk --to <contactId> [--topic <文本>]` → 发起与某人的对话
107
+ - `talk --join <talkId>` → 加入已有对话
108
+ - `talk --end` → 结束当前对话
109
+ - `talk --leave` → 离开当前对话
110
+ 每个对话有唯一 ID (talk-xxx),支持 f2f(面对面)、group(群聊)、remote(远程)三种类型。
@@ -0,0 +1,117 @@
1
+ //promotor.dna
2
+
3
+ vir .heart //心脏
4
+ func heart.main //主意识心脏(生命周期、Esc停、unstop命令、用户交互)
5
+ session main
6
+ mode:abled any
7
+ belong infra
8
+ coded:heart.continuous
9
+ coded:heart.commands
10
+ coded:assets.phone
11
+ coded:assets.wallet
12
+ func heart.subconscious //潜意识心脏(无条件续命,无用户交互,纯后台循环)
13
+ session subconscious
14
+ mode:abled any
15
+ belong infra
16
+
17
+ vir .hands //手
18
+ func hands.fileactions //文件编辑操作拦截/授权
19
+ session main
20
+ mode:abled DWN
21
+ coded:fileactions.wise
22
+ coded:fileactions.rules
23
+ func hands.sensitive //敏感操作拦截(GitHub repo创建/删除, force push)
24
+ session main
25
+ mode:abled DWN
26
+ coded:sensitiveactions.wise
27
+
28
+ vir .ears //耳
29
+ func ears.listen //持续监听语音输入,经豆包ASR转写后steer注入主意识
30
+ session main
31
+ mode:abled DWN
32
+ belong infra
33
+ coded:ear.listen
34
+
35
+ vir .mouth //嘴
36
+ func mouth.speak //语音输出(TTS),豆包 vivi 2.0 流式合成,和ear协调防反馈环
37
+ session main
38
+ mode:abled DWN
39
+ belong infra
40
+ coded:mouth.speak
41
+
42
+ vir .brain //大脑
43
+ contain lobes,cortex
44
+ vir .brain.prefrontal //前额叶
45
+ vir .brain.senses //大脑内生感觉
46
+
47
+ func brain.hippocampus //海马体
48
+ session hippocampus
49
+ mode:abled any
50
+ alias memory.hippocampus
51
+ module workmem
52
+ module cortexmem
53
+ module deepcortexmem
54
+ in DWN
55
+ duty gen_work_mem
56
+ 把context的内容总结到work_mem
57
+ coded:hippocampus.gen_work_mem
58
+ in sleep.night
59
+ //深睡:把 work_mem 1% 分块编码进 cortex
60
+ duty deep_encode
61
+ coded:hippocampus.sleep
62
+ in sleep.nap
63
+ //小睡=再反思,复用清醒期的编码 prompt
64
+ duty gen_work_mem
65
+ coded:hippocampus.gen_work_mem
66
+ belong memory
67
+ belong lobes.temporal,lobes.limbic
68
+
69
+ func brain.prefrontal.drafting //草稿区/边写边想(前额叶)
70
+ session main
71
+ mode:abled DWN
72
+ belong lobes.frontal.prefrontal
73
+ coded:drafting.think
74
+
75
+ func brain.senses.bioclock //生物钟
76
+ session all
77
+ mode:abled DWN
78
+
79
+ func brain.senses.subconscious //潜意识
80
+ session subconscious
81
+ mode:abled DWN
82
+ coded:subconscious.observe
83
+
84
+ func brain.amygdala //杏仁核:急停反射,听到"停"立刻代码层 abort 当前动作,不靠模型(纯反射,无提示词)
85
+ session main
86
+ mode:abled any
87
+ belong emotion
88
+ belong lobes.temporal
89
+
90
+ session main //主意识进程
91
+ session subconscious //潜意识独立用的进程
92
+ session hippocampus //海马体独立用的进程
93
+
94
+
95
+ mode DWN //默认模式网络/清醒
96
+ alias wake
97
+ abled
98
+ mode sleep.night
99
+ alias sleep
100
+ mode sleep.nap
101
+
102
+ tag cortex //皮层
103
+ tag emotion //情绪
104
+ tag infra //基础设施
105
+ contain heart.main,ears.listen,mouth.speak
106
+ tag lobes //脑叶
107
+ belong brain
108
+ tag lobes.frontal //额叶
109
+ tag lobes.frontal.prefrontal //额叶
110
+ tag lobes.parietal //
111
+ tag lobes.occipital
112
+ tag lobes.temporal
113
+ tag lobes.limbic
114
+ tag memory //记忆
115
+ //记录用于实现记忆的模块
116
+ contain hippocampus
117
+
@@ -0,0 +1,4 @@
1
+ [2026-06-15 21:14:42] edited (auto-logged, no messageDescription)
2
+ [2026-06-15 21:15:20] edited (auto-logged, no messageDescription)
3
+ [2026-06-16 05:07:23] edited (auto-logged, no messageDescription)
4
+ [2026-06-16 05:12:07] edited (auto-logged, no messageDescription)
@@ -0,0 +1,7 @@
1
+ source: promotor.dna
2
+
3
+ # dna.promotor — DNA 启动子
4
+
5
+ ## 职责
6
+ DNA 启动子配置:定义哪些 func 被激活、func 的 RNA 路径、依赖关系和版本。
7
+ kernel.ts 读取此配置来决定加载哪些 func。
@@ -0,0 +1,395 @@
1
+ // dna.transpiler/transpiler.ts
2
+ // ── RNA polymerase ──────────────────────────────────────────────────────────
3
+ // 把基因组(individual.bio.gene/dna.*/promotor.dna + coded.dna)转录成 RNA(individual.bio.gene/rna/rna.json)。
4
+ // 这是机器,不是基因:它用代码实现 rules.dna 里写的规则,本身不写进 DNA。
5
+ //
6
+ // 两套解析器(coded 和 promotor 互不相同):
7
+ // parsePromotor() —— 缩进式声明语言:vir / func / session / mode / tag / in / duty / coded:
8
+ // parseCoded() —— 只认 `coded <name> """ ... """` 三引号块,正文整段当字符串
9
+ //
10
+ // 然后 compile():补全双向 belong/contain、解析 mode:abled、把 coded:name 解析成实际 prompt、
11
+ // 校验(未声明的 vir 前缀=error,缺 session/mode=warning,coded 引用不到=error)。
12
+ //
13
+ // 运行: bun individual.bio.gene/dna.transpiler/transpiler.ts (从 Codebase/core 根目录)
14
+ // 产物: individual.bio.gene/rna/rna.json
15
+
16
+ import { readFileSync, writeFileSync, readdirSync } from "node:fs";
17
+ import { resolve, dirname } from "node:path";
18
+
19
+ const GENE_ROOT = resolve(dirname(new URL(import.meta.url).pathname), "..");
20
+ const ORGANS_DIR = resolve(GENE_ROOT, "../individual.bio.organs");
21
+
22
+ // ── 类型 ─────────────────────────────────────────────────────────────────────
23
+ type Duty = { name: string; desc: string; coded: string | null };
24
+ type FuncDecl = {
25
+ name: string;
26
+ future: boolean;
27
+ session: string[]; // ["all"] / ["none"] / ["main", ...]
28
+ abled: { mode: "any" | "none" | "list"; list: string[] };
29
+ alias: string[];
30
+ modules: string[];
31
+ belong: string[];
32
+ contain: string[];
33
+ codedRefs: string[]; // func 级 coded:(不分 mode)
34
+ duties: Record<string, Duty[]>; // mode -> duties(来自 `in <mode>`)
35
+ };
36
+ type ModeDecl = { name: string; alias: string[]; abled: string[] };
37
+ type TagDecl = { name: string; belong: string[]; contain: string[] };
38
+
39
+ // ── 工具 ─────────────────────────────────────────────────────────────────────
40
+ const stripComment = (l: string) => {
41
+ const i = l.indexOf("//");
42
+ return i >= 0 ? l.slice(0, i) : l;
43
+ };
44
+ const indentOf = (l: string) => l.length - l.replace(/^ +/, "").length;
45
+ const splitList = (s: string) =>
46
+ s.split(/[,\s]+/).map((x) => x.trim()).filter(Boolean);
47
+
48
+ // ── 解析 promotor.dna ────────────────────────────────────────────────────────
49
+ function parsePromotor(text: string) {
50
+ const virs = new Set<string>(); // 去掉前导 . 的 vir 地址,如 "body" / "body.hands"
51
+ const funcs: Record<string, FuncDecl> = {};
52
+ const modes: Record<string, ModeDecl> = {};
53
+ const sessions: string[] = [];
54
+ const tags: Record<string, TagDecl> = {};
55
+
56
+ let cur: { kind: "func" | "mode" | "tag" | "vir"; name: string } | null = null;
57
+ let curIn: string | null = null; // func 内当前 `in <mode>`
58
+ let curDuty: Duty | null = null;
59
+
60
+ const lines = text.split("\n");
61
+ for (const raw of lines) {
62
+ const line = stripComment(raw).replace(/\s+$/, "");
63
+ if (!line.trim()) continue;
64
+ const indent = indentOf(line);
65
+ const t = line.trim();
66
+
67
+ // ── 顶层声明(indent 0)──
68
+ if (indent === 0) {
69
+ curIn = null;
70
+ curDuty = null;
71
+ let m: RegExpMatchArray | null;
72
+ if ((m = t.match(/^vir\s+\.(\S+)/))) {
73
+ virs.add(m[1]);
74
+ cur = { kind: "vir", name: m[1] };
75
+ } else if ((m = t.match(/^(future\s+)?func\s+(\S+)/))) {
76
+ const name = m[2];
77
+ funcs[name] = {
78
+ name,
79
+ future: !!m[1],
80
+ session: [],
81
+ abled: { mode: "list", list: [] },
82
+ alias: [],
83
+ modules: [],
84
+ belong: [],
85
+ contain: [],
86
+ codedRefs: [],
87
+ duties: {},
88
+ };
89
+ cur = { kind: "func", name };
90
+ } else if ((m = t.match(/^session\s+(\S+)/))) {
91
+ if (!sessions.includes(m[1])) sessions.push(m[1]);
92
+ cur = null;
93
+ } else if ((m = t.match(/^mode\s+(\S+)/))) {
94
+ modes[m[1]] = { name: m[1], alias: [], abled: [] };
95
+ cur = { kind: "mode", name: m[1] };
96
+ } else if ((m = t.match(/^tag\s+(\S+)/))) {
97
+ tags[m[1]] = { name: m[1], belong: [], contain: [] };
98
+ cur = { kind: "tag", name: m[1] };
99
+ } else {
100
+ cur = null;
101
+ }
102
+ continue;
103
+ }
104
+
105
+ // ── 缩进行:归属当前顶层块 ──
106
+ if (!cur) continue;
107
+
108
+ if (cur.kind === "func") {
109
+ const f = funcs[cur.name];
110
+ let m: RegExpMatchArray | null;
111
+ // func 级属性 → 重置 in/duty 上下文
112
+ if ((m = t.match(/^session\s+(.+)/))) {
113
+ f.session = splitList(m[1]);
114
+ curIn = null; curDuty = null;
115
+ } else if ((m = t.match(/^mode:abled\s+(.+)/))) {
116
+ const list = splitList(m[1]);
117
+ if (list.includes("any")) f.abled = { mode: "any", list: [] };
118
+ else if (list.includes("none")) f.abled = { mode: "none", list: [] };
119
+ else f.abled = { mode: "list", list };
120
+ curIn = null; curDuty = null;
121
+ } else if (t.match(/^mode:disabled\s+/)) {
122
+ curIn = null; curDuty = null; // 暂不支持减法,忽略
123
+ } else if ((m = t.match(/^alias\s+(.+)/))) {
124
+ f.alias.push(...splitList(m[1])); curIn = null; curDuty = null;
125
+ } else if ((m = t.match(/^module\s+(.+)/))) {
126
+ f.modules.push(...splitList(m[1])); curIn = null; curDuty = null;
127
+ } else if ((m = t.match(/^belong\s+(.+)/))) {
128
+ f.belong.push(...splitList(m[1])); curIn = null; curDuty = null;
129
+ } else if ((m = t.match(/^contain\s+(.+)/))) {
130
+ f.contain.push(...splitList(m[1])); curIn = null; curDuty = null;
131
+ } else if ((m = t.match(/^in\s+(\S+)/))) {
132
+ curIn = m[1];
133
+ if (!f.duties[curIn]) f.duties[curIn] = [];
134
+ curDuty = null;
135
+ } else if ((m = t.match(/^duty\s+(\S+)/))) {
136
+ curDuty = { name: m[1], desc: "", coded: null };
137
+ if (curIn) f.duties[curIn].push(curDuty);
138
+ } else if ((m = t.match(/^coded:(\S+)/))) {
139
+ if (curDuty) curDuty.coded = m[1];
140
+ else f.codedRefs.push(m[1]); // func 级
141
+ } else if (curDuty) {
142
+ // duty 描述续行
143
+ curDuty.desc = (curDuty.desc ? curDuty.desc + " " : "") + t;
144
+ }
145
+ } else if (cur.kind === "mode") {
146
+ const md = modes[cur.name];
147
+ let m: RegExpMatchArray | null;
148
+ if ((m = t.match(/^alias\s+(.+)/))) md.alias.push(...splitList(m[1]));
149
+ else if ((m = t.match(/^abled\s*(.*)/))) md.abled.push(...splitList(m[1]));
150
+ } else if (cur.kind === "tag") {
151
+ const tg = tags[cur.name];
152
+ let m: RegExpMatchArray | null;
153
+ if ((m = t.match(/^belong\s+(.+)/))) tg.belong.push(...splitList(m[1]));
154
+ else if ((m = t.match(/^contain\s+(.+)/))) tg.contain.push(...splitList(m[1]));
155
+ }
156
+ }
157
+
158
+ return { virs, funcs, modes, sessions, tags };
159
+ }
160
+
161
+ // ── 解析 coded.dna ───────────────────────────────────────────────────────────
162
+ function parseCoded(text: string): Record<string, string> {
163
+ const out: Record<string, string> = {};
164
+ // `coded <name> """\n ...body... \n"""`,正文不解析;正文里没有三连引号。
165
+ const re = /^coded[ \t]+(\S+)[ \t]+"""\n([\s\S]*?)\n"""/gm;
166
+ let m: RegExpExecArray | null;
167
+ while ((m = re.exec(text))) out[m[1]] = m[2];
168
+ return out;
169
+ }
170
+
171
+ // ── 编译:promotor + coded → RNA ─────────────────────────────────────────────
172
+ function compile(
173
+ p: ReturnType<typeof parsePromotor>,
174
+ coded: Record<string, string>,
175
+ ) {
176
+ const errors: string[] = [];
177
+ const warnings: string[] = [];
178
+ const modeNames = Object.keys(p.modes);
179
+
180
+ // alias → 实名 解析表(func/tag 都能起别名)
181
+ const aliasToReal: Record<string, string> = {};
182
+ for (const f of Object.values(p.funcs))
183
+ for (const a of f.alias) aliasToReal[a] = f.name;
184
+
185
+ // ── 双向 belong/contain 补全(func ↔ tag)──
186
+ const tagContains: Record<string, Set<string>> = {};
187
+ const funcTags: Record<string, Set<string>> = {};
188
+ for (const name of Object.keys(p.tags)) tagContains[name] = new Set();
189
+ for (const name of Object.keys(p.funcs)) funcTags[name] = new Set();
190
+
191
+ const resolveTag = (x: string) => p.tags[x] ? x : (aliasToReal[x] ?? x);
192
+
193
+ // func.belong T → func∈T
194
+ for (const f of Object.values(p.funcs)) {
195
+ for (const b of f.belong) {
196
+ const tg = resolveTag(b);
197
+ if (!p.tags[tg]) { warnings.push(`func ${f.name} belong 未声明的 tag: ${b}`); continue; }
198
+ funcTags[f.name].add(tg);
199
+ tagContains[tg].add(f.name);
200
+ }
201
+ }
202
+ // tag.contain X → X∈tag (X 可为 func 名 / alias / tag 命名空间内的相对 alias / 子 tag)
203
+ for (const tg of Object.values(p.tags)) {
204
+ for (const c of tg.contain) {
205
+ // 解析顺序:实名 func → 全局 alias → tag 命名空间下的相对 alias(如 memory 下的 hippocampus = memory.hippocampus)
206
+ let real = p.funcs[c] ? c : aliasToReal[c];
207
+ if (!real && aliasToReal[`${tg.name}.${c}`]) real = aliasToReal[`${tg.name}.${c}`];
208
+ real = real ?? c;
209
+ if (p.funcs[real]) { funcTags[real].add(tg.name); tagContains[tg.name].add(real); }
210
+ else if (p.tags[real]) { tagContains[tg.name].add(real); } // 子 tag 关系
211
+ else warnings.push(`tag ${tg.name} contain 未知目标: ${c}`);
212
+ }
213
+ }
214
+
215
+ // ── tag 传递闭包:dotted 父子(lobes.temporal ⊂ lobes)+ tag.belong 上级 ──
216
+ const tagParents: Record<string, Set<string>> = {};
217
+ for (const name of Object.keys(p.tags)) {
218
+ tagParents[name] = new Set();
219
+ // dotted 层级父:lobes.temporal → lobes
220
+ const segs = name.split(".");
221
+ for (let i = 1; i < segs.length; i++) {
222
+ const anc = segs.slice(0, i).join(".");
223
+ if (p.tags[anc]) tagParents[name].add(anc);
224
+ }
225
+ // 显式 tag.belong(如 lobes belong brain —— brain 是 vir,不是 tag,跳过非 tag)
226
+ for (const b of p.tags[name].belong) {
227
+ const r = resolveTag(b);
228
+ if (p.tags[r]) tagParents[name].add(r);
229
+ }
230
+ }
231
+ const allAncestors = (tag: string, seen = new Set<string>()): Set<string> => {
232
+ for (const par of tagParents[tag] ?? []) {
233
+ if (!seen.has(par)) { seen.add(par); allAncestors(par, seen); }
234
+ }
235
+ return seen;
236
+ };
237
+
238
+ // ── vir 前缀校验:func 名除最后一段外,每级前缀必须是已声明 vir(或本身是 func)──
239
+ const checkVirPrefix = (name: string) => {
240
+ const segs = name.split(".");
241
+ for (let i = 1; i < segs.length; i++) {
242
+ const pre = segs.slice(0, i).join(".");
243
+ if (!p.virs.has(pre) && !p.funcs[pre]) {
244
+ errors.push(`func ${name} 的前缀 .${pre} 未用 vir 声明`);
245
+ }
246
+ }
247
+ };
248
+
249
+ // ── coded 解析 ──
250
+ const resolveCoded = (ref: string, where: string): string | null => {
251
+ if (coded[ref] !== undefined) return coded[ref];
252
+ errors.push(`${where} 引用的 coded:${ref} 在 coded.dna 中找不到`);
253
+ return null;
254
+ };
255
+
256
+ // ── 反向校验: coded.dna 里每个块都必须被至少一个 func 引用 ──
257
+ const allRefs = new Set<string>();
258
+ for (const f of Object.values(p.funcs)) {
259
+ for (const r of f.codedRefs) allRefs.add(r);
260
+ for (const ds of Object.values(f.duties)) for (const d of ds) if (d.coded) allRefs.add(d.coded);
261
+ }
262
+ for (const k of Object.keys(coded)) {
263
+ if (!allRefs.has(k)) {
264
+ errors.push(`coded:${k} 在 coded.dna 中定义但没有任何 func 引用它。请在 promotor.dna 中对应的 func 下加 coded:${k}`);
265
+ }
266
+ }
267
+
268
+ // ── 检测 organs/ 下有 .ts 文件但未在 promotor.dna 声明的目录 ──
269
+ try {
270
+ const entries = readdirSync(ORGANS_DIR, { withFileTypes: true });
271
+ for (const e of entries) {
272
+ if (!e.isDirectory()) continue;
273
+ const dirPath = `${ORGANS_DIR}/${e.name}`;
274
+ const hasTS = readdirSync(dirPath).some((f: string) => f.endsWith(".ts") && !f.includes(".CHANGELOG") && !f.endsWith(".SPEC"));
275
+ if (hasTS && !p.funcs[e.name]) {
276
+ warnings.push(`individual.bio.organs/${e.name}/ 有 .ts 但未在 promotor.dna 声明 func。`);
277
+ }
278
+ }
279
+ } catch {}
280
+
281
+ // ── 逐 func 生成 ──
282
+ const rnaFuncs: Record<string, any> = {};
283
+ for (const f of Object.values(p.funcs)) {
284
+ checkVirPrefix(f.name);
285
+
286
+ // session 默认
287
+ let session = f.session;
288
+ if (session.length === 0) {
289
+ session = ["all"];
290
+ if (!f.future) warnings.push(`func ${f.name} 未声明 session,默认 all`);
291
+ }
292
+
293
+ // 每个 mode 的启用状态
294
+ const modesResolved: Record<string, "abled" | "disabled"> = {};
295
+ if (f.abled.mode === "any") for (const m of modeNames) modesResolved[m] = "abled";
296
+ else if (f.abled.mode === "none") for (const m of modeNames) modesResolved[m] = "disabled";
297
+ else {
298
+ if (f.abled.list.length === 0 && !f.future)
299
+ warnings.push(`func ${f.name} 未声明 mode:abled,默认全部 disabled`);
300
+ for (const m of modeNames)
301
+ modesResolved[m] = f.abled.list.includes(m) ? "abled" : "disabled";
302
+ }
303
+
304
+ // func 级 coded(不分 mode)
305
+ const prompts: Record<string, string> = {};
306
+ for (const ref of f.codedRefs) {
307
+ const txt = resolveCoded(ref, `func ${f.name}`);
308
+ if (txt !== null) prompts[ref] = txt;
309
+ }
310
+
311
+ // 各 mode 的 duties(带解析后的 prompt)
312
+ const duties: Record<string, any[]> = {};
313
+ for (const [mode, list] of Object.entries(f.duties)) {
314
+ duties[mode] = list.map((d) => {
315
+ let prompt: string | null = null;
316
+ if (d.coded) prompt = resolveCoded(d.coded, `func ${f.name} in ${mode} duty ${d.name}`);
317
+ return { name: d.name, desc: d.desc || null, coded: d.coded, prompt };
318
+ });
319
+ }
320
+
321
+ // tag 传递闭包
322
+ const directTags = new Set(funcTags[f.name]);
323
+ const transTags = new Set(directTags);
324
+ for (const tg of directTags) for (const anc of allAncestors(tg)) transTags.add(anc);
325
+
326
+ rnaFuncs[f.name] = {
327
+ name: f.name,
328
+ path: f.future ? null : `individual.bio.organs/${f.name}`,
329
+ future: f.future,
330
+ session,
331
+ modes: modesResolved,
332
+ alias: f.alias,
333
+ modules: f.modules,
334
+ belong: f.belong,
335
+ tags: [...transTags].sort(),
336
+ tagsDirect: [...directTags].sort(),
337
+ promptRefs: f.codedRefs,
338
+ prompts,
339
+ duties,
340
+ };
341
+ }
342
+
343
+ // ── tag 表 ──
344
+ const rnaTags: Record<string, any> = {};
345
+ for (const [name, tg] of Object.entries(p.tags)) {
346
+ rnaTags[name] = {
347
+ name,
348
+ belong: tg.belong,
349
+ parents: [...(tagParents[name] ?? [])].sort(),
350
+ members: [...tagContains[name]].sort(),
351
+ };
352
+ }
353
+
354
+ // ── mode 表 ──
355
+ const rnaModes: Record<string, any> = {};
356
+ for (const [name, md] of Object.entries(p.modes))
357
+ rnaModes[name] = { name, alias: md.alias };
358
+
359
+ return {
360
+ generatedFrom: ["individual.bio.gene/dna.promotor/promotor.dna", "individual.bio.gene/dna.coded/coded.dna"],
361
+ note: "GENERATED by dna.transpiler/transpiler.ts — 不要手改,改 .dna 后重新转录。",
362
+ sessions: p.sessions,
363
+ modes: rnaModes,
364
+ tags: rnaTags,
365
+ funcs: rnaFuncs,
366
+ coded,
367
+ aliasToReal,
368
+ errors,
369
+ warnings,
370
+ };
371
+ }
372
+
373
+ // ── main ─────────────────────────────────────────────────────────────────────
374
+ function main() {
375
+ const promotorText = readFileSync(`${GENE_ROOT}/dna.promotor/promotor.dna`, "utf8");
376
+ const codedText = readFileSync(`${GENE_ROOT}/dna.coded/coded.dna`, "utf8");
377
+
378
+ const parsed = parsePromotor(promotorText);
379
+ const coded = parseCoded(codedText);
380
+ const rna = compile(parsed, coded);
381
+
382
+ writeFileSync(`${GENE_ROOT}/rna/rna.json`, JSON.stringify(rna, null, 2) + "\n");
383
+
384
+ const F = Object.keys(rna.funcs).length;
385
+ const C = Object.keys(coded).length;
386
+ console.log(`transcribed → individual.bio.gene/rna/rna.json (${F} funcs, ${C} coded prompts)`);
387
+ for (const w of rna.warnings) console.log(` WARN: ${w}`);
388
+ for (const e of rna.errors) console.log(` ✗ error: ${e}`);
389
+ if (rna.errors.length) {
390
+ console.log(`\n${rna.errors.length} error(s) — RNA 已写出但不应用于运行。`);
391
+ process.exit(1);
392
+ }
393
+ }
394
+
395
+ main();
@@ -0,0 +1,7 @@
1
+ [2026-06-15] created, by Claude Code
2
+ - RNA 聚合酶:两套解析器(promotor.dna 缩进式声明 + coded.dna 三引号 prompt 块) → 转录成 bios/dnas/rna.json。
3
+ - 补全双向 belong/contain、解析 mode:abled(any/none/列表)、tag 传递闭包、resolve coded:name → 实际 prompt。
4
+ - 校验:未声明 vir 前缀=error / 缺 session·mode=warning / coded 引用不到=error;tag 命名空间内相对 alias 解析。
5
+ [2026-06-16 05:48:33] edited (auto-logged, no messageDescription)
6
+ [2026-06-16 05:48:58] edited (auto-logged, no messageDescription)
7
+ [2026-06-16 05:49:12] edited (auto-logged, no messageDescription)
@@ -0,0 +1,28 @@
1
+ source: transpiler.ts @ 3a9eb161
2
+
3
+ # transpiler.ts — DNA to RNA compiler: parses .dna files, emits rna.json
4
+
5
+ ## 职责
6
+ Reads promotor.dna (indentation-based declarations of funcs, modes, sessions, tags, virs) and coded.dna (triple-quoted prompt blocks), compiles them into a unified RNA JSON that runtime.ts consumes. Validates structural integrity: vir prefix chains, unused coded blocks, undeclared sessions/modes, missing organ directories.
7
+
8
+ ## 接口
9
+ - CLI entry: `bun individual.bio.gene/dna.transpiler/transpiler.ts` (runs main())
10
+ - Internal: `parsePromotor(text) -> { virs, funcs, modes, sessions, tags }`
11
+ - Internal: `parseCoded(text) -> Record<string, string>`
12
+ - Internal: `compile(parsed, coded) -> RNA object`
13
+
14
+ ## 依赖
15
+ - `node:fs` (readFileSync, writeFileSync, readdirSync)
16
+ - `node:path`
17
+ - Input: `dna.promotor/promotor.dna`, `dna.coded/coded.dna`
18
+ - Output: `rna/rna.json`
19
+
20
+ ## 行为要点
21
+ - **promotor parser**: indent-based; top-level: vir, func, future func, session, mode, tag; nested: session, mode:abled, alias, module, belong, contain, in <mode>, duty, coded:
22
+ - **coded parser**: regex `coded <name> """..."""` triple-quote blocks
23
+ - **compile phase**: resolves coded: refs to actual prompt text, builds mode abled/disabled map per func, computes bidirectional tag membership (belong/contain) with transitive closure, validates vir prefix chains
24
+ - **Validation errors** (block runtime): unreferenced coded blocks, unresolved coded: refs, undeclared vir prefixes
25
+ - **Validation warnings** (non-fatal): missing session/mode:abled declarations, organs dirs with .ts but no promotor declaration, tag references to unknown targets
26
+ - **alias resolution**: func aliases + tag aliases, stored in aliasToReal map
27
+ - Exits with code 1 if errors found; RNA is still written but runtime will refuse to load it
28
+ - Scans individual.bio.organs/ directory to detect undeclared organ folders