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,146 @@
1
+ // safari-app.ts — Safari (自包含,零 jiti 跨文件缓存)
2
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+
6
+ const BROWSER_URL = process.env.PI_BROWSER || "http://127.0.0.1:9222";
7
+
8
+ interface SafariState {
9
+ currentUrl: string; currentTitle: string;
10
+ history: string[]; histIdx: number;
11
+ pageText: string; pageLinks: string[];
12
+ }
13
+ const _s: SafariState = {
14
+ currentUrl: "", currentTitle: "",
15
+ history: [], histIdx: -1,
16
+ pageText: "", pageLinks: [],
17
+ };
18
+
19
+ function loadJson(p: string): any[] { try { return JSON.parse(fs.readFileSync(p, "utf8")); } catch { return []; } }
20
+ function saveJson(p: string, data: any[]) { fs.mkdirSync(path.dirname(p), { recursive: true }); fs.writeFileSync(p, JSON.stringify(data, null, 2)); }
21
+
22
+ function recordHistory(personDir: string, entry: string) {
23
+ if (!personDir) return;
24
+ try {
25
+ const histFile = path.join(personDir, "safari_history.json");
26
+ const hist = loadJson(histFile);
27
+ hist.push({ url: entry, ts: new Date().toISOString() });
28
+ saveJson(histFile, hist.slice(-500));
29
+ } catch {}
30
+ }
31
+
32
+ let _svcStarting = false;
33
+ async function ensureSvc(): Promise<boolean> {
34
+ try { const r = await fetch(BROWSER_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action: "ping" }), signal: AbortSignal.timeout(500) }); return r.ok; } catch {}
35
+ if (_svcStarting) return false;
36
+ _svcStarting = true;
37
+ try {
38
+ const { spawn } = await import("node:child_process");
39
+ const { homedir } = await import("node:os");
40
+ const svc = path.join(homedir(), "smart-pi/pi-coding-master.DEV/Codebase/core/technology.server/browser-service.cjs");
41
+ const env = { ...process.env, PORT: "9222" };
42
+ if (!env.CHROMIUM_PATH) env.CHROMIUM_PATH = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome";
43
+ const child = spawn("node", [svc], { stdio: "ignore", detached: true, env });
44
+ child.unref();
45
+ for (let i = 0; i < 10; i++) { await new Promise(r => setTimeout(r, 500)); try { const r = await fetch(BROWSER_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action: "ping" }), signal: AbortSignal.timeout(500) }); if (r.ok) return true; } catch {} }
46
+ } catch {} finally { _svcStarting = false; }
47
+ return false;
48
+ }
49
+
50
+ async function bc(action: string, params: Record<string, any> = {}, session = "safari"): Promise<any> {
51
+ try {
52
+ const res = await fetch(BROWSER_URL, {
53
+ method: "POST", headers: { "Content-Type": "application/json" },
54
+ body: JSON.stringify({ action, session, ...params }),
55
+ signal: AbortSignal.timeout(10000),
56
+ });
57
+ return await res.json();
58
+ } catch {
59
+ if (await ensureSvc()) {
60
+ try {
61
+ const res = await fetch(BROWSER_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action, session, ...params }), signal: AbortSignal.timeout(10000) });
62
+ return await res.json();
63
+ } catch (e: any) { return { error: `browser: ${e.message}` }; }
64
+ }
65
+ return { error: "browser-service 启动失败" };
66
+ }
67
+ }
68
+
69
+ async function fetchUrl(url: string, limit = 10000): Promise<string> {
70
+ const res = await fetch(url, {
71
+ headers: { "User-Agent": "Mozilla/5.0" },
72
+ signal: AbortSignal.timeout(10000),
73
+ });
74
+ const ct = res.headers.get("content-type") || "";
75
+ return (ct.includes("json") ? JSON.stringify(await res.json(), null, 2) : await res.text()).slice(0, limit);
76
+ }
77
+
78
+ function openBg(url: string): void {
79
+ _s.currentUrl = url; _s.currentTitle = url;
80
+ _s.pageText = ""; _s.pageLinks = [];
81
+ _s.history = _s.history.slice(0, _s.histIdx + 1);
82
+ _s.history.push(url); _s.histIdx = _s.history.length - 1;
83
+ // 全异步加载,不等任何返回
84
+ bc("open", { url }).then(r => {
85
+ if (r.error) { console.log("[safari] open fail:", r.error); return; }
86
+ _s.currentTitle = (r.text || "").replace(/^已打开: /, "").split("\n")[0] || url;
87
+ return Promise.all([bc("text", { limit: 10000 }), bc("links", { limit: 50 })]);
88
+ }).then((results: any) => {
89
+ if (results) {
90
+ _s.pageText = results[0]?.text || "";
91
+ _s.pageLinks = results[1]?.text ? results[1].text.split("\n").filter(Boolean) : [];
92
+ console.log("[safari] loaded", _s.pageText.length, "chars from", url);
93
+ }
94
+ }).catch((e: any) => console.log("[safari] bg fail:", e.message));
95
+ }
96
+
97
+ async function searchWeb(q: string): Promise<string> {
98
+ try {
99
+ const sxng = process.env.SEARXNG_URL || "http://127.0.0.1:8888";
100
+ const r = await fetch(`${sxng}/search?q=${encodeURIComponent(q)}&format=json&language=zh-CN`, { signal: AbortSignal.timeout(8000) });
101
+ const j = await r.json() as any; const items = j.results || [];
102
+ if (items.length) return "搜索: " + q + "\n\n" + items.slice(0, 8).map((i: any, n: number) => `[${n+1}] ${i.title}\n ${i.content || i.snippet || ""}\n → ${i.url}`).join("\n\n");
103
+ } catch {}
104
+ try { return await fetchUrl("https://www.google.com/search?q=" + encodeURIComponent(q), 5000); } catch { return "搜索失败"; }
105
+ }
106
+
107
+ export const app: PhoneApp = {
108
+ name: "Safari",
109
+ icon: "浏览器",
110
+ messageDescription: "打开网页、搜索、读取内容",
111
+ onOpen(s: any) {
112
+ return { screen: "Safari\n URL | 搜索 xxx | 读 | 返回", state: s };
113
+ },
114
+ async onAction(input: string, state: any, personDir: string) {
115
+ const cmd = input.trim();
116
+ try {
117
+ if (cmd === "返回" || cmd === "back") return { screen: "已返回", state: { ...state, _close: true } };
118
+ if (cmd === "读" || cmd === "read") {
119
+ if (_s.pageText) return { screen: _s.pageText.slice(0, 5000), state };
120
+ if (_s.currentUrl) return { screen: `加载中: ${_s.currentUrl}\n\n稍后再试「读」。`, state };
121
+ return { screen: "未打开页面。输入 URL。", state };
122
+ }
123
+ if (cmd.startsWith("搜索 ") || cmd.startsWith("search ")) {
124
+ const q = cmd.replace(/^(搜索 |search )/, "");
125
+ const result = await searchWeb(q);
126
+ recordHistory(personDir, `search: ${q}`);
127
+ return { screen: result.slice(0, 5000), state };
128
+ }
129
+ if (cmd.startsWith("http://") || cmd.startsWith("https://")) {
130
+ const t0 = Date.now();
131
+ const r = await bc("open", { url: cmd });
132
+ if (r.error) return { screen: `打开失败: ${r.error}`, state };
133
+ const title = (r.text || "").replace(/^已打开: /, "").split("\n")[0] || cmd;
134
+ _s.currentUrl = cmd; _s.currentTitle = title;
135
+ const [textR] = await Promise.all([bc("text", { limit: 10000 })]);
136
+ _s.pageText = textR?.text || "";
137
+ recordHistory(personDir, cmd);
138
+ const elapsed = ((Date.now() - t0) / 1000).toFixed(1);
139
+ return { screen: `已打开: ${title}\n${cmd}\n\n${_s.pageText.slice(0, 5000) || "(页面无文字)"}\n\n[${elapsed}s]`, state };
140
+ }
141
+ return { screen: "Safari\n URL | 搜索 xxx | 读 | 返回", state };
142
+ } catch (e: any) {
143
+ return { screen: "错误: " + e.message, state };
144
+ }
145
+ },
146
+ };
@@ -0,0 +1,24 @@
1
+ source: safari.ts @ 0db96e05
2
+
3
+ # Safari — 动态网页浏览器
4
+
5
+ ## 功能
6
+ 通过 browser-service(playleft + headless Chrome)访问网页,支持 JS 动态内容渲染。不再用 curl/fetch 抓静态 HTML。
7
+
8
+ ## 操作
9
+ - search_web: DuckDuckGo 搜索,浏览器渲染结果
10
+ - open_url/open: 打开任意 URL,返回渲染后文字
11
+ - read/text: 读当前页面文字
12
+ - links: 列出链接
13
+ - click: 点击元素
14
+ - search_page: 页面内搜索
15
+ - scroll: 滚动
16
+ - back: 后退
17
+ - 书签/历史: add_bookmark, query_bookmarks, query_history
18
+
19
+ ## 依赖
20
+ browser-service (technology.server/browser-service.cjs) 必须运行。PI_BROWSER 环境变量指定地址(默认 localhost:9222)。
21
+
22
+ ## 数据
23
+ 书签: {personDir}/safari_bookmarks.json
24
+ 历史: {personDir}/safari_history.json
@@ -0,0 +1,126 @@
1
+ import { asyncShSafe } from "#sh";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
5
+ import { getRegion, setRegion } from "../../apps.preinstalled/calendar/holiday-calendar.ts";
6
+
7
+ // apps.system/settings/settings.ts — 系统设置
8
+ async function getPiVersion(): Promise<string> {
9
+ const raw = await asyncShSafe("node -e 'console.log(require(\"@earendil-works/pi-coding-agent/package.json\").version)'", 3000);
10
+ return raw.trim() || "?";
11
+ }
12
+
13
+ function loadCostTotal(personDir: string): { main: number; hippocampus: number; subconscious: number; total: number; sessions: number } {
14
+ const f = path.join(personDir, "cost_total.json");
15
+ try { return JSON.parse(fs.readFileSync(f, "utf8")); } catch { return { main: 0, hippocampus: 0, subconscious: 0, total: 0, sessions: 0 }; }
16
+ }
17
+
18
+ function loadCostCurrent(personDir: string, role: string): number {
19
+ try {
20
+ const d = JSON.parse(fs.readFileSync(path.join(personDir, `cost-${role}.json`), "utf8"));
21
+ return d.cost || 0;
22
+ } catch { return 0; }
23
+ }
24
+
25
+ export async function settingsCmd(args: any, _ctx: any, personDir: string): Promise<{ content: any[]; details: any }> {
26
+ const a = args.action || "";
27
+ if (a === "status") {
28
+ const piVer = await getPiVersion();
29
+ const costTotal = loadCostTotal(personDir);
30
+ const costCurr = {
31
+ main: loadCostCurrent(personDir, "main"),
32
+ hippocampus: loadCostCurrent(personDir, "hippocampus"),
33
+ subconscious: loadCostCurrent(personDir, "subconscious"),
34
+ };
35
+ costCurr.total = costCurr.main + costCurr.hippocampus + costCurr.subconscious;
36
+
37
+ const info = {
38
+ platform: process.platform,
39
+ arch: process.arch,
40
+ pi: piVer,
41
+ node: process.version,
42
+ cwd: process.cwd(),
43
+ uptime: Math.floor(process.uptime()),
44
+ costCurrent: costCurr,
45
+ costTotal,
46
+ };
47
+
48
+ const lines = [
49
+ `平台: ${info.platform}/${info.arch}`,
50
+ `pi: v${info.pi}`,
51
+ `Node: ${info.node}`,
52
+ `运行时间: ${info.uptime}s`,
53
+ ``,
54
+ `--- 费用 ---`,
55
+ `当前会话: $${costCurr.total.toFixed(4)}`,
56
+ ` 主意识: $${costCurr.main.toFixed(4)}`,
57
+ ` 海马体: $${costCurr.hippocampus.toFixed(4)}`,
58
+ ` 潜意识: $${costCurr.subconscious.toFixed(4)}`,
59
+ `累计(全部会话): $${costTotal.total.toFixed(4)} (${costTotal.sessions}次会话)`,
60
+ ];
61
+
62
+ return { content: [{ type: "text", text: lines.join("\n") }], details: info };
63
+ }
64
+ if (a === "region" || a === "地区") {
65
+ const current = getRegion(personDir);
66
+ const lines = [
67
+ `**地区设置**`,
68
+ "",
69
+ `当前: ${current === "CN" ? "中国" : "美国"}`,
70
+ "",
71
+ "切换: 地区 中国 | 地区 美国",
72
+ "",
73
+ "地区决定日历中显示的节假日。",
74
+ "中国: 春节、清明、端午、中秋、国庆等",
75
+ "美国: New Year, Independence Day, Thanksgiving, Christmas 等",
76
+ ];
77
+ return { content: [{ type: "text", text: lines.join("\n") }], details: {} };
78
+ }
79
+
80
+ if (a === "地区 中国" || a === "region CN" || a === "region cn") {
81
+ setRegion(personDir, "CN");
82
+ return { content: [{ type: "text", text: "地区已切换为 **中国**。日历将显示中国节假日。" }], details: {} };
83
+ }
84
+ if (a === "地区 美国" || a === "region US" || a === "region us") {
85
+ setRegion(personDir, "US");
86
+ return { content: [{ type: "text", text: "地区已切换为 **美国**。日历将显示美国节假日。" }], details: {} };
87
+ }
88
+
89
+ return { content: [{ type: "text", text: `未知操作: ${a}。可用: status | 地区 | 地区 中国 | 地区 美国` }], details: {} };
90
+ }
91
+
92
+ // ── PhoneApp ──────────────────────────────────────────────────
93
+ export const app: PhoneApp = {
94
+ name: "设置",
95
+ icon: "设置",
96
+ messageDescription: "系统设置与状态",
97
+ onOpen(_state, personDir) {
98
+ const region = getRegion(personDir);
99
+ const regionLabel = region === "US" ? "美国" : "中国";
100
+ return {
101
+ screen: [
102
+ "设置",
103
+ "",
104
+ `地区: ${regionLabel}`,
105
+ "",
106
+ "命令:",
107
+ " 状态 — 查看系统状态与费用",
108
+ " 地区 — 查看地区设置",
109
+ " 地区 中国 — 切换到中国节假日",
110
+ " 地区 美国 — 切换到美国节假日",
111
+ ].join("\n"),
112
+ state: _state ?? {},
113
+ };
114
+ },
115
+ async onAction(input, state, personDir) {
116
+ const trimmed = input.trim();
117
+ let action = trimmed;
118
+ if (trimmed === "状态") action = "status";
119
+ else if (trimmed === "地区") action = "region";
120
+ else if (trimmed === "地区 中国" || trimmed === "地区中国") action = "地区 中国";
121
+ else if (trimmed === "地区 美国" || trimmed === "地区美国") action = "地区 美国";
122
+
123
+ const result = await settingsCmd({ action }, {}, personDir);
124
+ return { screen: result.content[0].text, state };
125
+ },
126
+ };
@@ -0,0 +1,17 @@
1
+ source: settings.ts @ 1a7c9b08
2
+
3
+ # Settings -- 系统设置与状态
4
+
5
+ ## 功能
6
+ 查看系统运行状态和费用统计(当前会话 + 累计)。分主意识/海马体/潜意识三路统计。
7
+
8
+ ## 操作
9
+ - `action: "status"` -- 显示平台/版本/运行时间/费用明细
10
+ - 其他 action 值 -- 返回"未知操作"
11
+
12
+ ## 数据
13
+ - `{personDir}/cost_total.json` -- 累计费用(main/hippocampus/subconscious/total/sessions)
14
+ - `{personDir}/cost-{role}.json` -- 当前会话各角色费用
15
+
16
+ ## 备注
17
+ pi 版本通过 shell 调用 `node -e` 读取 package.json 获取。仅只读查询,不修改设置。
@@ -0,0 +1,22 @@
1
+ // apps.system/tips/tips.ts — tips tool (AI) — stub
2
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
3
+
4
+ export async function tipsCmd(args: any, _ctx: any, _personDir: string): Promise<{ content: any[]; details: any }> {
5
+ return { content: [{ type: "text", text: "tips 功能尚未实现" }], details: {} };
6
+ }
7
+
8
+ // ── PhoneApp ──────────────────────────────────────────────────
9
+ export const app: PhoneApp = {
10
+ name: "Tips",
11
+ icon: "提示",
12
+ messageDescription: "使用技巧",
13
+ onOpen(_state, _personDir) {
14
+ return {
15
+ screen: "Tips\n\n功能开发中...",
16
+ state: _state ?? {},
17
+ };
18
+ },
19
+ onAction(_input, state, _personDir) {
20
+ return { screen: "Tips\n\n功能开发中...", state };
21
+ },
22
+ };
@@ -0,0 +1,15 @@
1
+ source: tips.ts @ bd6d9412
2
+
3
+ # Tips -- 使用提示(未实现)
4
+
5
+ ## 功能
6
+ 使用提示/教程。当前为 stub,所有调用返回"tips 功能尚未实现"。
7
+
8
+ ## 操作
9
+ 无。所有参数被忽略。
10
+
11
+ ## 数据
12
+ 无数据存储。
13
+
14
+ ## 备注
15
+ 纯 stub,导出 `tipsCmd`,等待后续实现。
@@ -0,0 +1,148 @@
1
+ // apps.thirdparty/alipay/alipay.ts — 支付宝 AI付
2
+ // 对接官方 @alipay/agent-payment MCP (alipay-bot CLI)
3
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
4
+ import { execSync } from "child_process";
5
+ import { existsSync } from "fs";
6
+
7
+ import { homedir } from "node:os";
8
+ import { join } from "node:path";
9
+ const BOT = join(homedir(), ".local/bin/alipay-bot");
10
+
11
+ function bot(args: string): { ok: boolean; output: string } {
12
+ try {
13
+ const out = execSync(`${BOT} ${args}`, { timeout: 15000, encoding: "utf8" });
14
+ return { ok: true, output: out.trim() };
15
+ } catch (e: any) {
16
+ return { ok: false, output: e.stderr || e.message || String(e) };
17
+ }
18
+ }
19
+
20
+ function isInstalled(): boolean {
21
+ return existsSync(BOT);
22
+ }
23
+
24
+ function genQR(url: string): string {
25
+ try {
26
+ return execSync(`python3 -c "
27
+ import qrcode
28
+ qr = qrcode.QRCode(border=2, box_size=1)
29
+ qr.add_data('${url}')
30
+ qr.make(fit=True)
31
+ qr.print_ascii(invert=True)
32
+ "`, { timeout: 5000, encoding: "utf8" });
33
+ } catch {
34
+ return "[QR码生成失败]";
35
+ }
36
+ }
37
+
38
+ // ── PhoneApp ──────────────────────────────────────────────────
39
+ export const app: PhoneApp = {
40
+ name: "支付宝",
41
+ icon: "支付宝",
42
+ messageDescription: "支付宝AI付 — 智能体支付",
43
+
44
+ onOpen(_state) {
45
+ if (!isInstalled()) {
46
+ return {
47
+ screen: [
48
+ "═══ 支付宝 ═══",
49
+ "",
50
+ " WARN: 未安装支付宝 AI付",
51
+ " 请先运行: npx -y @alipay/agent-payment@latest install",
52
+ "",
53
+ " 返回 — 回主屏幕",
54
+ ].join("\n"),
55
+ state: _state ?? {},
56
+ };
57
+ }
58
+
59
+ const wallet = bot("check-wallet");
60
+ const lines = [
61
+ "═══ 支付宝 AI付 ═══",
62
+ "",
63
+ wallet.ok ? ` ${wallet.output}` : " WARN: 钱包未开通 — 输入「开通钱包」",
64
+ "",
65
+ " 操作:",
66
+ " · 开通钱包 — 申请开通支付宝钱包",
67
+ " · 钱包状态 — 查看钱包详情",
68
+ " · 付款 <金额> <说明> — 发起支付",
69
+ " · 查单 <订单号> — 查询支付状态",
70
+ " · 开启支付 — 开启支付宝支付功能",
71
+ "",
72
+ " 返回 — 回主屏幕",
73
+ ];
74
+ return { screen: lines.join("\n"), state: _state ?? {} };
75
+ },
76
+
77
+ onAction(input, state) {
78
+ const cmd = input.trim();
79
+
80
+ // 开通钱包
81
+ if (/^(开通钱包|apply)/i.test(cmd)) {
82
+ const r = bot("apply-wallet");
83
+ if (!r.ok) return { screen: `Error: ${r.output}`, state };
84
+ // extract URL from output and show QR
85
+ const urlMatch = r.output.match(/https:\/\/u\.alipay\.cn\/[^\s)]+/);
86
+ const url = urlMatch ? urlMatch[0] : "";
87
+ const qr = url ? genQR(url) : "";
88
+ return {
89
+ screen: [
90
+ `请用支付宝扫码授权`,
91
+ "",
92
+ qr,
93
+ "",
94
+ url ? `${url}` : "",
95
+ "",
96
+ "扫码后输入「bind <授权码>」完成绑定",
97
+ ].filter(Boolean).join("\n"),
98
+ state,
99
+ };
100
+ }
101
+
102
+ // 钱包状态
103
+ if (/^(钱包|状态|check|钱包状态)/i.test(cmd)) {
104
+ const r = bot("check-wallet");
105
+ return { screen: r.ok ? r.output : `Error: ${r.output}`, state };
106
+ }
107
+
108
+ // 开启支付
109
+ if (/^(开启支付|开启支付宝)/i.test(cmd)) {
110
+ const lines = [
111
+ "开启支付宝支付功能",
112
+ "",
113
+ "请按以下步骤操作:",
114
+ "1. 打开支付宝 App 扫码授权",
115
+ "2. 获取授权指令后发给我",
116
+ "3. 我将调用 bind-wallet 完成绑定",
117
+ "",
118
+ "或输入「bind <授权码>」完成绑定",
119
+ ];
120
+ return { screen: lines.join("\n"), state };
121
+ }
122
+
123
+ // 绑定钱包
124
+ if (/^bind\s+(\S+)/i.test(cmd)) {
125
+ const code = cmd.match(/^bind\s+(\S+)/i)![1];
126
+ const r = bot(`bind-wallet ${code}`);
127
+ return { screen: r.ok ? `${r.output}` : `Error: ${r.output}`, state };
128
+ }
129
+
130
+ // 付款
131
+ const payMatch = cmd.match(/^(?:付款|pay)\s+(\d+(?:\.\d+)?)\s*(.+)?$/i);
132
+ if (payMatch) {
133
+ const amount = payMatch[1];
134
+ const desc = (payMatch[2] || "AI服务").replace(/["`$\\]/g, "");
135
+ const r = bot(`submit-payment --amount ${amount} --desc "${desc}"`);
136
+ return { screen: r.ok ? `${r.output}` : `Error: ${r.output}`, state };
137
+ }
138
+
139
+ // 查单
140
+ const queryMatch = cmd.match(/^(?:查单|query)\s+(\S+)$/i);
141
+ if (queryMatch) {
142
+ const r = bot(`query-payment-status ${queryMatch[1]}`);
143
+ return { screen: r.ok ? `${r.output}` : `Error: ${r.output}`, state };
144
+ }
145
+
146
+ return this.onOpen(state);
147
+ },
148
+ };
@@ -0,0 +1,7 @@
1
+ source: alipay.ts
2
+
3
+ # alipay — 支付宝集成
4
+
5
+ ## 职责
6
+ 支付宝支付/查询功能集成。
7
+ 允许 agent 处理支付宝相关的交易和查询。
@@ -0,0 +1,33 @@
1
+ // apps.thirdparty/bilibili/bilibili-app.ts — B站 Video App(PhoneApp 包装)
2
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
3
+ import { bilibiliCmd } from "./bilibili.ts";
4
+
5
+ export const app: PhoneApp = {
6
+ name: "B站",
7
+ icon: "B站",
8
+ messageDescription: "视频字幕/搜索/热门",
9
+ onOpen(state: any) {
10
+ return { screen: "B站\n\n输入 BV号 看字幕\n输入「搜索 关键词」搜视频\n输入「热门」看排行榜", state };
11
+ },
12
+ async onAction(input: string, state: any) {
13
+ const cmd = input.trim();
14
+ try {
15
+ if (cmd === "热门" || cmd === "popular") {
16
+ const r = await bilibiliCmd({ action: "popular" }, {}, "");
17
+ return { screen: r.content[0].text, state };
18
+ }
19
+ if (cmd.startsWith("搜索 ") || cmd.startsWith("search ")) {
20
+ const kw = cmd.replace(/^(搜索 |search )/, "");
21
+ const r = await bilibiliCmd({ action: "search", keyword: kw }, {}, "");
22
+ return { screen: r.content[0].text, state };
23
+ }
24
+ if (cmd.match(/^BV/i)) {
25
+ const r = await bilibiliCmd({ action: "subs", bvid: cmd }, {}, "");
26
+ return { screen: r.content[0].text.slice(0, 6000), state };
27
+ }
28
+ return { screen: "B站\n\n" + cmd.split("\n").slice(0, 10).join("\n") + "\n\n用法: BV号 | 搜索 xxx | 热门 | 返回", state };
29
+ } catch (e: any) {
30
+ return { screen: `Error: ${e.message}`, state };
31
+ }
32
+ },
33
+ };