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.
- package/README.md +50 -0
- package/core/god.agent.capability/@ABANDONED.brain.prefrontal.monitor/gpu_monitor.py +80 -0
- package/core/god.agent.capability/@ABANDONED.brain.prefrontal.monitor/gpu_monitor.py.CHANGELOG +1 -0
- package/core/god.agent.capability/@ABANDONED.brain.prefrontal.monitor/gpu_monitor.py.SPEC +3 -0
- package/core/god.agent.capability/hands.dev.writeissue/issue.ts +209 -0
- package/core/god.agent.capability/hands.dev.writeissue/issue.ts.SPEC +26 -0
- package/core/god.agent.capability/hands.files.changewatcher/watcher.ts +44 -0
- package/core/god.agent.capability/hands.files.changewatcher/watcher.ts.SPEC +25 -0
- package/core/god.pi.mod/cli/pi-completion.zsh +21 -0
- package/core/god.pi.mod/cli/pi-completion.zsh.CHANGELOG +1 -0
- package/core/god.pi.mod/cli/pi-people.sh +264 -0
- package/core/god.pi.mod/cli/pi-people.sh.LESSON +10 -0
- package/core/god.pi.mod/cli/pi-people.sh.SPEC +31 -0
- package/core/god.pi.mod/paths.ts +47 -0
- package/core/god.pi.mod/tui.mods.blockrender/blockrender.js +90 -0
- package/core/god.pi.mod/tui.mods.blockrender/blockrender.js.SPEC +29 -0
- package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts +154 -0
- package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts.CHANGELOG +10 -0
- package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts.LESSON +12 -0
- package/core/god.pi.mod/tui.mods.footer.budget/budget_guard.ts.SPEC +26 -0
- package/core/god.pi.mod/tui.mods.footer.budget/footer-cny.CHANGELOG +39 -0
- package/core/god.pi.mod/tui.mods.viewmode/view_mode-thinking.patch +55 -0
- package/core/god.pi.mod/tui.mods.viewmode/view_mode-tools.patch +19 -0
- package/core/god.pi.mod/tui.mods.viewmode/view_mode-tools.patch.CHANGELOG +1 -0
- package/core/god.pi.mod/tui.mods.viewmode/view_mode.ts +50 -0
- package/core/god.pi.mod/tui.mods.viewmode/view_mode.ts.SPEC +12 -0
- package/core/god.pi.mod/tui.variants.userterminal/user_terminal.CHANGELOG +10 -0
- package/core/god.pi.mod/tui.variants.userterminal/user_terminal.ts +66 -0
- package/core/god.pi.mod/tui.variants.userterminal/user_terminal.ts.SPEC +31 -0
- package/core/index.ts +3 -0
- package/core/individual.bio.gene/dna.coded/coded.dna +257 -0
- package/core/individual.bio.gene/dna.coded/coded.dna.CHANGELOG +12 -0
- package/core/individual.bio.gene/dna.coded/coded.dna.SPEC +11 -0
- package/core/individual.bio.gene/dna.coded/core.dna +110 -0
- package/core/individual.bio.gene/dna.promotor/promotor.dna +117 -0
- package/core/individual.bio.gene/dna.promotor/promotor.dna.CHANGELOG +4 -0
- package/core/individual.bio.gene/dna.promotor/promotor.dna.SPEC +7 -0
- package/core/individual.bio.gene/dna.transpiler/transpiler.ts +395 -0
- package/core/individual.bio.gene/dna.transpiler/transpiler.ts.CHANGELOG +7 -0
- package/core/individual.bio.gene/dna.transpiler/transpiler.ts.SPEC +28 -0
- package/core/individual.bio.gene/gene.README +19 -0
- package/core/individual.bio.gene/rna/rna.json +536 -0
- package/core/individual.bio.gene/rna/rna.json.CHANGELOG +2 -0
- package/core/individual.bio.gene/rna/rna.json.SPEC +8 -0
- package/core/individual.bio.organs/blood.runtime/messages.ts +236 -0
- package/core/individual.bio.organs/blood.runtime/runtime.ts +173 -0
- package/core/individual.bio.organs/blood.runtime/runtime.ts.CHANGELOG +5 -0
- package/core/individual.bio.organs/blood.runtime/runtime.ts.SPEC +32 -0
- package/core/individual.bio.organs/brain.amygdala/amygdala.ts +25 -0
- package/core/individual.bio.organs/brain.amygdala/amygdala.ts.COMMENT +3 -0
- package/core/individual.bio.organs/brain.amygdala/amygdala.ts.SPEC +9 -0
- package/core/individual.bio.organs/brain.hippocampus/hippocampus-launcher.sh.template +108 -0
- package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts +166 -0
- package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts.CHANGELOG +12 -0
- package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts.LESSON +22 -0
- package/core/individual.bio.organs/brain.hippocampus/hippocampus.ts.SPEC +16 -0
- package/core/individual.bio.organs/brain.hippocampus/memory.ts +879 -0
- package/core/individual.bio.organs/brain.hippocampus/memory.ts.CHANGELOG +66 -0
- package/core/individual.bio.organs/brain.hippocampus/memory.ts.LESSON +25 -0
- package/core/individual.bio.organs/brain.hippocampus/memory.ts.SPEC +46 -0
- package/core/individual.bio.organs/brain.hippocampus/sleep.ts +139 -0
- package/core/individual.bio.organs/brain.hippocampus/sleep.ts.CHANGELOG +11 -0
- package/core/individual.bio.organs/brain.hippocampus/sleep.ts.SPEC +16 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.SPEC +44 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.ts +73 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.ts.CHANGELOG +3 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/drafting.ts.SPEC +24 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/index.ts.CHANGELOG +3 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/main.ts +13 -0
- package/core/individual.bio.organs/brain.prefrontal.drafting/main.ts.SPEC +17 -0
- package/core/individual.bio.organs/brain.senses.bioclock/bioclock.ts +94 -0
- package/core/individual.bio.organs/brain.senses.bioclock/bioclock.ts.LESSON +13 -0
- package/core/individual.bio.organs/brain.senses.bioclock/bioclock.ts.SPEC +20 -0
- package/core/individual.bio.organs/brain.senses.subconscious/feed-format.SPEC +56 -0
- package/core/individual.bio.organs/brain.senses.subconscious/index.ts.CHANGELOG +13 -0
- package/core/individual.bio.organs/brain.senses.subconscious/spawner.ts +130 -0
- package/core/individual.bio.organs/brain.senses.subconscious/spawner.ts.SPEC +13 -0
- package/core/individual.bio.organs/brain.senses.subconscious/subconscious.ts +280 -0
- package/core/individual.bio.organs/brain.senses.subconscious/subconscious.ts.CHANGELOG +7 -0
- package/core/individual.bio.organs/brain.senses.subconscious/tools.ts +180 -0
- package/core/individual.bio.organs/brain.senses.subconscious/tools.ts.SPEC +3 -0
- package/core/individual.bio.organs/ears.listen/config.json +9 -0
- package/core/individual.bio.organs/ears.listen/config.json.CHANGELOG +1 -0
- package/core/individual.bio.organs/ears.listen/config.json.SPEC +3 -0
- package/core/individual.bio.organs/ears.listen/ears.ts.CHANGELOG +48 -0
- package/core/individual.bio.organs/ears.listen/ears_recorder.py.CHANGELOG +6 -0
- package/core/individual.bio.organs/ears.listen/index.ts +1 -0
- package/core/individual.bio.organs/ears.listen/index.ts.SPEC +16 -0
- package/core/individual.bio.organs/ears.listen/listen.ts +208 -0
- package/core/individual.bio.organs/ears.listen/listen.ts.SPEC +3 -0
- package/core/individual.bio.organs/ears.listen/listen_recorder.py +445 -0
- package/core/individual.bio.organs/ears.listen/listen_recorder.py.SPEC +7 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/__init__.py +0 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/common/__init__.py +0 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/common/events_pb2.py +38 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/common/events_pb2_grpc.py +24 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/common/rpcmeta_pb2.py +42 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/common/rpcmeta_pb2_grpc.py +24 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/__init__.py +0 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/__init__.py +0 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/ast/__init__.py +0 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/ast/ast_service_pb2.py +45 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/ast/ast_service_pb2_grpc.py +97 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/base/__init__.py +0 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/base/au_base_pb2.py +80 -0
- package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/base/au_base_pb2_grpc.py +24 -0
- package/core/individual.bio.organs/hands.fileactions/authorize.TRUST +1 -0
- package/core/individual.bio.organs/hands.fileactions/authorize.ts +70 -0
- package/core/individual.bio.organs/hands.fileactions/authorize.ts.CHANGELOG +1 -0
- package/core/individual.bio.organs/hands.fileactions/authorize.ts.SPEC +3 -0
- package/core/individual.bio.organs/hands.fileactions/dir.README +13 -0
- package/core/individual.bio.organs/hands.fileactions/file_rules.json +23 -0
- package/core/individual.bio.organs/hands.fileactions/fileactions.README +12 -0
- package/core/individual.bio.organs/hands.fileactions/fileactions.ts +540 -0
- package/core/individual.bio.organs/hands.fileactions/fileactions.ts.CHANGELOG +25 -0
- package/core/individual.bio.organs/hands.fileactions/fileactions.ts.SPEC +30 -0
- package/core/individual.bio.organs/hands.fileactions/filewatch.ts +66 -0
- package/core/individual.bio.organs/hands.fileactions/filewatch.ts.SPEC +3 -0
- package/core/individual.bio.organs/hands.main/main.ts +18 -0
- package/core/individual.bio.organs/hands.main/main.ts.SPEC +20 -0
- package/core/individual.bio.organs/hands.sensitive/sensitive.ts +24 -0
- package/core/individual.bio.organs/hands.sensitive/sensitive.ts.CHANGELOG +2 -0
- package/core/individual.bio.organs/hands.sensitive/sensitive.ts.SPEC +3 -0
- package/core/individual.bio.organs/heart.interrupt/agent_start-loader-flicker.patch +13 -0
- package/core/individual.bio.organs/heart.interrupt/interactive-mode-loader.patch +11 -0
- package/core/individual.bio.organs/heart.interrupt/runner_esc.patch +10 -0
- package/core/individual.bio.organs/heart.interrupt/runner_esc.patch.SPEC +9 -0
- package/core/individual.bio.organs/heart.kernel/kernel.ts +253 -0
- package/core/individual.bio.organs/heart.kernel/kernel.ts.CHANGELOG +13 -0
- package/core/individual.bio.organs/heart.kernel/kernel.ts.SPEC +23 -0
- package/core/individual.bio.organs/heart.main/heart.main.CHANGELOG +43 -0
- package/core/individual.bio.organs/heart.main/heartbeat.ts +494 -0
- package/core/individual.bio.organs/heart.main/heartbeat.ts.LESSON +43 -0
- package/core/individual.bio.organs/heart.main/main.ts +8 -0
- package/core/individual.bio.organs/heart.main/main.ts.SPEC +19 -0
- package/core/individual.bio.organs/heart.main/process.ts +122 -0
- package/core/individual.bio.organs/heart.main/process.ts.CHANGELOG +2 -0
- package/core/individual.bio.organs/heart.main/process.ts.SPEC +24 -0
- package/core/individual.bio.organs/heart.main/remove_timeout.patch +110 -0
- package/core/individual.bio.organs/heart.main/stop.ts.CHANGELOG +3 -0
- package/core/individual.bio.organs/heart.main/stop.ts.SPEC +28 -0
- package/core/individual.bio.organs/mouth.speak/index.ts +1 -0
- package/core/individual.bio.organs/mouth.speak/index.ts.CHANGELOG +1 -0
- package/core/individual.bio.organs/mouth.speak/index.ts.SPEC +6 -0
- package/core/individual.bio.organs/mouth.speak/mouth.ts.CHANGELOG +15 -0
- package/core/individual.bio.organs/mouth.speak/mouth_recorder.py.CHANGELOG +1 -0
- package/core/individual.bio.organs/mouth.speak/speak.ts +180 -0
- package/core/individual.bio.organs/mouth.speak/speak.ts.SPEC +3 -0
- package/core/individual.bio.organs/mouth.speak/speak_recorder.py +35 -0
- package/core/individual.bio.organs/mouth.speak/speak_recorder.py.SPEC +3 -0
- package/core/individual.bio.organs/organs.README +110 -0
- package/core/package-lock.json +18 -0
- package/core/package.json +35 -0
- package/core/prompts/prompts.json +77 -0
- package/core/prompts/prompts.ts +44 -0
- package/core/prompts/prompts.ts.SPEC +9 -0
- package/core/society.world/.gitkeep +0 -0
- package/core/society.world/accessibility.claudecode/message-service.cjs +217 -0
- package/core/society.world/accessibility.claudecode/message-service.cjs.SPEC +7 -0
- package/core/society.world/accessibility.claudecode/send.ts +34 -0
- package/core/society.world/dollar.distribution.ubi/ubi.ts +55 -0
- package/core/society.world/dollar.main/dollar-service.cjs +185 -0
- package/core/society.world/dollar.main/main.ts +116 -0
- package/core/society.world/dollar.transaction/transaction.ts +71 -0
- package/core/society.world/space/space.ts +206 -0
- package/core/society.world/space/space.ts.SPEC +30 -0
- package/core/technology.laptop/#agent.macos.BLUEPRINT +278 -0
- package/core/technology.phone/apps.preinstalled/albums.FUTURE/albums.ts +69 -0
- package/core/technology.phone/apps.preinstalled/albums.FUTURE/albums.ts.SPEC +15 -0
- package/core/technology.phone/apps.preinstalled/calendar/calendar.ts +406 -0
- package/core/technology.phone/apps.preinstalled/calendar/calendar.ts.SPEC +22 -0
- package/core/technology.phone/apps.preinstalled/calendar/holiday-calendar.ts +529 -0
- package/core/technology.phone/apps.preinstalled/clock/clock.ts +132 -0
- package/core/technology.phone/apps.preinstalled/clock/clock.ts.SPEC +11 -0
- package/core/technology.phone/apps.preinstalled/contacts.FUTURE/contacts.ts +300 -0
- package/core/technology.phone/apps.preinstalled/contacts.FUTURE/contacts.ts.SPEC +22 -0
- package/core/technology.phone/apps.preinstalled/developer.FUTURE/developer.ts +22 -0
- package/core/technology.phone/apps.preinstalled/developer.FUTURE/developer.ts.SPEC +15 -0
- package/core/technology.phone/apps.preinstalled/notes/notes.ts +239 -0
- package/core/technology.phone/apps.preinstalled/notes/notes.ts.SPEC +21 -0
- package/core/technology.phone/apps.preinstalled/polymarket/polymarket.ts +261 -0
- package/core/technology.phone/apps.preinstalled/polymarket/polymarket.ts.SPEC +7 -0
- package/core/technology.phone/apps.preinstalled/reminder/reminder.ts +404 -0
- package/core/technology.phone/apps.preinstalled/reminder/reminder.ts.SPEC +25 -0
- package/core/technology.phone/apps.preinstalled/siri.FUTURE/siri.ts +22 -0
- package/core/technology.phone/apps.preinstalled/siri.FUTURE/siri.ts.SPEC +15 -0
- package/core/technology.phone/apps.preinstalled/spotlight/spotlight.ts +29 -0
- package/core/technology.phone/apps.preinstalled/spotlight/spotlight.ts.SPEC +7 -0
- package/core/technology.phone/apps.preinstalled/steam/chess.ts +230 -0
- package/core/technology.phone/apps.preinstalled/steam/snake.ts +100 -0
- package/core/technology.phone/apps.preinstalled/steam/snake.ts.SPEC +7 -0
- package/core/technology.phone/apps.preinstalled/steam/spy-cmd.ts +4 -0
- package/core/technology.phone/apps.preinstalled/steam/spy-tool.ts +56 -0
- package/core/technology.phone/apps.preinstalled/steam/spy.ts +302 -0
- package/core/technology.phone/apps.preinstalled/steam/steam.ts +299 -0
- package/core/technology.phone/apps.preinstalled/weather/weather.ts +50 -0
- package/core/technology.phone/apps.preinstalled/weather/weather.ts.SPEC +9 -0
- package/core/technology.phone/apps.preinstalled/wechat/imessage.ts +423 -0
- package/core/technology.phone/apps.preinstalled/wechat/imessage.ts.SPEC +24 -0
- package/core/technology.phone/apps.system/appstore/appstore.ts +22 -0
- package/core/technology.phone/apps.system/appstore/appstore.ts.SPEC +15 -0
- package/core/technology.phone/apps.system/finder.FUTURE/finder.ts +64 -0
- package/core/technology.phone/apps.system/finder.FUTURE/finder.ts.SPEC +8 -0
- package/core/technology.phone/apps.system/safari/safari-app.ts +146 -0
- package/core/technology.phone/apps.system/safari/safari.ts.SPEC +24 -0
- package/core/technology.phone/apps.system/settings/settings.ts +126 -0
- package/core/technology.phone/apps.system/settings/settings.ts.SPEC +17 -0
- package/core/technology.phone/apps.system/tips/tips.ts +22 -0
- package/core/technology.phone/apps.system/tips/tips.ts.SPEC +15 -0
- package/core/technology.phone/apps.thirdparty/alipay/alipay.ts +148 -0
- package/core/technology.phone/apps.thirdparty/alipay/alipay.ts.SPEC +7 -0
- package/core/technology.phone/apps.thirdparty/bilibili/bilibili-app.ts +33 -0
- package/core/technology.phone/apps.thirdparty/bilibili/bilibili.ts +142 -0
- package/core/technology.phone/apps.thirdparty/bilibili/bilibili.ts.SPEC +22 -0
- package/core/technology.phone/apps.thirdparty/wechatread/wechatread.ts +80 -0
- package/core/technology.phone/apps.thirdparty/wechatread/wechatread.ts.SPEC +15 -0
- package/core/technology.phone/index.ts +1 -0
- package/core/technology.phone/package.json +2 -0
- package/core/technology.phone/system.homepage/homepage.ts +247 -0
- package/core/technology.phone/system.homepage/homepage.ts.SPEC +22 -0
- package/core/technology.phone/system.kernel/kernel.ts +264 -0
- package/core/technology.phone/system.kernel/kernel.ts.SPEC +7 -0
- package/core/technology.phone/system.notifications/notifications.ts +87 -0
- package/core/technology.phone/system.notifications/notifications.ts.SPEC +7 -0
- package/core/technology.phone/system.share/share.ts +46 -0
- package/core/technology.phone/system.share/share.ts.SPEC +7 -0
- package/core/technology.server/browser-service.cjs +152 -0
- package/core/technology.server/data/cookies/arxiv.json +30 -0
- package/core/technology.server/data/cookies/bili.json +184 -0
- package/core/technology.server/data/cookies/default.json +30 -0
- package/core/technology.server/data/cookies/news.json +113 -0
- package/core/technology.server/data/cookies/s1.json +45 -0
- package/core/technology.server/data/cookies/safari.json +184 -0
- package/core/technology.server/data/cookies/safari2.json +1 -0
- package/core/technology.server/data/cookies/safaridbg.json +1 -0
- package/core/technology.server/data/cookies/search.json +45 -0
- package/core/technology.server/data/cookies/sw.json +30 -0
- package/core/technology.server/data/cookies/t1.json +1 -0
- package/core/technology.server/data/cookies/testread.json +1 -0
- package/core/technology.server/data/cookies/video1.json +113 -0
- package/core/technology.server/data/cookies/yt.json +170 -0
- package/core/technology.server/data/cookies/yt2.json +113 -0
- package/core/technology.server/pikipedia/#pikipedia.BLUEPRINT +106 -0
- package/core/technology.server/playleft.cjs +247 -0
- package/core/technology.server/search-proxy.py +76 -0
- package/core/technology.server/server.README +59 -0
- package/deploy/dist-overrides/cli/cli.js +18 -0
- package/deploy/dist-overrides/core/extensions/loader.js +518 -0
- package/deploy/dist-overrides/core/package-manager.js +2081 -0
- package/deploy/dist-overrides/core/system-prompt.js +109 -0
- package/deploy/dist-overrides/core/system-prompt.js.LESSON +17 -0
- package/deploy/dist-overrides/core/tools/bash.js +353 -0
- package/deploy/dist-overrides/core/tools/bash.js.CHANGELOG +2 -0
- package/deploy/dist-overrides/core/tools/edit-diff.js +345 -0
- package/deploy/dist-overrides/core/tools/edit.js +315 -0
- package/deploy/dist-overrides/core/tools/edit.js.CHANGELOG +1 -0
- package/deploy/dist-overrides/core/tools/file-mutation-queue.js +52 -0
- package/deploy/dist-overrides/core/tools/find.js +298 -0
- package/deploy/dist-overrides/core/tools/find.js.CHANGELOG +1 -0
- package/deploy/dist-overrides/core/tools/grep.js +305 -0
- package/deploy/dist-overrides/core/tools/grep.js.CHANGELOG +1 -0
- package/deploy/dist-overrides/core/tools/index.js +112 -0
- package/deploy/dist-overrides/core/tools/ls-guard.js +4 -0
- package/deploy/dist-overrides/core/tools/ls.js +170 -0
- package/deploy/dist-overrides/core/tools/ls.js.CHANGELOG +1 -0
- package/deploy/dist-overrides/core/tools/output-accumulator.js +184 -0
- package/deploy/dist-overrides/core/tools/path-utils.js +99 -0
- package/deploy/dist-overrides/core/tools/prompts-reader.js +53 -0
- package/deploy/dist-overrides/core/tools/read.js +392 -0
- package/deploy/dist-overrides/core/tools/read.js.CHANGELOG +1 -0
- package/deploy/dist-overrides/core/tools/render-utils.js +65 -0
- package/deploy/dist-overrides/core/tools/tool-definition-wrapper.js +34 -0
- package/deploy/dist-overrides/core/tools/truncate.js +215 -0
- package/deploy/dist-overrides/core/tools/write.js +203 -0
- package/deploy/dist-overrides/core/tools/write.js.CHANGELOG +1 -0
- package/deploy/dist-overrides/dist-overrides.README +18 -0
- package/deploy/dist-overrides/main.js +665 -0
- package/deploy/dist-overrides/modes/interactive/components/assistant-message.js +139 -0
- package/deploy/dist-overrides/modes/interactive/components/footer.js +326 -0
- package/deploy/dist-overrides/modes/interactive/components/model-selector.js +285 -0
- package/deploy/dist-overrides/modes/interactive/components/tool-execution.js +383 -0
- package/deploy/dist-overrides/modes/interactive/components/tool-execution.js.CHANGELOG +3 -0
- package/deploy/dist-overrides/modes/interactive/interactive-mode.js +4781 -0
- package/deploy/dist-overrides/pi-ai/providers/anthropic.js +931 -0
- package/deploy/dist-overrides/pi-ai/providers/openai-completions.js +1007 -0
- package/deploy/dist-overrides/pi-ai/providers/openai-completions.js.LESSON +15 -0
- package/deploy/dist-overrides/pi-tui/components/loader.js +69 -0
- package/deploy/dist-overrides/pi-tui/components/markdown.js +646 -0
- package/deploy/dist-overrides/pi-tui/components/text.js +92 -0
- package/deploy/dist-overrides/pi-tui/custom-message.js +75 -0
- package/deploy/dist-overrides/pi-tui/tui.js +1266 -0
- package/deploy/dist-overrides/pi-tui/utils.js +1060 -0
- package/deploy/dist-overrides/vendor.REMOVED/jiti/lib/jiti.mjs +3 -0
- package/deploy/install.sh +186 -0
- package/deploy/install.sh.CHANGELOG +6 -0
- package/deploy/lint/lint-naming.ts +202 -0
- package/deploy/scripts/apply.js +18 -0
- package/deploy/scripts/build-github.sh +219 -0
- package/deploy/scripts/build-phone.sh +24 -0
- package/deploy/scripts/check-deploy.sh +42 -0
- package/deploy/scripts/migrate-context.sh +72 -0
- package/deploy/scripts/patch-pi-dist.js +39 -0
- package/deploy/scripts/uninstall.sh +34 -0
- package/package.json +18 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
// playleft.js — 极简 CDP 客户端,零依赖,替代 Playwright
|
|
2
|
+
// 直接用 Node.js 原生 WebSocket 控制 Chromium
|
|
3
|
+
|
|
4
|
+
const { spawn } = require("child_process");
|
|
5
|
+
const http = require("http");
|
|
6
|
+
// Node 22+ 原生 WebSocket,零依赖
|
|
7
|
+
|
|
8
|
+
let _msgId = 0;
|
|
9
|
+
|
|
10
|
+
class PlayleftPage {
|
|
11
|
+
constructor(ws, targetId) {
|
|
12
|
+
this._ws = ws;
|
|
13
|
+
this._targetId = targetId;
|
|
14
|
+
this._callbacks = new Map();
|
|
15
|
+
this._eventHandlers = [];
|
|
16
|
+
this._ws.onmessage = (evt) => {
|
|
17
|
+
const raw = typeof evt.data === "string" ? evt.data : evt.data.toString();
|
|
18
|
+
const msg = JSON.parse(raw);
|
|
19
|
+
if (msg.id && this._callbacks.has(msg.id)) {
|
|
20
|
+
const cb = this._callbacks.get(msg.id);
|
|
21
|
+
this._callbacks.delete(msg.id);
|
|
22
|
+
if (msg.error) cb.reject(new Error(msg.error.message));
|
|
23
|
+
else cb.resolve(msg.result);
|
|
24
|
+
}
|
|
25
|
+
for (const h of this._eventHandlers) h(msg);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
_send(method, params = {}) {
|
|
30
|
+
const id = ++_msgId;
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
this._callbacks.set(id, { resolve, reject });
|
|
33
|
+
this._ws.send(JSON.stringify({ id, method, params }));
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
if (this._callbacks.has(id)) {
|
|
36
|
+
this._callbacks.delete(id);
|
|
37
|
+
reject(new Error(`timeout: ${method}`));
|
|
38
|
+
}
|
|
39
|
+
}, 30000);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async goto(url) {
|
|
44
|
+
await this._send("Page.enable");
|
|
45
|
+
const nav = new Promise((resolve) => {
|
|
46
|
+
const handler = (msg) => {
|
|
47
|
+
if (msg.method === "Page.loadEventFired") {
|
|
48
|
+
this._eventHandlers = this._eventHandlers.filter(h => h !== handler);
|
|
49
|
+
resolve();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this._eventHandlers.push(handler);
|
|
53
|
+
setTimeout(resolve, 20000);
|
|
54
|
+
});
|
|
55
|
+
await this._send("Page.navigate", { url });
|
|
56
|
+
await nav;
|
|
57
|
+
// 额外等一下动态内容
|
|
58
|
+
await new Promise(r => setTimeout(r, 1500));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async title() {
|
|
62
|
+
const r = await this._send("Runtime.evaluate", { expression: "document.title" });
|
|
63
|
+
return r.result?.value || "";
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async url() {
|
|
67
|
+
const r = await this._send("Runtime.evaluate", { expression: "location.href" });
|
|
68
|
+
return r.result?.value || "";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async text(limit = 5000) {
|
|
72
|
+
const r = await this._send("Runtime.evaluate", {
|
|
73
|
+
expression: `document.body.innerText.slice(0, ${limit})`
|
|
74
|
+
});
|
|
75
|
+
return r.result?.value || "";
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async eval(expression) {
|
|
79
|
+
const r = await this._send("Runtime.evaluate", {
|
|
80
|
+
expression, returnByValue: true
|
|
81
|
+
});
|
|
82
|
+
if (r.exceptionDetails) throw new Error(r.exceptionDetails.text || "eval error");
|
|
83
|
+
return r.result?.value;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async links(limit = 30) {
|
|
87
|
+
return await this.eval(`
|
|
88
|
+
JSON.stringify([...document.querySelectorAll("a[href]")].slice(0, ${limit}).map(a => ({
|
|
89
|
+
text: (a.innerText || "").trim().slice(0, 60),
|
|
90
|
+
href: a.href
|
|
91
|
+
})))
|
|
92
|
+
`).then(JSON.parse);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async search(query) {
|
|
96
|
+
return await this.eval(`
|
|
97
|
+
document.body.innerText.split("\\n").filter(l => l.includes(${JSON.stringify(query)})).slice(0, 20).join("\\n")
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async click(selector) {
|
|
102
|
+
const r = await this._send("Runtime.evaluate", {
|
|
103
|
+
expression: `(() => {
|
|
104
|
+
const el = document.querySelector(${JSON.stringify(selector)});
|
|
105
|
+
if (!el) return "not_found";
|
|
106
|
+
el.click();
|
|
107
|
+
return "ok";
|
|
108
|
+
})()`
|
|
109
|
+
});
|
|
110
|
+
if (r.result?.value === "not_found") throw new Error(`未找到: ${selector}`);
|
|
111
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async type(selector, text) {
|
|
115
|
+
await this._send("Runtime.evaluate", {
|
|
116
|
+
expression: `(() => {
|
|
117
|
+
const el = document.querySelector(${JSON.stringify(selector)});
|
|
118
|
+
if (!el) throw new Error("not found");
|
|
119
|
+
el.focus();
|
|
120
|
+
el.value = ${JSON.stringify(text)};
|
|
121
|
+
el.dispatchEvent(new Event("input", {bubbles: true}));
|
|
122
|
+
el.dispatchEvent(new Event("change", {bubbles: true}));
|
|
123
|
+
})()`
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async scroll(direction = "down", amount = 500) {
|
|
128
|
+
const y = direction === "up" ? -amount : amount;
|
|
129
|
+
await this._send("Runtime.evaluate", {
|
|
130
|
+
expression: `window.scrollBy(0, ${y})`
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async accessibility() {
|
|
135
|
+
try {
|
|
136
|
+
const r = await this._send("Accessibility.getFullAXTree", { max_depth: 4 });
|
|
137
|
+
return r.nodes || [];
|
|
138
|
+
} catch {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async getCookies() {
|
|
144
|
+
await this._send("Network.enable");
|
|
145
|
+
const r = await this._send("Network.getCookies");
|
|
146
|
+
return r.cookies || [];
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
async setCookies(cookies) {
|
|
150
|
+
await this._send("Network.enable");
|
|
151
|
+
for (const c of cookies) {
|
|
152
|
+
await this._send("Network.setCookie", {
|
|
153
|
+
name: c.name, value: c.value, domain: c.domain,
|
|
154
|
+
path: c.path || "/", httpOnly: c.httpOnly ?? false,
|
|
155
|
+
secure: c.secure ?? false,
|
|
156
|
+
...(c.expires ? { expires: c.expires } : {}),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async close() {
|
|
162
|
+
try { this._ws.close(); } catch {}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
class PlayleftBrowser {
|
|
167
|
+
constructor(process, wsUrl) {
|
|
168
|
+
this._process = process;
|
|
169
|
+
this._wsUrl = wsUrl;
|
|
170
|
+
this._pages = [];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async newPage() {
|
|
174
|
+
// 获取 targets
|
|
175
|
+
const debugUrl = this._wsUrl.replace("ws://", "http://").replace(/\/devtools.*/, "");
|
|
176
|
+
const targets = await new Promise((resolve, reject) => {
|
|
177
|
+
const req = http.request(`${debugUrl}/json/new`, { method: "PUT" }, (res) => {
|
|
178
|
+
let data = "";
|
|
179
|
+
res.on("data", c => data += c);
|
|
180
|
+
res.on("end", () => {
|
|
181
|
+
try {
|
|
182
|
+
// Chromium 有时在 JSON 前输出警告,提取第一个 { 开始的部分
|
|
183
|
+
const jsonStart = data.indexOf("{");
|
|
184
|
+
const jsonData = jsonStart >= 0 ? data.slice(jsonStart) : data;
|
|
185
|
+
resolve(JSON.parse(jsonData));
|
|
186
|
+
} catch (e) { reject(new Error(`JSON parse failed: ${data.slice(0, 100)}`)); }
|
|
187
|
+
});
|
|
188
|
+
}).on("error", reject);
|
|
189
|
+
req.end();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
const wsUrl = targets.webSocketDebuggerUrl;
|
|
193
|
+
const ws = new WebSocket(wsUrl);
|
|
194
|
+
await new Promise((resolve, reject) => {
|
|
195
|
+
ws.onopen = resolve;
|
|
196
|
+
ws.onerror = reject;
|
|
197
|
+
setTimeout(() => reject(new Error("ws connect timeout")), 5000);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
const page = new PlayleftPage(ws, targets.id);
|
|
201
|
+
this._pages.push(page);
|
|
202
|
+
return page;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async close() {
|
|
206
|
+
for (const p of this._pages) await p.close().catch(() => {});
|
|
207
|
+
try { this._process.kill(); } catch {}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
async function launch(options = {}) {
|
|
212
|
+
const chromePath = options.executablePath || process.env.CHROMIUM_PATH || "chromium-browser";
|
|
213
|
+
const port = options.port || 9333;
|
|
214
|
+
|
|
215
|
+
const args = [
|
|
216
|
+
"--headless", `--remote-debugging-port=${port}`,
|
|
217
|
+
"--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage",
|
|
218
|
+
"--disable-gpu", "--no-first-run", "--disable-extensions",
|
|
219
|
+
"--window-size=1280,800",
|
|
220
|
+
...(options.args || []),
|
|
221
|
+
];
|
|
222
|
+
|
|
223
|
+
const proc = spawn(chromePath, args, { stdio: "ignore" });
|
|
224
|
+
|
|
225
|
+
// 等 CDP 端口就绪
|
|
226
|
+
for (let i = 0; i < 30; i++) {
|
|
227
|
+
try {
|
|
228
|
+
const data = await new Promise((resolve, reject) => {
|
|
229
|
+
http.get(`http://127.0.0.1:${port}/json/version`, (res) => {
|
|
230
|
+
let d = "";
|
|
231
|
+
res.on("data", c => d += c);
|
|
232
|
+
res.on("end", () => {
|
|
233
|
+
const jsonStart = d.indexOf("{");
|
|
234
|
+
resolve(JSON.parse(jsonStart >= 0 ? d.slice(jsonStart) : d));
|
|
235
|
+
});
|
|
236
|
+
}).on("error", reject);
|
|
237
|
+
});
|
|
238
|
+
return new PlayleftBrowser(proc, data.webSocketDebuggerUrl);
|
|
239
|
+
} catch {
|
|
240
|
+
await new Promise(r => setTimeout(r, 300));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
proc.kill();
|
|
244
|
+
throw new Error("Chromium 启动超时");
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
module.exports = { launch, PlayleftBrowser, PlayleftPage };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""轻量 Google 搜索代理 — 用 Chrome cookie 绕过反爬"""
|
|
3
|
+
import sqlite3, shutil, os, tempfile, json, re, sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from urllib.parse import urlencode
|
|
6
|
+
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
7
|
+
import requests
|
|
8
|
+
|
|
9
|
+
PORT = int(os.environ.get("SEARCH_PORT", "8889"))
|
|
10
|
+
COOKIE_DB = Path.home() / "Library/Application Support/Google/Chrome/Default/Cookies"
|
|
11
|
+
|
|
12
|
+
def load_cookies():
|
|
13
|
+
if not COOKIE_DB.exists():
|
|
14
|
+
return {}
|
|
15
|
+
tmp = tempfile.mktemp(suffix=".sqlite")
|
|
16
|
+
shutil.copy2(COOKIE_DB, tmp)
|
|
17
|
+
try:
|
|
18
|
+
conn = sqlite3.connect(tmp)
|
|
19
|
+
rows = conn.execute("SELECT host_key, name, value FROM cookies WHERE host_key LIKE '%google%'").fetchall()
|
|
20
|
+
return {name: value for _, name, value in rows}
|
|
21
|
+
finally:
|
|
22
|
+
os.unlink(tmp)
|
|
23
|
+
|
|
24
|
+
HEADERS = {
|
|
25
|
+
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
|
|
26
|
+
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
27
|
+
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
def search_google(query: str, num: int = 8) -> list:
|
|
31
|
+
params = {"q": query, "num": num, "hl": "zh-CN"}
|
|
32
|
+
cookies = load_cookies()
|
|
33
|
+
if not cookies:
|
|
34
|
+
return [{"title": "错误", "url": "", "snippet": "无法读取 Chrome cookie——请先登录 Google"}]
|
|
35
|
+
try:
|
|
36
|
+
r = requests.get("https://www.google.com/search", params=params, headers=HEADERS, cookies=cookies, timeout=8)
|
|
37
|
+
if r.status_code != 200:
|
|
38
|
+
return [{"title": f"Google 返回 {r.status_code}", "url": "", "snippet": ""}]
|
|
39
|
+
# 简单 HTML 提取
|
|
40
|
+
results = []
|
|
41
|
+
# 匹配: <a href="/url?q=REAL_URL" ...><h3>TITLE</h3></a> ... <div ...>SNIPPET</div>
|
|
42
|
+
blocks = re.findall(r'<a[^>]*href="/url\?q=([^"&]+)[^"]*"[^>]*>(.*?)</a>(.*?)<div[^>]*class="[^"]*BNeawe[^"]*"[^>]*>(.*?)</div>', r.text, re.DOTALL)
|
|
43
|
+
for url, title_html, _, snippet in blocks[:num]:
|
|
44
|
+
title = re.sub(r'<[^>]+>', '', title_html)
|
|
45
|
+
if not title.strip():
|
|
46
|
+
continue
|
|
47
|
+
results.append({
|
|
48
|
+
"title": title.strip(),
|
|
49
|
+
"url": url,
|
|
50
|
+
"snippet": re.sub(r'<[^>]+>', '', snippet).strip()[:200]
|
|
51
|
+
})
|
|
52
|
+
return results or [{"title": "无结果", "url": "", "snippet": f"页面长度: {len(r.text)}"}]
|
|
53
|
+
except Exception as e:
|
|
54
|
+
return [{"title": "搜索异常", "url": "", "snippet": str(e)}]
|
|
55
|
+
|
|
56
|
+
class Handler(BaseHTTPRequestHandler):
|
|
57
|
+
def do_GET(self):
|
|
58
|
+
if self.path.startswith("/search"):
|
|
59
|
+
q = self.path.split("?q=")[-1].split("&")[0] if "?q=" in self.path else ""
|
|
60
|
+
from urllib.parse import unquote
|
|
61
|
+
q = unquote(q)
|
|
62
|
+
results = search_google(q)
|
|
63
|
+
self.send_response(200)
|
|
64
|
+
self.send_header("Content-Type", "application/json")
|
|
65
|
+
self.end_headers()
|
|
66
|
+
self.wfile.write(json.dumps({"query": q, "results": results}, ensure_ascii=False).encode())
|
|
67
|
+
else:
|
|
68
|
+
self.send_response(200)
|
|
69
|
+
self.send_header("Content-Type", "text/plain")
|
|
70
|
+
self.end_headers()
|
|
71
|
+
self.wfile.write(b'Google Search Proxy - GET /search?q=QUERY')
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
server = HTTPServer(("127.0.0.1", PORT), Handler)
|
|
75
|
+
print(f"🔍 Google 搜索代理启动: http://127.0.0.1:{PORT}/search?q=test")
|
|
76
|
+
server.serve_forever()
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# technology.server — 云端/本地服务
|
|
2
|
+
|
|
3
|
+
agent 使用的后端基础设施。phone app 调用这些服务获取能力。
|
|
4
|
+
|
|
5
|
+
## browser-service(浏览器服务)
|
|
6
|
+
|
|
7
|
+
用 playleft(自写零依赖 CDP 客户端)控制 headless Chrome,为 agent 提供动态网页访问能力。
|
|
8
|
+
|
|
9
|
+
### 架构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
phone app (Safari 等)
|
|
13
|
+
→ HTTP POST http://localhost:9222
|
|
14
|
+
→ browser-service.cjs
|
|
15
|
+
→ playleft.cjs (WebSocket CDP)
|
|
16
|
+
→ Chrome headless
|
|
17
|
+
→ 网页
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 启动
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 本地(默认,用系统 Chrome)
|
|
24
|
+
CHROMIUM_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" node browser-service.cjs
|
|
25
|
+
|
|
26
|
+
# 云服务器
|
|
27
|
+
CHROMIUM_PATH=/usr/bin/chromium-browser BROWSER_PORT=9222 node browser-service.cjs
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 切换本地/云端
|
|
31
|
+
|
|
32
|
+
pi-coding-master 通过环境变量 `PI_BROWSER` 切换:
|
|
33
|
+
- 不设 = 默认 `http://localhost:9222`(本地)
|
|
34
|
+
- `PI_BROWSER=http://your-server:9222`(云端)
|
|
35
|
+
|
|
36
|
+
### API
|
|
37
|
+
|
|
38
|
+
POST JSON,所有操作通过 `action` 字段区分:
|
|
39
|
+
|
|
40
|
+
| action | 参数 | 说明 |
|
|
41
|
+
|--------|------|------|
|
|
42
|
+
| open | url | 打开网页(执行 JS,等待加载) |
|
|
43
|
+
| text | limit? | 读取页面全部文字 |
|
|
44
|
+
| links | limit? | 列出链接 |
|
|
45
|
+
| search | query | 在页面内搜索文字 |
|
|
46
|
+
| click | selector | 点击元素 |
|
|
47
|
+
| type | selector, text | 输入文字 |
|
|
48
|
+
| scroll | direction?, amount? | 滚动 |
|
|
49
|
+
| back | | 后退 |
|
|
50
|
+
| url | | 当前 URL |
|
|
51
|
+
| cookie_import | cookies[] | 导入 cookies |
|
|
52
|
+
| cookie_export | | 导出 cookies |
|
|
53
|
+
| close | | 关闭页面 |
|
|
54
|
+
|
|
55
|
+
### 文件
|
|
56
|
+
|
|
57
|
+
- `playleft.cjs` — 零依赖 CDP 客户端(~200行),直接用 Node 原生 WebSocket 控制 Chrome
|
|
58
|
+
- `browser-service.cjs` — HTTP API 包装,cookie 持久化
|
|
59
|
+
- `data/cookies/` — 自动生成,per-session cookie 存储
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --experimental-transform-types
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for the refactored coding agent.
|
|
4
|
+
* Uses main.ts with AgentSession and new mode modules.
|
|
5
|
+
*
|
|
6
|
+
* Test with: npx tsx src/cli-new.ts [args...]
|
|
7
|
+
*/
|
|
8
|
+
import { APP_NAME } from "./config.js";
|
|
9
|
+
import { configureHttpDispatcher } from "./core/http-dispatcher.js";
|
|
10
|
+
import { main } from "./main.js";
|
|
11
|
+
process.title = APP_NAME;
|
|
12
|
+
process.env.PI_CODING_AGENT = "true";
|
|
13
|
+
process.emitWarning = (() => { });
|
|
14
|
+
// Configure undici's global dispatcher before provider SDKs issue requests.
|
|
15
|
+
// Runtime settings are applied once SettingsManager has loaded global/project settings.
|
|
16
|
+
configureHttpDispatcher();
|
|
17
|
+
main(process.argv.slice(2));
|
|
18
|
+
//# sourceMappingURL=cli.js.map
|