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,404 @@
1
+ // apps.preinstalled/reminder/reminders.ts — Reminders app
2
+ // v0.2 spec: 提醒事项 — 创建待办、到期提醒、完成/推迟、follow-up check
3
+ // "模型自己也可以follow up,然后后续提醒,要选择完成才能完成"
4
+
5
+ import * as fs from "fs";
6
+ import * as path from "path";
7
+
8
+ // ── Reminder types ──────────────────────────────────────────────
9
+ type ReminderPriority = "low" | "normal" | "high" | "critical";
10
+
11
+ type RepeatRule = "daily" | "weekly" | "monthly" | "yearly" | null;
12
+
13
+ interface Reminder {
14
+ id: string;
15
+ title: string;
16
+ notes?: string;
17
+ due?: string; // ISO timestamp, null = no due date
18
+ priority: ReminderPriority;
19
+ completed: boolean;
20
+ completedAt?: string;
21
+ followUp: boolean; // requires explicit completion check
22
+ followUpInterval?: number; // minutes between follow-up nudges
23
+ lastNudged?: string;
24
+ tags: string[];
25
+ created: string;
26
+ updated: string;
27
+ repeat?: RepeatRule; // 重复规则
28
+ notified?: boolean; // 已推送通知
29
+ }
30
+
31
+ // ── Storage ─────────────────────────────────────────────────────
32
+ function remindersPath(personDir: string) {
33
+ return path.join(personDir, "reminders.json");
34
+ }
35
+
36
+ function loadReminders(personDir: string): Reminder[] {
37
+ try {
38
+ return JSON.parse(fs.readFileSync(remindersPath(personDir), "utf8"));
39
+ } catch {
40
+ return [];
41
+ }
42
+ }
43
+
44
+ function saveReminders(personDir: string, reminders: Reminder[]) {
45
+ fs.writeFileSync(remindersPath(personDir), JSON.stringify(reminders, null, 2));
46
+ }
47
+
48
+ function genId(): string {
49
+ return `r-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
50
+ }
51
+
52
+ // ── 重复计算 ──
53
+ function calcNextDue(due: string, repeat: RepeatRule): string {
54
+ const d = new Date(due);
55
+ switch (repeat) {
56
+ case "daily": d.setDate(d.getDate() + 1); break;
57
+ case "weekly": d.setDate(d.getDate() + 7); break;
58
+ case "monthly": d.setMonth(d.getMonth() + 1); break;
59
+ case "yearly": d.setFullYear(d.getFullYear() + 1); break;
60
+ }
61
+ return d.toISOString();
62
+ }
63
+
64
+ // ── 推送检查(被 phone kernel 的 before_agent_start 调用)──
65
+ export function checkAndNotify(personDir: string): { title: string; due: string }[] {
66
+ const reminders = loadReminders(personDir);
67
+ const now = Date.now();
68
+ const fired: { title: string; due: string }[] = [];
69
+
70
+ for (const r of reminders) {
71
+ if (r.completed || !r.due || r.notified) continue;
72
+ if (new Date(r.due).getTime() <= now) {
73
+ r.notified = true;
74
+ r.updated = new Date().toISOString();
75
+ fired.push({ title: r.title, due: r.due });
76
+ }
77
+ }
78
+
79
+ if (fired.length > 0) saveReminders(personDir, reminders);
80
+ return fired;
81
+ }
82
+
83
+ // ── Due check ──────────────────────────────────────────────────
84
+ function isOverdue(r: Reminder): boolean {
85
+ if (r.completed || !r.due) return false;
86
+ return new Date(r.due) < new Date();
87
+ }
88
+
89
+ function needsNudge(r: Reminder): boolean {
90
+ if (r.completed || !r.followUp || !r.followUpInterval || !r.lastNudged) return false;
91
+ const nextNudge = new Date(r.lastNudged).getTime() + r.followUpInterval * 60 * 1000;
92
+ return Date.now() >= nextNudge;
93
+ }
94
+
95
+ // ── Render ──────────────────────────────────────────────────────
96
+ function renderReminder(r: Reminder, index?: number): string {
97
+ const prefix = index !== undefined ? `${index + 1}. ` : "";
98
+ const check = r.completed ? "[DONE]" : isOverdue(r) ? "[OVERDUE]" : r.priority === "critical" ? "[!]" : r.priority === "high" ? "[HIGH]" : "[ ]";
99
+ const dueStr = r.due ? ` · ${r.due.slice(0, 16).replace("T", " ")}` : "";
100
+ const fuStr = r.followUp ? " · follow-up" : "";
101
+ const tagsStr = (r.tags && r.tags.length > 0) ? ` · ${r.tags.join(", ")}` : "";
102
+ const notesStr = r.notes ? `\n ${r.notes}` : "";
103
+
104
+ let line = `${check} ${prefix}**${r.title}**${dueStr}${fuStr}${tagsStr}${notesStr}`;
105
+ if (r.completed && r.completedAt) {
106
+ line += `\n ✓ 完成于 ${r.completedAt.slice(0, 16).replace("T", " ")}`;
107
+ }
108
+ return line;
109
+ }
110
+
111
+ // ── Resolve ID or display index ────────────────────────────────
112
+ function resolveId(idOrIndex: string, reminders: Reminder[]): Reminder | undefined {
113
+ // try exact ID match first
114
+ const byId = reminders.find(x => x.id === idOrIndex);
115
+ if (byId) return byId;
116
+ // try display index (1-based) for non-completed items
117
+ const idx = parseInt(idOrIndex, 10);
118
+ if (!isNaN(idx) && idx >= 1) {
119
+ const active = reminders.filter(r => !r.completed);
120
+ return active[idx - 1];
121
+ }
122
+ return undefined;
123
+ }
124
+
125
+ // ── Main handler ───────────────────────────────────────────────
126
+ export async function remindersCmd(args: any, _ctx: any, personDir: string): Promise<any> {
127
+ const reminders = loadReminders(personDir);
128
+
129
+ // --add: create new reminder
130
+ if (args.add) {
131
+ const title = typeof args.add === "string" ? args.add : args._?.[1];
132
+ if (!title) return { content: [{ type: "text", text: "Usage: reminders --add <title> [--due <ISO>] [--priority low|normal|high|critical] [--follow-up] [--notes <text>]" }] };
133
+
134
+ const repeat = (args.repeat as RepeatRule) || null;
135
+ const reminder: Reminder = {
136
+ id: genId(),
137
+ title,
138
+ notes: args.notes as string | undefined,
139
+ due: args.due as string | undefined,
140
+ priority: (args.priority as ReminderPriority) || "normal",
141
+ completed: false,
142
+ followUp: !!args["follow-up"] || !!args.followUp,
143
+ followUpInterval: (args.interval as number) || 60,
144
+ tags: [],
145
+ created: new Date().toISOString(),
146
+ updated: new Date().toISOString(),
147
+ repeat,
148
+ notified: false,
149
+ };
150
+
151
+ reminders.push(reminder);
152
+ saveReminders(personDir, reminders);
153
+
154
+ return { content: [{ type: "text", text: `Reminder created: **${title}**\n${renderReminder(reminder)}` }] };
155
+ }
156
+
157
+ // --complete <id>: mark as done
158
+ if (args.complete) {
159
+ const id = args.complete as string;
160
+ const r = resolveId(id, reminders);
161
+ if (!r) return { content: [{ type: "text", text: `Reminder not found: ${id}` }] };
162
+
163
+ r.completed = true;
164
+ r.completedAt = new Date().toISOString();
165
+ r.updated = new Date().toISOString();
166
+
167
+ // 重复提醒:完成后自动创建下一次
168
+ let repeatMsg = "";
169
+ if (r.repeat && r.due) {
170
+ const nextDue = calcNextDue(r.due, r.repeat);
171
+ const next: Reminder = {
172
+ ...r,
173
+ id: genId(),
174
+ due: nextDue,
175
+ completed: false,
176
+ completedAt: undefined,
177
+ notified: false,
178
+ created: new Date().toISOString(),
179
+ updated: new Date().toISOString(),
180
+ };
181
+ reminders.push(next);
182
+ repeatMsg = `\n下次: ${nextDue.slice(0, 16)} (${r.repeat})`;
183
+ }
184
+
185
+ saveReminders(personDir, reminders);
186
+ return { content: [{ type: "text", text: `Completed: **${r.title}**${repeatMsg}` }] };
187
+ }
188
+
189
+ // --uncomplete <id>: reopen
190
+ if (args.uncomplete) {
191
+ const id = args.uncomplete as string;
192
+ const r = resolveId(id, reminders);
193
+ if (!r) return { content: [{ type: "text", text: `Reminder not found: ${id}` }] };
194
+
195
+ r.completed = false;
196
+ r.completedAt = undefined;
197
+ r.updated = new Date().toISOString();
198
+ saveReminders(personDir, reminders);
199
+
200
+ return { content: [{ type: "text", text: `Reopened: **${r.title}**` }] };
201
+ }
202
+
203
+ // --due <id> <ISO>: set/change due date
204
+ if (args.due) {
205
+ const id = typeof args.due === "string" && args.due.startsWith("r-") ? args.due : args._?.[1];
206
+ const dueStr = (typeof args._?.[2] === "string" ? args._?.[2] : args.date) as string;
207
+ if (!id || !dueStr) return { content: [{ type: "text", text: "Usage: reminders --due <id> <ISO timestamp>" }] };
208
+
209
+ const r = resolveId(id, reminders);
210
+ if (!r) return { content: [{ type: "text", text: `Reminder not found: ${id}` }] };
211
+
212
+ r.due = dueStr;
213
+ r.updated = new Date().toISOString();
214
+ saveReminders(personDir, reminders);
215
+
216
+ return { content: [{ type: "text", text: `Due set for **${r.title}**: ${dueStr}` }] };
217
+ }
218
+
219
+ // --nudge <id>: manually nudge (mark follow-up check done)
220
+ if (args.nudge) {
221
+ const id = args.nudge as string;
222
+ const r = resolveId(id, reminders);
223
+ if (!r) return { content: [{ type: "text", text: `Reminder not found: ${id}` }] };
224
+
225
+ r.lastNudged = new Date().toISOString();
226
+ r.updated = new Date().toISOString();
227
+ saveReminders(personDir, reminders);
228
+
229
+ return { content: [{ type: "text", text: `Nudged: **${r.title}** — next nudge in ${r.followUpInterval || 60} min.` }] };
230
+ }
231
+
232
+ // --tag <id> <tag>: add tag
233
+ if (args.tag) {
234
+ const id = args.tag as string;
235
+ const tag = args._?.[1] as string;
236
+ if (!tag) return { content: [{ type: "text", text: "Usage: reminders --tag <id> <tag>" }] };
237
+
238
+ const r = resolveId(id, reminders);
239
+ if (!r) return { content: [{ type: "text", text: `Reminder not found: ${id}` }] };
240
+
241
+ if (!r.tags) r.tags = [];
242
+ if (!r.tags.includes(tag)) {
243
+ r.tags.push(tag);
244
+ r.updated = new Date().toISOString();
245
+ saveReminders(personDir, reminders);
246
+ }
247
+ return { content: [{ type: "text", text: `Tagged **${r.title}** with "${tag}".` }] };
248
+ }
249
+
250
+ // --show <id>: detail
251
+ if (args.show) {
252
+ const id = args.show as string;
253
+ const r = resolveId(id, reminders);
254
+ if (!r) return { content: [{ type: "text", text: `Reminder not found: ${id}` }] };
255
+
256
+ const lines = [renderReminder(r), ` ID: \`${r.id}\``, ` Priority: ${r.priority}`, ` Tags: ${(r.tags || []).join(", ") || "—"}`];
257
+ if (r.followUp) lines.push(` Follow-up: every ${r.followUpInterval}min · last nudge: ${r.lastNudged || "never"}`);
258
+
259
+ return { content: [{ type: "text", text: lines.join("\n") }] };
260
+ }
261
+
262
+ // --overdue: list overdue items
263
+ if (args.overdue) {
264
+ const overdue = reminders.filter(r => isOverdue(r));
265
+ if (overdue.length === 0) {
266
+ return { content: [{ type: "text", text: "No overdue reminders." }] };
267
+ }
268
+ const lines = [`**Overdue (${overdue.length})**`];
269
+ overdue.forEach((r, i) => lines.push(renderReminder(r, i)));
270
+ return { content: [{ type: "text", text: lines.join("\n") }] };
271
+ }
272
+
273
+ // --search <q>: search
274
+ if (args.search) {
275
+ const q = (args.search as string).toLowerCase();
276
+ const results = reminders.filter(r =>
277
+ r.title.toLowerCase().includes(q) ||
278
+ (r.notes && r.notes.toLowerCase().includes(q)) ||
279
+ (r.tags && r.tags.some((t: string) => t.toLowerCase().includes(q)))
280
+ );
281
+ if (results.length === 0) return { content: [{ type: "text", text: `No reminders matching "${args.search}".` }] };
282
+
283
+ const lines = [`**Search: "${args.search}" (${results.length})**`];
284
+ results.forEach((r, i) => lines.push(renderReminder(r, i)));
285
+ return { content: [{ type: "text", text: lines.join("\n") }] };
286
+ }
287
+
288
+ // --filter: active / completed / all
289
+ if (args.filter) {
290
+ const filter = args.filter as string;
291
+ let filtered: Reminder[];
292
+ if (filter === "active") filtered = reminders.filter(r => !r.completed);
293
+ else if (filter === "completed") filtered = reminders.filter(r => r.completed);
294
+ else if (filter === "followup") filtered = reminders.filter(r => r.followUp && !r.completed);
295
+ else filtered = reminders;
296
+
297
+ const label = filter === "active" ? "Active" : filter === "completed" ? "Completed" : filter === "followup" ? "Follow-up" : "All";
298
+ const lines = [`**${label} Reminders (${filtered.length})**`];
299
+ filtered.forEach((r, i) => lines.push(renderReminder(r, i)));
300
+ lines.push("\nCommands: `reminders --add` · `reminders --complete <id>` · `reminders --due <id>` · `reminders --overdue` · `reminders --filter active|completed`");
301
+ return { content: [{ type: "text", text: lines.join("\n") }] };
302
+ }
303
+
304
+ // default: show active
305
+ const active = reminders.filter(r => !r.completed);
306
+ const completed = reminders.filter(r => r.completed);
307
+ const overdue = active.filter(r => isOverdue(r));
308
+ const followUps = active.filter(r => r.followUp);
309
+
310
+ const lines: string[] = [];
311
+ if (overdue.length > 0) {
312
+ lines.push(`**Overdue (${overdue.length})**`);
313
+ overdue.forEach((r, i) => lines.push(renderReminder(r, i)));
314
+ lines.push("");
315
+ }
316
+ if (active.length > 0) {
317
+ lines.push(`**Active (${active.length})**`);
318
+ const notOverdue = active.filter(r => !isOverdue(r));
319
+ notOverdue.forEach((r, i) => lines.push(renderReminder(r, i)));
320
+ if (followUps.length > 0) lines.push(`\n${followUps.length} follow-ups pending`);
321
+ }
322
+ if (completed.length > 0) {
323
+ lines.push(`\n**Completed (${completed.length})** — use \`reminders --filter completed\` to see`);
324
+ }
325
+ if (active.length === 0 && completed.length === 0) {
326
+ lines.push("No reminders yet. Use `reminders --add <title>` to create one.");
327
+ }
328
+
329
+ lines.push("\nCommands: `--add` · `--complete <id>` · `--due <id>` · `--overdue` · `--filter active|completed|followup` · `--search <q>`");
330
+ return { content: [{ type: "text", text: lines.join("\n") }] };
331
+ }
332
+
333
+ export { type Reminder, loadReminders, isOverdue, needsNudge };
334
+
335
+ // ── PhoneApp wrapper ──────────────────────────────────────────
336
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
337
+
338
+ export const app: PhoneApp = {
339
+ name: "提醒事项",
340
+ icon: "提醒",
341
+ messageDescription: "待办提醒、到期跟踪、完成确认",
342
+
343
+ onOpen(state, personDir) {
344
+ const reminders = loadReminders(personDir);
345
+ const active = reminders.filter(r => !r.completed);
346
+ const overdue = active.filter(r => isOverdue(r));
347
+ const lines = [
348
+ "═══ 提醒事项 ═══",
349
+ "",
350
+ ` 待办: ${active.length} 项${overdue.length > 0 ? ` (${overdue.length} 项逾期)` : ""}`,
351
+ "",
352
+ " 操作:",
353
+ " · 列表 — 查看所有待办",
354
+ " · 添加 <标题> — 创建提醒",
355
+ " · 完成 <id> — 标记完成",
356
+ " · 重开 <id> — 重新打开",
357
+ " · 详情 <id> — 查看详情",
358
+ " · 逾期 — 查看逾期项",
359
+ " · 搜索 <关键词> — 搜索提醒",
360
+ " · 筛选 active|completed|followup",
361
+ "",
362
+ " 返回 — 回主屏幕",
363
+ ];
364
+ return { screen: lines.join("\n"), state: state ?? {} };
365
+ },
366
+
367
+ async onAction(input, state, personDir) {
368
+ const trimmed = input.trim();
369
+ let args: any = {};
370
+
371
+ if (/^(列表|list)$/i.test(trimmed)) {
372
+ args = {};
373
+ } else if (/^(添加|add)\s+(.+)$/i.test(trimmed)) {
374
+ const m = trimmed.match(/^(?:添加|add)\s+(.+)$/i)!;
375
+ args = { add: m[1] };
376
+ } else if (/^(完成|complete)\s+(\S+)$/i.test(trimmed)) {
377
+ const m = trimmed.match(/^(?:完成|complete)\s+(\S+)$/i)!;
378
+ args = { complete: m[1] };
379
+ } else if (/^(重开|uncomplete|reopen)\s+(\S+)$/i.test(trimmed)) {
380
+ const m = trimmed.match(/^(?:重开|uncomplete|reopen)\s+(\S+)$/i)!;
381
+ args = { uncomplete: m[1] };
382
+ } else if (/^(详情|show)\s+(\S+)$/i.test(trimmed)) {
383
+ const m = trimmed.match(/^(?:详情|show)\s+(\S+)$/i)!;
384
+ args = { show: m[1] };
385
+ } else if (/^(逾期|overdue)$/i.test(trimmed)) {
386
+ args = { overdue: true };
387
+ } else if (/^(搜索|search)\s+(.+)$/i.test(trimmed)) {
388
+ const m = trimmed.match(/^(?:搜索|search)\s+(.+)$/i)!;
389
+ args = { search: m[1] };
390
+ } else if (/^(筛选|filter)\s+(\S+)$/i.test(trimmed)) {
391
+ const m = trimmed.match(/^(?:筛选|filter)\s+(\S+)$/i)!;
392
+ args = { filter: m[1] };
393
+ } else if (/^(标签|tag)\s+(\S+)\s+(\S+)$/i.test(trimmed)) {
394
+ const m = trimmed.match(/^(?:标签|tag)\s+(\S+)\s+(\S+)$/i)!;
395
+ args = { tag: m[1], _: [undefined, m[2]] };
396
+ } else if (/^(催促|nudge)\s+(\S+)$/i.test(trimmed)) {
397
+ const m = trimmed.match(/^(?:催促|nudge)\s+(\S+)$/i)!;
398
+ args = { nudge: m[1] };
399
+ }
400
+
401
+ const result = await remindersCmd(args, {}, personDir);
402
+ return { screen: result.content[0].text, state: state ?? {} };
403
+ },
404
+ };
@@ -0,0 +1,25 @@
1
+ source: reminder.ts @ fd1f7242
2
+
3
+ # Reminders -- 提醒事项
4
+
5
+ ## 功能
6
+ 待办管理,支持截止日期、优先级、follow-up 自动催促、完成/重开、标签筛选。
7
+
8
+ ## 操作
9
+ - `--add <title>` -- 新建提醒(可选 `--due`, `--priority low|normal|high|critical`, `--follow-up`, `--notes`)
10
+ - `--complete <id>` -- 标记完成
11
+ - `--uncomplete <id>` -- 重新打开
12
+ - `--due <id> <ISO>` -- 设置/修改截止日期
13
+ - `--nudge <id>` -- 手动催促(重置 follow-up 计时)
14
+ - `--tag <id> <tag>` -- 添加标签
15
+ - `--show <id>` -- 详情
16
+ - `--overdue` -- 列出所有逾期项
17
+ - `--search <q>` -- 搜索
18
+ - `--filter active|completed|followup` -- 按状态筛选
19
+ - 无参数 -- 显示逾期 + 活跃 + 完成统计
20
+
21
+ ## 数据
22
+ `{personDir}/reminders.json` -- Reminder[] JSON 数组。
23
+
24
+ ## 备注
25
+ 导出 `isOverdue`/`needsNudge` 供调度器检测催促时机。follow-up 默认间隔 60 分钟。
@@ -0,0 +1,22 @@
1
+ // apps.preinstalled/siri/siri.ts — siri tool (AI) — stub
2
+ import type { PhoneApp } from "../../system.kernel/kernel.ts";
3
+
4
+ export async function siriCmd(args: any, _ctx: any, _personDir: string): Promise<{ content: any[]; details: any }> {
5
+ return { content: [{ type: "text", text: "siri 功能尚未实现" }], details: {} };
6
+ }
7
+
8
+ // ── PhoneApp ──────────────────────────────────────────────────
9
+ export const app: PhoneApp = {
10
+ name: "Siri",
11
+ icon: "🎙",
12
+ messageDescription: "语音助手",
13
+ onOpen(_state, _personDir) {
14
+ return {
15
+ screen: "🎙 Siri\n\n功能开发中...",
16
+ state: _state ?? {},
17
+ };
18
+ },
19
+ onAction(_input, state, _personDir) {
20
+ return { screen: "🎙 Siri\n\n功能开发中...", state };
21
+ },
22
+ };
@@ -0,0 +1,15 @@
1
+ source: siri.ts @ 1a13acdf
2
+
3
+ # Siri -- 语音助手(未实现)
4
+
5
+ ## 功能
6
+ 语音助手。当前为 stub,所有调用返回"siri 功能尚未实现"。
7
+
8
+ ## 操作
9
+ 无。所有参数被忽略。
10
+
11
+ ## 数据
12
+ 无数据存储。
13
+
14
+ ## 备注
15
+ 纯 stub,导出 `siriCmd`,等待后续实现。
@@ -0,0 +1,29 @@
1
+ // apps.preinstalled/search/search.ts — 本地 SearXNG 搜索
2
+ // 零依赖,直接 HTTP 调 SearXNG
3
+
4
+ const SEARX = process.env.SEARXNG_URL || "http://127.0.0.1:8888";
5
+
6
+ export async function searchCmd(args: any, _ctx: any, _personDir: string): Promise<{ content: any[]; details: any }> {
7
+ const q = args.query || args.q || "";
8
+ if (!q) return { content: [{ type: "text", text: "search <query> — 搜索全网" }], details: {} };
9
+
10
+ try {
11
+ const url = `${SEARX}/search?q=${encodeURIComponent(q)}&format=json&categories=general&language=zh-CN`;
12
+ const r = await fetch(url, { signal: AbortSignal.timeout(10000) });
13
+ const j = await r.json() as any;
14
+ const items = j.results || [];
15
+ if (!items.length) return { content: [{ type: "text", text: `"${q}" 无结果。` }], details: {} };
16
+
17
+ const engines = [...new Set(items.map((i: any) => i.engine).filter(Boolean))];
18
+ const text = [`${q}`, `引擎: ${engines.join(", ")}`, ""];
19
+ for (const [i, item] of items.slice(0, 8).entries()) {
20
+ text.push(`[${i+1}] ${item.title}`);
21
+ text.push(` ${(item.content || item.snippet || "").slice(0, 120)}`);
22
+ text.push(` → ${item.url}`);
23
+ text.push("");
24
+ }
25
+ return { content: [{ type: "text", text: text.join("\n") }], details: { count: items.length } };
26
+ } catch (e: any) {
27
+ return { content: [{ type: "text", text: `搜索失败: ${e.message}` }], details: {} };
28
+ }
29
+ }
@@ -0,0 +1,7 @@
1
+ source: spotlight.ts
2
+
3
+ # spotlight — macOS 聚焦搜索
4
+
5
+ ## 职责
6
+ macOS Spotlight/mdfind 搜索封装。
7
+ 允许 agent 通过 Spotlight 索引搜索本地文件。