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