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,445 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""ear_recorder.py — 麦克风 → 豆包 ASR → ear_output.jsonl
|
|
3
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
4
|
+
不依赖 Local_24h_Note 的任何代码或数据。直接通过 PyAudio 采集
|
|
5
|
+
麦克风,调用豆包同传 API,转录结果写入 ear_output.jsonl。
|
|
6
|
+
|
|
7
|
+
用法:
|
|
8
|
+
python3 ear_recorder.py <output_jsonl_path>
|
|
9
|
+
output_jsonl_path: ~/.pi/memory/<id>/.data/ear_output.jsonl
|
|
10
|
+
|
|
11
|
+
凭证:
|
|
12
|
+
DOUBAO_APP_KEY / DOUBAO_ACCESS_KEY 环境变量
|
|
13
|
+
或 ./config.json(ear 自己的配置文件)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import os
|
|
18
|
+
import sys
|
|
19
|
+
import threading
|
|
20
|
+
import time
|
|
21
|
+
import queue
|
|
22
|
+
import uuid
|
|
23
|
+
from datetime import datetime
|
|
24
|
+
|
|
25
|
+
import numpy as np
|
|
26
|
+
import pyaudio
|
|
27
|
+
import websocket
|
|
28
|
+
|
|
29
|
+
# protobuf stubs(豆包 API)
|
|
30
|
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
31
|
+
from python_protogen.common.events_pb2 import Type as EventType
|
|
32
|
+
from python_protogen.products.understanding.ast.ast_service_pb2 import (
|
|
33
|
+
TranslateRequest, TranslateResponse)
|
|
34
|
+
|
|
35
|
+
# ── 常量 ──────────────────────────────────────────────────────
|
|
36
|
+
WS_URL = 'wss://openspeech.bytedance.com/api/v4/ast/v2/translate'
|
|
37
|
+
RESOURCE_ID = 'volc.service_type.10053'
|
|
38
|
+
SAMPLE_RATE = 16000
|
|
39
|
+
CHUNK_MS = 100
|
|
40
|
+
CHUNK_SIZE = int(SAMPLE_RATE * CHUNK_MS / 1000) # 1600 samples
|
|
41
|
+
|
|
42
|
+
# 豆包事件码
|
|
43
|
+
EVENT_ASR_DELTA = 651
|
|
44
|
+
EVENT_ASR_DONE = 652
|
|
45
|
+
EVENT_SESSION_FAILED = 153
|
|
46
|
+
|
|
47
|
+
# ── 配置加载 ──────────────────────────────────────────────────
|
|
48
|
+
def load_config():
|
|
49
|
+
cfg = {
|
|
50
|
+
'doubao_app_key': '',
|
|
51
|
+
'doubao_access_key': '',
|
|
52
|
+
'src_lang': 'zhen',
|
|
53
|
+
'tgt_lang': 'zhen',
|
|
54
|
+
'silence_rms': 80,
|
|
55
|
+
'silence_hangover_s': 1.5,
|
|
56
|
+
'idle_close_s': 3.0,
|
|
57
|
+
}
|
|
58
|
+
# 1. 环境变量
|
|
59
|
+
for key in ('doubao_app_key', 'doubao_access_key'):
|
|
60
|
+
env_key = key.upper()
|
|
61
|
+
val = os.environ.get(env_key, '')
|
|
62
|
+
if val:
|
|
63
|
+
cfg[key] = val
|
|
64
|
+
# 2. ear 自己的 config.json
|
|
65
|
+
cfg_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.json')
|
|
66
|
+
if os.path.exists(cfg_path):
|
|
67
|
+
try:
|
|
68
|
+
with open(cfg_path, 'r', encoding='utf-8') as f:
|
|
69
|
+
cfg.update(json.load(f))
|
|
70
|
+
except Exception:
|
|
71
|
+
pass
|
|
72
|
+
return cfg
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# ── 豆包同传客户端 ────────────────────────────────────────────
|
|
76
|
+
class DoubaoTranscriber:
|
|
77
|
+
"""惰性连接 + 空闲断开 + 断线重连。回调 on_result(rec) 收到:
|
|
78
|
+
{'time': str, 'text': str, 'translation': str, 'is_final': bool}"""
|
|
79
|
+
|
|
80
|
+
def __init__(self, app_key: str, access_key: str,
|
|
81
|
+
src_lang: str = 'zhen', tgt_lang: str = 'zhen',
|
|
82
|
+
idle_close_s: float = 3.0):
|
|
83
|
+
self.app_key = app_key
|
|
84
|
+
self.access_key = access_key
|
|
85
|
+
self.src_lang = src_lang
|
|
86
|
+
self.tgt_lang = tgt_lang
|
|
87
|
+
self.idle_close_s = idle_close_s
|
|
88
|
+
self._q = queue.Queue(maxsize=600)
|
|
89
|
+
self._on_result = None
|
|
90
|
+
self._running = threading.Event()
|
|
91
|
+
self._active = False
|
|
92
|
+
self._lock = threading.Lock()
|
|
93
|
+
self._thread = None
|
|
94
|
+
|
|
95
|
+
def start(self, on_result):
|
|
96
|
+
self._on_result = on_result
|
|
97
|
+
self._running.set()
|
|
98
|
+
self._thread = threading.Thread(target=self._worker, daemon=True)
|
|
99
|
+
self._thread.start()
|
|
100
|
+
|
|
101
|
+
def feed(self, pcm: bytes):
|
|
102
|
+
try:
|
|
103
|
+
self._q.put_nowait(pcm)
|
|
104
|
+
except queue.Full:
|
|
105
|
+
pass
|
|
106
|
+
|
|
107
|
+
def stop(self):
|
|
108
|
+
self._running.clear()
|
|
109
|
+
if self._thread:
|
|
110
|
+
self._thread.join(timeout=5)
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def active(self):
|
|
114
|
+
with self._lock:
|
|
115
|
+
return self._active
|
|
116
|
+
|
|
117
|
+
def _make_msg(self, event, session_id, pcm=b''):
|
|
118
|
+
req = TranslateRequest()
|
|
119
|
+
req.request_meta.SessionID = session_id
|
|
120
|
+
req.event = event
|
|
121
|
+
req.user.uid = 'pi-ear'
|
|
122
|
+
req.user.did = 'pi-ear'
|
|
123
|
+
req.source_audio.format = 'wav'
|
|
124
|
+
req.source_audio.rate = SAMPLE_RATE
|
|
125
|
+
req.source_audio.bits = 16
|
|
126
|
+
req.source_audio.channel = 1
|
|
127
|
+
req.request.mode = 's2t'
|
|
128
|
+
req.request.source_language = self.src_lang
|
|
129
|
+
req.request.target_language = self.tgt_lang
|
|
130
|
+
if pcm:
|
|
131
|
+
req.source_audio.binary_data = pcm
|
|
132
|
+
return req.SerializeToString()
|
|
133
|
+
|
|
134
|
+
def _handle_response(self, resp):
|
|
135
|
+
if resp.event == EVENT_SESSION_FAILED:
|
|
136
|
+
print(f'[ear] 豆包会话失败: code={resp.response_meta.StatusCode}')
|
|
137
|
+
return True # session dead
|
|
138
|
+
text = (resp.text or '').strip()
|
|
139
|
+
if resp.event == EVENT_ASR_DONE and text:
|
|
140
|
+
self._on_result({
|
|
141
|
+
'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3],
|
|
142
|
+
'text': text,
|
|
143
|
+
'translation': '',
|
|
144
|
+
'is_final': True,
|
|
145
|
+
})
|
|
146
|
+
elif resp.event == EVENT_ASR_DELTA and text:
|
|
147
|
+
self._on_result({
|
|
148
|
+
'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3],
|
|
149
|
+
'text': text,
|
|
150
|
+
'translation': '',
|
|
151
|
+
'is_final': False,
|
|
152
|
+
})
|
|
153
|
+
return False
|
|
154
|
+
|
|
155
|
+
def _worker(self):
|
|
156
|
+
reconnect_delay = 2
|
|
157
|
+
MAX_DELAY = 60
|
|
158
|
+
SILENCE_100MS = b'\x00' * 3200
|
|
159
|
+
|
|
160
|
+
while self._running.is_set():
|
|
161
|
+
try:
|
|
162
|
+
first_pcm = self._q.get(timeout=0.5)
|
|
163
|
+
except queue.Empty:
|
|
164
|
+
continue
|
|
165
|
+
|
|
166
|
+
ws = None
|
|
167
|
+
session_id = str(uuid.uuid4())
|
|
168
|
+
session_dead = False
|
|
169
|
+
try:
|
|
170
|
+
ws = websocket.create_connection(
|
|
171
|
+
WS_URL,
|
|
172
|
+
header={
|
|
173
|
+
'X-Api-App-Key': self.app_key,
|
|
174
|
+
'X-Api-Access-Key': self.access_key,
|
|
175
|
+
'X-Api-Resource-Id': RESOURCE_ID,
|
|
176
|
+
'X-Api-Connect-Id': str(uuid.uuid4()),
|
|
177
|
+
}, timeout=10)
|
|
178
|
+
|
|
179
|
+
ws.send_binary(self._make_msg(EventType.StartSession, session_id))
|
|
180
|
+
ws.settimeout(15)
|
|
181
|
+
resp = TranslateResponse()
|
|
182
|
+
resp.ParseFromString(ws.recv())
|
|
183
|
+
if resp.event != EventType.SessionStarted:
|
|
184
|
+
raise ConnectionError(
|
|
185
|
+
f'启动失败: event={resp.event} code={resp.response_meta.StatusCode}')
|
|
186
|
+
|
|
187
|
+
with self._lock:
|
|
188
|
+
self._active = True
|
|
189
|
+
reconnect_delay = 2
|
|
190
|
+
print(f'[ear] 豆包已连接')
|
|
191
|
+
|
|
192
|
+
ws.settimeout(0.02)
|
|
193
|
+
ws.send_binary(self._make_msg(EventType.TaskRequest, session_id, first_pcm))
|
|
194
|
+
audio_clock = time.monotonic()
|
|
195
|
+
last_real_t = time.monotonic()
|
|
196
|
+
|
|
197
|
+
while self._running.is_set():
|
|
198
|
+
try:
|
|
199
|
+
data = ws.recv()
|
|
200
|
+
if data:
|
|
201
|
+
r = TranslateResponse()
|
|
202
|
+
r.ParseFromString(data)
|
|
203
|
+
if self._handle_response(r):
|
|
204
|
+
session_dead = True
|
|
205
|
+
break
|
|
206
|
+
else:
|
|
207
|
+
break
|
|
208
|
+
except websocket.WebSocketTimeoutException:
|
|
209
|
+
pass
|
|
210
|
+
except websocket.WebSocketConnectionClosedException:
|
|
211
|
+
# WS 掉了——退出内层循环,外层会重连
|
|
212
|
+
break
|
|
213
|
+
except OSError:
|
|
214
|
+
# macOS 偶尔丢音频设备——不致命,继续
|
|
215
|
+
continue
|
|
216
|
+
|
|
217
|
+
now = time.monotonic()
|
|
218
|
+
if now - last_real_t > self.idle_close_s:
|
|
219
|
+
ws.send_binary(self._make_msg(EventType.FinishSession, session_id))
|
|
220
|
+
ws.settimeout(1)
|
|
221
|
+
try:
|
|
222
|
+
drain_until = time.monotonic() + 3
|
|
223
|
+
while time.monotonic() < drain_until:
|
|
224
|
+
r = TranslateResponse()
|
|
225
|
+
r.ParseFromString(ws.recv())
|
|
226
|
+
self._handle_response(r)
|
|
227
|
+
except Exception:
|
|
228
|
+
pass
|
|
229
|
+
break
|
|
230
|
+
|
|
231
|
+
if now - audio_clock > 2.0:
|
|
232
|
+
audio_clock = now - 2.0
|
|
233
|
+
while audio_clock <= now and self._running.is_set():
|
|
234
|
+
try:
|
|
235
|
+
pcm = self._q.get_nowait()
|
|
236
|
+
last_real_t = now
|
|
237
|
+
except queue.Empty:
|
|
238
|
+
pcm = SILENCE_100MS
|
|
239
|
+
ws.send_binary(self._make_msg(EventType.TaskRequest, session_id, pcm))
|
|
240
|
+
audio_clock += len(pcm) / 2.0 / SAMPLE_RATE
|
|
241
|
+
|
|
242
|
+
except websocket.WebSocketConnectionClosedException:
|
|
243
|
+
# 豆包 WS 掉了——正常,静默重连
|
|
244
|
+
reconnect_delay = min(reconnect_delay * 2, MAX_DELAY)
|
|
245
|
+
except Exception as e:
|
|
246
|
+
# 真正的异常(鉴权/网络/协议)才打印
|
|
247
|
+
msg = str(e)[:120]
|
|
248
|
+
if 'Connection' not in msg and 'timeout' not in msg.lower():
|
|
249
|
+
print(f'[ear] 豆包异常: {msg}')
|
|
250
|
+
reconnect_delay = min(reconnect_delay * 2, MAX_DELAY)
|
|
251
|
+
finally:
|
|
252
|
+
with self._lock:
|
|
253
|
+
self._active = False
|
|
254
|
+
if ws:
|
|
255
|
+
try:
|
|
256
|
+
if not session_dead:
|
|
257
|
+
ws.send_binary(self._make_msg(EventType.FinishSession, session_id))
|
|
258
|
+
except Exception:
|
|
259
|
+
pass
|
|
260
|
+
try:
|
|
261
|
+
ws.close()
|
|
262
|
+
except Exception:
|
|
263
|
+
pass
|
|
264
|
+
# 断开后等一等再重连(退避)
|
|
265
|
+
if self._running.is_set():
|
|
266
|
+
time.sleep(reconnect_delay)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
# ── 麦克风采集 ────────────────────────────────────────────────
|
|
270
|
+
class Microphone:
|
|
271
|
+
"""读取默认麦克风,输出 16kHz 单声道 int16 PCM。"""
|
|
272
|
+
|
|
273
|
+
def __init__(self):
|
|
274
|
+
self._pa = None
|
|
275
|
+
self._stream = None
|
|
276
|
+
self._dev_rate = SAMPLE_RATE
|
|
277
|
+
self._dev_channels = 1
|
|
278
|
+
self._dev_chunk = CHUNK_SIZE
|
|
279
|
+
|
|
280
|
+
def open(self):
|
|
281
|
+
self._pa = pyaudio.PyAudio()
|
|
282
|
+
info = self._pa.get_default_input_device_info()
|
|
283
|
+
idx = int(info['index'])
|
|
284
|
+
name = str(info['name'])
|
|
285
|
+
self._dev_channels = min(2, max(1, int(info.get('maxInputChannels', 1))))
|
|
286
|
+
|
|
287
|
+
for rate in (SAMPLE_RATE, int(info['defaultSampleRate'])):
|
|
288
|
+
try:
|
|
289
|
+
self._dev_rate = rate
|
|
290
|
+
self._dev_chunk = int(rate * CHUNK_MS / 1000)
|
|
291
|
+
self._stream = self._pa.open(
|
|
292
|
+
format=pyaudio.paInt16,
|
|
293
|
+
channels=self._dev_channels,
|
|
294
|
+
rate=rate,
|
|
295
|
+
input=True,
|
|
296
|
+
input_device_index=idx,
|
|
297
|
+
frames_per_buffer=self._dev_chunk,
|
|
298
|
+
)
|
|
299
|
+
break
|
|
300
|
+
except OSError:
|
|
301
|
+
self._stream = None
|
|
302
|
+
|
|
303
|
+
if self._stream is None:
|
|
304
|
+
self._pa.terminate()
|
|
305
|
+
raise RuntimeError(f'无法打开麦克风: {name}')
|
|
306
|
+
print(f'[ear] 麦克风 "{name}" ({self._dev_rate}Hz, {self._dev_channels}ch)')
|
|
307
|
+
|
|
308
|
+
def read(self) -> bytes:
|
|
309
|
+
raw = self._stream.read(self._dev_chunk, exception_on_overflow=False)
|
|
310
|
+
audio = np.frombuffer(raw, dtype=np.int16)
|
|
311
|
+
if self._dev_channels > 1:
|
|
312
|
+
audio = audio.reshape(-1, self._dev_channels).mean(axis=1)
|
|
313
|
+
if self._dev_rate != SAMPLE_RATE:
|
|
314
|
+
n_out = int(len(audio) * SAMPLE_RATE / self._dev_rate)
|
|
315
|
+
x_old = np.linspace(0.0, 1.0, num=len(audio), endpoint=False)
|
|
316
|
+
x_new = np.linspace(0.0, 1.0, num=n_out, endpoint=False)
|
|
317
|
+
audio = np.interp(x_new, x_old, audio.astype(np.float64))
|
|
318
|
+
return np.clip(audio, -32768, 32767).astype(np.int16).tobytes()
|
|
319
|
+
|
|
320
|
+
def close(self):
|
|
321
|
+
if self._stream:
|
|
322
|
+
try:
|
|
323
|
+
self._stream.stop_stream()
|
|
324
|
+
self._stream.close()
|
|
325
|
+
except Exception:
|
|
326
|
+
pass
|
|
327
|
+
if self._pa:
|
|
328
|
+
self._pa.terminate()
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
# ── 远端麦克风(通过 rtw mic_relay TCP 桥接浏览器麦克风) ─────
|
|
332
|
+
class RemoteMicrophone:
|
|
333
|
+
"""从 rtw mic_relay 的 TCP 端口读 16kHz/16bit/mono PCM。"""
|
|
334
|
+
RELAY_HOST = '127.0.0.1'
|
|
335
|
+
RELAY_PORT = 7691
|
|
336
|
+
BYTES_PER_CHUNK = CHUNK_SIZE * 2 # int16 = 2 bytes/sample
|
|
337
|
+
|
|
338
|
+
def __init__(self):
|
|
339
|
+
self._sock = None
|
|
340
|
+
|
|
341
|
+
def open(self):
|
|
342
|
+
import socket
|
|
343
|
+
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
344
|
+
self._sock.connect((self.RELAY_HOST, self.RELAY_PORT))
|
|
345
|
+
print(f'[ear] 远端麦克风 (rtw mic_relay {self.RELAY_HOST}:{self.RELAY_PORT})')
|
|
346
|
+
|
|
347
|
+
def read(self) -> bytes:
|
|
348
|
+
buf = b''
|
|
349
|
+
while len(buf) < self.BYTES_PER_CHUNK:
|
|
350
|
+
chunk = self._sock.recv(self.BYTES_PER_CHUNK - len(buf))
|
|
351
|
+
if not chunk:
|
|
352
|
+
raise ConnectionError('mic relay disconnected')
|
|
353
|
+
buf += chunk
|
|
354
|
+
return buf
|
|
355
|
+
|
|
356
|
+
def close(self):
|
|
357
|
+
if self._sock:
|
|
358
|
+
try: self._sock.close()
|
|
359
|
+
except Exception: pass
|
|
360
|
+
|
|
361
|
+
@staticmethod
|
|
362
|
+
def available() -> bool:
|
|
363
|
+
import socket
|
|
364
|
+
try:
|
|
365
|
+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
366
|
+
s.settimeout(0.3)
|
|
367
|
+
s.connect((RemoteMicrophone.RELAY_HOST, RemoteMicrophone.RELAY_PORT))
|
|
368
|
+
s.close()
|
|
369
|
+
return True
|
|
370
|
+
except Exception:
|
|
371
|
+
return False
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
# ── 主循环 ────────────────────────────────────────────────────
|
|
375
|
+
def main():
|
|
376
|
+
if len(sys.argv) < 2:
|
|
377
|
+
print("用法: python3 ear_recorder.py <output_jsonl_path>")
|
|
378
|
+
sys.exit(1)
|
|
379
|
+
|
|
380
|
+
output_path = sys.argv[1]
|
|
381
|
+
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
|
382
|
+
|
|
383
|
+
cfg = load_config()
|
|
384
|
+
if not cfg['doubao_app_key'] or not cfg['doubao_access_key']:
|
|
385
|
+
print("[ear] 缺少豆包凭证。设置 config.json 或环境变量 DOUBAO_APP_KEY / DOUBAO_ACCESS_KEY")
|
|
386
|
+
sys.exit(1)
|
|
387
|
+
|
|
388
|
+
print(f"[ear] 启动 — 源语言={cfg['src_lang']} 目标={cfg['tgt_lang']}")
|
|
389
|
+
print(f"[ear] 输出 {output_path}")
|
|
390
|
+
|
|
391
|
+
if RemoteMicrophone.available():
|
|
392
|
+
mic = RemoteMicrophone()
|
|
393
|
+
else:
|
|
394
|
+
mic = Microphone()
|
|
395
|
+
mic.open()
|
|
396
|
+
|
|
397
|
+
transcriber = DoubaoTranscriber(
|
|
398
|
+
app_key=cfg['doubao_app_key'],
|
|
399
|
+
access_key=cfg['doubao_access_key'],
|
|
400
|
+
src_lang=cfg['src_lang'],
|
|
401
|
+
tgt_lang=cfg['tgt_lang'],
|
|
402
|
+
idle_close_s=float(cfg['idle_close_s']),
|
|
403
|
+
)
|
|
404
|
+
|
|
405
|
+
output_lock = threading.Lock()
|
|
406
|
+
|
|
407
|
+
def on_result(rec: dict):
|
|
408
|
+
# 只写整句(final),delta 太碎忽略
|
|
409
|
+
if rec.get('is_final') and rec['text']:
|
|
410
|
+
with output_lock:
|
|
411
|
+
with open(output_path, 'a', encoding='utf-8') as f:
|
|
412
|
+
f.write(json.dumps(rec, ensure_ascii=False) + '\n')
|
|
413
|
+
print(f"[ear ✓] {rec['text']}")
|
|
414
|
+
|
|
415
|
+
transcriber.start(on_result)
|
|
416
|
+
|
|
417
|
+
MUTE_FILE = "/tmp/pi_mouth_speaking"
|
|
418
|
+
|
|
419
|
+
silence_rms = float(cfg['silence_rms'])
|
|
420
|
+
hangover_s = float(cfg['silence_hangover_s'])
|
|
421
|
+
voice_until = 0.0
|
|
422
|
+
|
|
423
|
+
try:
|
|
424
|
+
while True:
|
|
425
|
+
pcm = mic.read()
|
|
426
|
+
# mouth 正在说话时跳过,防止回声
|
|
427
|
+
if os.path.exists(MUTE_FILE):
|
|
428
|
+
continue
|
|
429
|
+
audio = np.frombuffer(pcm, dtype=np.int16).astype(np.float32)
|
|
430
|
+
rms = float(np.sqrt(np.mean(audio ** 2))) if len(audio) else 0.0
|
|
431
|
+
now = time.monotonic()
|
|
432
|
+
if rms >= silence_rms:
|
|
433
|
+
voice_until = now + hangover_s
|
|
434
|
+
if now <= voice_until:
|
|
435
|
+
transcriber.feed(pcm)
|
|
436
|
+
except KeyboardInterrupt:
|
|
437
|
+
pass
|
|
438
|
+
finally:
|
|
439
|
+
print("[ear] 关闭")
|
|
440
|
+
transcriber.stop()
|
|
441
|
+
mic.close()
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
if __name__ == '__main__':
|
|
445
|
+
main()
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: common/events.proto
|
|
5
|
+
# Protobuf Python Version: 6.31.0
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
6,
|
|
15
|
+
31,
|
|
16
|
+
0,
|
|
17
|
+
'',
|
|
18
|
+
'common/events.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13\x63ommon/events.proto\x12\x11\x64\x61ta.speech.event*\xbf\x08\n\x04Type\x12\x08\n\x04None\x10\x00\x12\x13\n\x0fStartConnection\x10\x01\x12\r\n\tStartTask\x10\x01\x12\x14\n\x10\x46inishConnection\x10\x02\x12\x0e\n\nFinishTask\x10\x02\x12\x15\n\x11\x43onnectionStarted\x10\x32\x12\x0f\n\x0bTaskStarted\x10\x32\x12\x14\n\x10\x43onnectionFailed\x10\x33\x12\x0e\n\nTaskFailed\x10\x33\x12\x16\n\x12\x43onnectionFinished\x10\x34\x12\x10\n\x0cTaskFinished\x10\x34\x12\x10\n\x0cStartSession\x10\x64\x12\x11\n\rCancelSession\x10\x65\x12\x11\n\rFinishSession\x10\x66\x12\x13\n\x0eSessionStarted\x10\x96\x01\x12\x14\n\x0fSessionCanceled\x10\x97\x01\x12\x14\n\x0fSessionFinished\x10\x98\x01\x12\x12\n\rSessionFailed\x10\x99\x01\x12\x12\n\rUsageResponse\x10\x9a\x01\x12\x0f\n\nChargeData\x10\x9a\x01\x12\x10\n\x0bTaskRequest\x10\xc8\x01\x12\x11\n\x0cUpdateConfig\x10\xc9\x01\x12\x11\n\x0cImageRequest\x10\xca\x01\x12\x0f\n\nAudioMuted\x10\xfa\x01\x12\r\n\x08SayHello\x10\xac\x02\x12\x15\n\x10TTSSentenceStart\x10\xde\x02\x12\x13\n\x0eTTSSentenceEnd\x10\xdf\x02\x12\x10\n\x0bTTSResponse\x10\xe0\x02\x12\r\n\x08TTSEnded\x10\xe7\x02\x12\x16\n\x11PodcastRoundStart\x10\xe8\x02\x12\x19\n\x14PodcastRoundResponse\x10\xe9\x02\x12\x14\n\x0fPodcastRoundEnd\x10\xea\x02\x12\x0c\n\x07\x41SRInfo\x10\xc2\x03\x12\x10\n\x0b\x41SRResponse\x10\xc3\x03\x12\r\n\x08\x41SREnded\x10\xcb\x03\x12\x10\n\x0b\x43hatTTSText\x10\xf4\x03\x12\x12\n\rChatTextQuery\x10\xf5\x03\x12\x11\n\x0c\x43hatResponse\x10\xa6\x04\x12\x11\n\x0c\x43himeInStart\x10\xa7\x04\x12\x0f\n\nChimeInEnd\x10\xa8\x04\x12\x0e\n\tChatEnded\x10\xaf\x04\x12\x0f\n\nThinkStart\x10\xb0\x04\x12\x12\n\rThinkResponse\x10\xb1\x04\x12\r\n\x08ThinkEnd\x10\xb2\x04\x12\x0f\n\nToolOutput\x10\xb3\x04\x12\x14\n\x0f\x46\x43ResponseStart\x10\xb4\x04\x12\x0f\n\nFCResponse\x10\xb5\x04\x12\x12\n\rFCResponseEnd\x10\xb6\x04\x12\x18\n\x13SourceSubtitleStart\x10\x8a\x05\x12\x1b\n\x16SourceSubtitleResponse\x10\x8b\x05\x12\x16\n\x11SourceSubtitleEnd\x10\x8c\x05\x12\x1d\n\x18TranslationSubtitleStart\x10\x8d\x05\x12 \n\x1bTranslationSubtitleResponse\x10\x8e\x05\x12\x1b\n\x16TranslationSubtitleEnd\x10\x8f\x05\x1a\x02\x10\x01\x62\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common.events_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_TYPE']._loaded_options = None
|
|
35
|
+
_globals['_TYPE']._serialized_options = b'\020\001'
|
|
36
|
+
_globals['_TYPE']._serialized_start=43
|
|
37
|
+
_globals['_TYPE']._serialized_end=1130
|
|
38
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
|
2
|
+
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
|
+
import grpc
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
GRPC_GENERATED_VERSION = '1.73.1'
|
|
8
|
+
GRPC_VERSION = grpc.__version__
|
|
9
|
+
_version_not_supported = False
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
from grpc._utilities import first_version_is_lower
|
|
13
|
+
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
|
14
|
+
except ImportError:
|
|
15
|
+
_version_not_supported = True
|
|
16
|
+
|
|
17
|
+
if _version_not_supported:
|
|
18
|
+
raise RuntimeError(
|
|
19
|
+
f'The grpc package installed is at version {GRPC_VERSION},'
|
|
20
|
+
+ f' but the generated code in common/events_pb2_grpc.py depends on'
|
|
21
|
+
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
|
22
|
+
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
|
23
|
+
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
|
24
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: common/rpcmeta.proto
|
|
5
|
+
# Protobuf Python Version: 6.31.0
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
6,
|
|
15
|
+
31,
|
|
16
|
+
0,
|
|
17
|
+
'',
|
|
18
|
+
'common/rpcmeta.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x63ommon/rpcmeta.proto\x12\x12\x64\x61ta.speech.common\"\xda\x01\n\x0bRequestMeta\x12\x1a\n\x08\x45ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12\x17\n\x06\x41ppKey\x18\x02 \x01(\tR\x07\x61pp_key\x12\x15\n\x05\x41ppID\x18\x03 \x01(\tR\x06\x61pp_id\x12\x1f\n\nResourceID\x18\x04 \x01(\tR\x0bresource_id\x12#\n\x0c\x43onnectionID\x18\x05 \x01(\tR\rconnection_id\x12\x1d\n\tSessionID\x18\x06 \x01(\tR\nsession_id\x12\x1a\n\x08Sequence\x18\x07 \x01(\x05R\x08sequence\"=\n\x0b\x42illingItem\x12\x12\n\x04Unit\x18\x01 \x01(\tR\x04unit\x12\x1a\n\x08Quantity\x18\x02 \x01(\x02R\x08quantity\"\x84\x01\n\x07\x42illing\x12\x35\n\x05Items\x18\x01 \x03(\x0b\x32\x1f.data.speech.common.BillingItemR\x05items\x12#\n\x0c\x44urationMsec\x18\x02 \x01(\x03R\rduration_msec\x12\x1d\n\tWordCount\x18\x03 \x01(\x03R\nword_count\"\xcc\x01\n\x0cResponseMeta\x12\x1d\n\tSessionID\x18\x01 \x01(\tR\nsession_id\x12\x1a\n\x08Sequence\x18\x02 \x01(\x05R\x08sequence\x12\x1f\n\nStatusCode\x18\x03 \x01(\x05R\x0bstatus_code\x12\x18\n\x07Message\x18\x04 \x01(\tR\x07message\x12:\n\x07\x42illing\x18\x05 \x01(\x0b\x32\x1b.data.speech.common.BillingH\x00R\x07\x62illing\x88\x01\x01\x42\n\n\x08_Billingb\x06proto3')
|
|
28
|
+
|
|
29
|
+
_globals = globals()
|
|
30
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
31
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common.rpcmeta_pb2', _globals)
|
|
32
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
33
|
+
DESCRIPTOR._loaded_options = None
|
|
34
|
+
_globals['_REQUESTMETA']._serialized_start=45
|
|
35
|
+
_globals['_REQUESTMETA']._serialized_end=263
|
|
36
|
+
_globals['_BILLINGITEM']._serialized_start=265
|
|
37
|
+
_globals['_BILLINGITEM']._serialized_end=326
|
|
38
|
+
_globals['_BILLING']._serialized_start=329
|
|
39
|
+
_globals['_BILLING']._serialized_end=461
|
|
40
|
+
_globals['_RESPONSEMETA']._serialized_start=464
|
|
41
|
+
_globals['_RESPONSEMETA']._serialized_end=668
|
|
42
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
|
2
|
+
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
|
+
import grpc
|
|
4
|
+
import warnings
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
GRPC_GENERATED_VERSION = '1.73.1'
|
|
8
|
+
GRPC_VERSION = grpc.__version__
|
|
9
|
+
_version_not_supported = False
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
from grpc._utilities import first_version_is_lower
|
|
13
|
+
_version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
|
|
14
|
+
except ImportError:
|
|
15
|
+
_version_not_supported = True
|
|
16
|
+
|
|
17
|
+
if _version_not_supported:
|
|
18
|
+
raise RuntimeError(
|
|
19
|
+
f'The grpc package installed is at version {GRPC_VERSION},'
|
|
20
|
+
+ f' but the generated code in common/rpcmeta_pb2_grpc.py depends on'
|
|
21
|
+
+ f' grpcio>={GRPC_GENERATED_VERSION}.'
|
|
22
|
+
+ f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
|
|
23
|
+
+ f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
|
|
24
|
+
)
|
|
File without changes
|
package/core/individual.bio.organs/ears.listen/python_protogen/products/understanding/__init__.py
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
4
|
+
# source: products/understanding/ast/ast_service.proto
|
|
5
|
+
# Protobuf Python Version: 6.31.0
|
|
6
|
+
"""Generated protocol buffer code."""
|
|
7
|
+
from google.protobuf import descriptor as _descriptor
|
|
8
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
10
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
_runtime_version.ValidateProtobufRuntimeVersion(
|
|
13
|
+
_runtime_version.Domain.PUBLIC,
|
|
14
|
+
6,
|
|
15
|
+
31,
|
|
16
|
+
0,
|
|
17
|
+
'',
|
|
18
|
+
'products/understanding/ast/ast_service.proto'
|
|
19
|
+
)
|
|
20
|
+
# @@protoc_insertion_point(imports)
|
|
21
|
+
|
|
22
|
+
_sym_db = _symbol_database.Default()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
from python_protogen.common import events_pb2 as common_dot_events__pb2
|
|
26
|
+
from python_protogen.common import rpcmeta_pb2 as common_dot_rpcmeta__pb2
|
|
27
|
+
from python_protogen.products.understanding.base import au_base_pb2 as products_dot_understanding_dot_base_dot_au__base__pb2
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,products/understanding/ast/ast_service.proto\x12\x0f\x64\x61ta.speech.ast\x1a\x13\x63ommon/events.proto\x1a\x14\x63ommon/rpcmeta.proto\x1a)products/understanding/base/au_base.proto\"\x92\x01\n\tReqParams\x12\x0c\n\x04mode\x18\x01 \x01(\t\x12\x17\n\x0fsource_language\x18\x02 \x01(\t\x12\x17\n\x0ftarget_language\x18\x03 \x01(\t\x12\x12\n\nspeaker_id\x18\x04 \x01(\t\x12\x31\n\x06\x63orpus\x18\x64 \x01(\x0b\x32!.data.speech.understanding.Corpus\"\xf5\x02\n\x10TranslateRequest\x12:\n\x0crequest_meta\x18\x01 \x01(\x0b\x32\x1f.data.speech.common.RequestMetaH\x00\x88\x01\x01\x12&\n\x05\x65vent\x18\x02 \x01(\x0e\x32\x17.data.speech.event.Type\x12-\n\x04user\x18\x03 \x01(\x0b\x32\x1f.data.speech.understanding.User\x12\x36\n\x0csource_audio\x18\x04 \x01(\x0b\x32 .data.speech.understanding.Audio\x12\x36\n\x0ctarget_audio\x18\x05 \x01(\x0b\x32 .data.speech.understanding.Audio\x12+\n\x07request\x18\x06 \x01(\x0b\x32\x1a.data.speech.ast.ReqParams\x12\x14\n\x07\x64\x65noise\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0f\n\r_request_metaB\n\n\x08_denoise\"\xf9\x01\n\x11TranslateResponse\x12<\n\rresponse_meta\x18\x01 \x01(\x0b\x32 .data.speech.common.ResponseMetaH\x00\x88\x01\x01\x12&\n\x05\x65vent\x18\x02 \x01(\x0e\x32\x17.data.speech.event.Type\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x12\n\nstart_time\x18\x05 \x01(\x05\x12\x10\n\x08\x65nd_time\x18\x06 \x01(\x05\x12\x0f\n\x07spk_chg\x18\x07 \x01(\x08\x12\x19\n\x11muted_duration_ms\x18\x08 \x01(\x05\x42\x10\n\x0e_response_meta2d\n\nASTService\x12V\n\tTranslate\x12!.data.speech.ast.TranslateRequest\x1a\".data.speech.ast.TranslateResponse(\x01\x30\x01\x62\x06proto3')
|
|
31
|
+
|
|
32
|
+
_globals = globals()
|
|
33
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
34
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'products.understanding.ast.ast_service_pb2', _globals)
|
|
35
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
36
|
+
DESCRIPTOR._loaded_options = None
|
|
37
|
+
_globals['_REQPARAMS']._serialized_start=152
|
|
38
|
+
_globals['_REQPARAMS']._serialized_end=298
|
|
39
|
+
_globals['_TRANSLATEREQUEST']._serialized_start=301
|
|
40
|
+
_globals['_TRANSLATEREQUEST']._serialized_end=674
|
|
41
|
+
_globals['_TRANSLATERESPONSE']._serialized_start=677
|
|
42
|
+
_globals['_TRANSLATERESPONSE']._serialized_end=926
|
|
43
|
+
_globals['_ASTSERVICE']._serialized_start=928
|
|
44
|
+
_globals['_ASTSERVICE']._serialized_end=1028
|
|
45
|
+
# @@protoc_insertion_point(module_scope)
|