@fraziym/axoniz 0.1.0
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/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/agents/definition.d.ts +15 -0
- package/dist/agents/definition.d.ts.map +1 -0
- package/dist/agents/definition.js +41 -0
- package/dist/agents/definition.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +11 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.d.ts +17 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +23 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/specialized.d.ts +31 -0
- package/dist/agents/specialized.d.ts.map +1 -0
- package/dist/agents/specialized.js +75 -0
- package/dist/agents/specialized.js.map +1 -0
- package/dist/awareness/index.d.ts +14 -0
- package/dist/awareness/index.d.ts.map +1 -0
- package/dist/awareness/index.js +22 -0
- package/dist/awareness/index.js.map +1 -0
- package/dist/awareness/service.d.ts +180 -0
- package/dist/awareness/service.d.ts.map +1 -0
- package/dist/awareness/service.js +789 -0
- package/dist/awareness/service.js.map +1 -0
- package/dist/cli/entry.d.ts +13 -0
- package/dist/cli/entry.d.ts.map +1 -0
- package/dist/cli/entry.js +35 -0
- package/dist/cli/entry.js.map +1 -0
- package/dist/comms/telegram.d.ts +41 -0
- package/dist/comms/telegram.d.ts.map +1 -0
- package/dist/comms/telegram.js +332 -0
- package/dist/comms/telegram.js.map +1 -0
- package/dist/core/agent.d.ts +252 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +1399 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/auth.d.ts +23 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +113 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/authority.d.ts +118 -0
- package/dist/core/authority.d.ts.map +1 -0
- package/dist/core/authority.js +402 -0
- package/dist/core/authority.js.map +1 -0
- package/dist/core/backend/async_queue.d.ts +17 -0
- package/dist/core/backend/async_queue.d.ts.map +1 -0
- package/dist/core/backend/async_queue.js +66 -0
- package/dist/core/backend/async_queue.js.map +1 -0
- package/dist/core/backend/index.d.ts +24 -0
- package/dist/core/backend/index.d.ts.map +1 -0
- package/dist/core/backend/index.js +128 -0
- package/dist/core/backend/index.js.map +1 -0
- package/dist/core/backend/llama_server.d.ts +39 -0
- package/dist/core/backend/llama_server.d.ts.map +1 -0
- package/dist/core/backend/llama_server.js +182 -0
- package/dist/core/backend/llama_server.js.map +1 -0
- package/dist/core/backend/llamacpp.d.ts +40 -0
- package/dist/core/backend/llamacpp.d.ts.map +1 -0
- package/dist/core/backend/llamacpp.js +200 -0
- package/dist/core/backend/llamacpp.js.map +1 -0
- package/dist/core/backend/lmstudio.d.ts +53 -0
- package/dist/core/backend/lmstudio.d.ts.map +1 -0
- package/dist/core/backend/lmstudio.js +274 -0
- package/dist/core/backend/lmstudio.js.map +1 -0
- package/dist/core/backend/ollama.d.ts +25 -0
- package/dist/core/backend/ollama.d.ts.map +1 -0
- package/dist/core/backend/ollama.js +86 -0
- package/dist/core/backend/ollama.js.map +1 -0
- package/dist/core/backend/openai.d.ts +27 -0
- package/dist/core/backend/openai.d.ts.map +1 -0
- package/dist/core/backend/openai.js +84 -0
- package/dist/core/backend/openai.js.map +1 -0
- package/dist/core/backend/types.d.ts +73 -0
- package/dist/core/backend/types.d.ts.map +1 -0
- package/dist/core/backend/types.js +137 -0
- package/dist/core/backend/types.js.map +1 -0
- package/dist/core/chat_store.d.ts +77 -0
- package/dist/core/chat_store.d.ts.map +1 -0
- package/dist/core/chat_store.js +332 -0
- package/dist/core/chat_store.js.map +1 -0
- package/dist/core/cli.d.ts +82 -0
- package/dist/core/cli.d.ts.map +1 -0
- package/dist/core/cli.js +602 -0
- package/dist/core/cli.js.map +1 -0
- package/dist/core/config.d.ts +127 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +295 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/debug.d.ts +8 -0
- package/dist/core/debug.d.ts.map +1 -0
- package/dist/core/debug.js +8 -0
- package/dist/core/debug.js.map +1 -0
- package/dist/core/downloader.d.ts +31 -0
- package/dist/core/downloader.d.ts.map +1 -0
- package/dist/core/downloader.js +180 -0
- package/dist/core/downloader.js.map +1 -0
- package/dist/core/errors.d.ts +80 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +134 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/extras.d.ts +160 -0
- package/dist/core/extras.d.ts.map +1 -0
- package/dist/core/extras.js +553 -0
- package/dist/core/extras.js.map +1 -0
- package/dist/core/health.d.ts +27 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +96 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/history.d.ts +50 -0
- package/dist/core/history.d.ts.map +1 -0
- package/dist/core/history.js +276 -0
- package/dist/core/history.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intelligence/ast_index.d.ts +255 -0
- package/dist/core/intelligence/ast_index.d.ts.map +1 -0
- package/dist/core/intelligence/ast_index.js +1369 -0
- package/dist/core/intelligence/ast_index.js.map +1 -0
- package/dist/core/intelligence/confidence.d.ts +113 -0
- package/dist/core/intelligence/confidence.d.ts.map +1 -0
- package/dist/core/intelligence/confidence.js +298 -0
- package/dist/core/intelligence/confidence.js.map +1 -0
- package/dist/core/intelligence/context_compressor.d.ts +80 -0
- package/dist/core/intelligence/context_compressor.d.ts.map +1 -0
- package/dist/core/intelligence/context_compressor.js +245 -0
- package/dist/core/intelligence/context_compressor.js.map +1 -0
- package/dist/core/intelligence/daemon.d.ts +247 -0
- package/dist/core/intelligence/daemon.d.ts.map +1 -0
- package/dist/core/intelligence/daemon.js +842 -0
- package/dist/core/intelligence/daemon.js.map +1 -0
- package/dist/core/intelligence/index.d.ts +60 -0
- package/dist/core/intelligence/index.d.ts.map +1 -0
- package/dist/core/intelligence/index.js +101 -0
- package/dist/core/intelligence/index.js.map +1 -0
- package/dist/core/intelligence/predictor.d.ts +246 -0
- package/dist/core/intelligence/predictor.d.ts.map +1 -0
- package/dist/core/intelligence/predictor.js +590 -0
- package/dist/core/intelligence/predictor.js.map +1 -0
- package/dist/core/intelligence/reflex.d.ts +84 -0
- package/dist/core/intelligence/reflex.d.ts.map +1 -0
- package/dist/core/intelligence/reflex.js +344 -0
- package/dist/core/intelligence/reflex.js.map +1 -0
- package/dist/core/intelligence/self_correction.d.ts +121 -0
- package/dist/core/intelligence/self_correction.d.ts.map +1 -0
- package/dist/core/intelligence/self_correction.js +327 -0
- package/dist/core/intelligence/self_correction.js.map +1 -0
- package/dist/core/intelligence/skill_distiller.d.ts +100 -0
- package/dist/core/intelligence/skill_distiller.d.ts.map +1 -0
- package/dist/core/intelligence/skill_distiller.js +246 -0
- package/dist/core/intelligence/skill_distiller.js.map +1 -0
- package/dist/core/intelligence/swarm.d.ts +330 -0
- package/dist/core/intelligence/swarm.d.ts.map +1 -0
- package/dist/core/intelligence/swarm.js +1064 -0
- package/dist/core/intelligence/swarm.js.map +1 -0
- package/dist/core/intelligence/trajectory.d.ts +107 -0
- package/dist/core/intelligence/trajectory.d.ts.map +1 -0
- package/dist/core/intelligence/trajectory.js +330 -0
- package/dist/core/intelligence/trajectory.js.map +1 -0
- package/dist/core/logger.d.ts +111 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +640 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/loop.d.ts +123 -0
- package/dist/core/loop.d.ts.map +1 -0
- package/dist/core/loop.js +423 -0
- package/dist/core/loop.js.map +1 -0
- package/dist/core/memory.d.ts +81 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +328 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/metrics.d.ts +29 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +109 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/models.d.ts +51 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +146 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/optimizer.d.ts +34 -0
- package/dist/core/optimizer.d.ts.map +1 -0
- package/dist/core/optimizer.js +131 -0
- package/dist/core/optimizer.js.map +1 -0
- package/dist/core/persona.d.ts +35 -0
- package/dist/core/persona.d.ts.map +1 -0
- package/dist/core/persona.js +126 -0
- package/dist/core/persona.js.map +1 -0
- package/dist/core/rate_limit.d.ts +23 -0
- package/dist/core/rate_limit.d.ts.map +1 -0
- package/dist/core/rate_limit.js +62 -0
- package/dist/core/rate_limit.js.map +1 -0
- package/dist/core/runner.d.ts +63 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +671 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/stream_parser.d.ts +43 -0
- package/dist/core/stream_parser.d.ts.map +1 -0
- package/dist/core/stream_parser.js +140 -0
- package/dist/core/stream_parser.js.map +1 -0
- package/dist/core/tool_schemas.d.ts +26 -0
- package/dist/core/tool_schemas.d.ts.map +1 -0
- package/dist/core/tool_schemas.js +124 -0
- package/dist/core/tool_schemas.js.map +1 -0
- package/dist/core/which.d.ts +2 -0
- package/dist/core/which.d.ts.map +1 -0
- package/dist/core/which.js +35 -0
- package/dist/core/which.js.map +1 -0
- package/dist/goals/index.d.ts +9 -0
- package/dist/goals/index.d.ts.map +1 -0
- package/dist/goals/index.js +17 -0
- package/dist/goals/index.js.map +1 -0
- package/dist/goals/service.d.ts +115 -0
- package/dist/goals/service.d.ts.map +1 -0
- package/dist/goals/service.js +415 -0
- package/dist/goals/service.js.map +1 -0
- package/dist/goals/types.d.ts +47 -0
- package/dist/goals/types.d.ts.map +1 -0
- package/dist/goals/types.js +66 -0
- package/dist/goals/types.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/autonomous_startup.d.ts +51 -0
- package/dist/integrations/autonomous_startup.d.ts.map +1 -0
- package/dist/integrations/autonomous_startup.js +419 -0
- package/dist/integrations/autonomous_startup.js.map +1 -0
- package/dist/integrations/goose.d.ts +105 -0
- package/dist/integrations/goose.d.ts.map +1 -0
- package/dist/integrations/goose.js +408 -0
- package/dist/integrations/goose.js.map +1 -0
- package/dist/integrations/index.d.ts +21 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +17 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/mcp.d.ts +73 -0
- package/dist/integrations/mcp.d.ts.map +1 -0
- package/dist/integrations/mcp.js +307 -0
- package/dist/integrations/mcp.js.map +1 -0
- package/dist/integrations/mempalace.d.ts +18 -0
- package/dist/integrations/mempalace.d.ts.map +1 -0
- package/dist/integrations/mempalace.js +25 -0
- package/dist/integrations/mempalace.js.map +1 -0
- package/dist/integrations/multi_agent.d.ts +82 -0
- package/dist/integrations/multi_agent.d.ts.map +1 -0
- package/dist/integrations/multi_agent.js +280 -0
- package/dist/integrations/multi_agent.js.map +1 -0
- package/dist/integrations/unified_memory.d.ts +415 -0
- package/dist/integrations/unified_memory.d.ts.map +1 -0
- package/dist/integrations/unified_memory.js +1489 -0
- package/dist/integrations/unified_memory.js.map +1 -0
- package/dist/roles/beru.yaml +48 -0
- package/dist/sidecar/client.d.ts +63 -0
- package/dist/sidecar/client.d.ts.map +1 -0
- package/dist/sidecar/client.js +222 -0
- package/dist/sidecar/client.js.map +1 -0
- package/dist/sidecar/index.d.ts +7 -0
- package/dist/sidecar/index.d.ts.map +1 -0
- package/dist/sidecar/index.js +6 -0
- package/dist/sidecar/index.js.map +1 -0
- package/dist/startup.d.ts +22 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +194 -0
- package/dist/startup.js.map +1 -0
- package/dist/tools/_internal.d.ts +90 -0
- package/dist/tools/_internal.d.ts.map +1 -0
- package/dist/tools/_internal.js +375 -0
- package/dist/tools/_internal.js.map +1 -0
- package/dist/tools/_smoke.d.ts +2 -0
- package/dist/tools/_smoke.d.ts.map +1 -0
- package/dist/tools/_smoke.js +203 -0
- package/dist/tools/_smoke.js.map +1 -0
- package/dist/tools/axodex_tools.d.ts +51 -0
- package/dist/tools/axodex_tools.d.ts.map +1 -0
- package/dist/tools/axodex_tools.js +181 -0
- package/dist/tools/axodex_tools.js.map +1 -0
- package/dist/tools/code_tools.d.ts +33 -0
- package/dist/tools/code_tools.d.ts.map +1 -0
- package/dist/tools/code_tools.js +191 -0
- package/dist/tools/code_tools.js.map +1 -0
- package/dist/tools/computer_tools.d.ts +59 -0
- package/dist/tools/computer_tools.d.ts.map +1 -0
- package/dist/tools/computer_tools.js +348 -0
- package/dist/tools/computer_tools.js.map +1 -0
- package/dist/tools/file_tools.d.ts +51 -0
- package/dist/tools/file_tools.d.ts.map +1 -0
- package/dist/tools/file_tools.js +424 -0
- package/dist/tools/file_tools.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/shell_tools.d.ts +39 -0
- package/dist/tools/shell_tools.d.ts.map +1 -0
- package/dist/tools/shell_tools.js +163 -0
- package/dist/tools/shell_tools.js.map +1 -0
- package/dist/tools/web_tools.d.ts +31 -0
- package/dist/tools/web_tools.d.ts.map +1 -0
- package/dist/tools/web_tools.js +117 -0
- package/dist/tools/web_tools.js.map +1 -0
- package/dist/voice/index.d.ts +41 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +58 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/light_daemon.d.ts +197 -0
- package/dist/voice/light_daemon.d.ts.map +1 -0
- package/dist/voice/light_daemon.js +746 -0
- package/dist/voice/light_daemon.js.map +1 -0
- package/dist/voice/setup.d.ts +63 -0
- package/dist/voice/setup.d.ts.map +1 -0
- package/dist/voice/setup.js +443 -0
- package/dist/voice/setup.js.map +1 -0
- package/dist/voice/stt.d.ts +148 -0
- package/dist/voice/stt.d.ts.map +1 -0
- package/dist/voice/stt.js +361 -0
- package/dist/voice/stt.js.map +1 -0
- package/dist/voice/tts.d.ts +168 -0
- package/dist/voice/tts.d.ts.map +1 -0
- package/dist/voice/tts.js +698 -0
- package/dist/voice/tts.js.map +1 -0
- package/dist/voice/voice_loop.d.ts +101 -0
- package/dist/voice/voice_loop.d.ts.map +1 -0
- package/dist/voice/voice_loop.js +463 -0
- package/dist/voice/voice_loop.js.map +1 -0
- package/dist/voice/wake_word.d.ts +153 -0
- package/dist/voice/wake_word.d.ts.map +1 -0
- package/dist/voice/wake_word.js +458 -0
- package/dist/voice/wake_word.js.map +1 -0
- package/dist/voice/wav.d.ts +99 -0
- package/dist/voice/wav.d.ts.map +1 -0
- package/dist/voice/wav.js +306 -0
- package/dist/voice/wav.js.map +1 -0
- package/dist/web/broker.d.ts +33 -0
- package/dist/web/broker.d.ts.map +1 -0
- package/dist/web/broker.js +58 -0
- package/dist/web/broker.js.map +1 -0
- package/dist/web/open_browser.d.ts +2 -0
- package/dist/web/open_browser.d.ts.map +1 -0
- package/dist/web/open_browser.js +42 -0
- package/dist/web/open_browser.js.map +1 -0
- package/dist/web/server.d.ts +54 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +831 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/static/app.js +4121 -0
- package/dist/web/static/index.html +2281 -0
- package/dist/web/static/js/MODULE_SUMMARY.md +124 -0
- package/dist/web/static/js/a11y.js +165 -0
- package/dist/web/static/js/admin.js +2145 -0
- package/dist/web/static/js/assistant.js +475 -0
- package/dist/web/static/js/calendar/reminders.js +114 -0
- package/dist/web/static/js/calendar/utils.js +166 -0
- package/dist/web/static/js/calendar.js +3348 -0
- package/dist/web/static/js/censor.js +356 -0
- package/dist/web/static/js/chat.js +4546 -0
- package/dist/web/static/js/chatRenderer.js +2294 -0
- package/dist/web/static/js/chatStream.js +276 -0
- package/dist/web/static/js/codeRunner.js +398 -0
- package/dist/web/static/js/color/hex.js +14 -0
- package/dist/web/static/js/colorPicker.js +453 -0
- package/dist/web/static/js/compare/icons.js +77 -0
- package/dist/web/static/js/compare/index.js +1482 -0
- package/dist/web/static/js/compare/models.js +104 -0
- package/dist/web/static/js/compare/panes.js +817 -0
- package/dist/web/static/js/compare/probe.js +78 -0
- package/dist/web/static/js/compare/scoreboard.js +223 -0
- package/dist/web/static/js/compare/selector.js +1335 -0
- package/dist/web/static/js/compare/state.js +58 -0
- package/dist/web/static/js/compare/stream.js +695 -0
- package/dist/web/static/js/compare/vote.js +254 -0
- package/dist/web/static/js/cookbook-diagnosis.js +694 -0
- package/dist/web/static/js/cookbook-hwfit.js +1888 -0
- package/dist/web/static/js/cookbook.js +2093 -0
- package/dist/web/static/js/cookbookDownload.js +633 -0
- package/dist/web/static/js/cookbookProgressSignal.js +29 -0
- package/dist/web/static/js/cookbookRunning.js +3506 -0
- package/dist/web/static/js/cookbookServe.js +2128 -0
- package/dist/web/static/js/document.js +9731 -0
- package/dist/web/static/js/documentLibrary.js +3376 -0
- package/dist/web/static/js/dragSort.js +265 -0
- package/dist/web/static/js/editor/ai-inpaint.js +374 -0
- package/dist/web/static/js/editor/ai-models.js +273 -0
- package/dist/web/static/js/editor/ai-rembg.js +230 -0
- package/dist/web/static/js/editor/ai-tool-runner.js +147 -0
- package/dist/web/static/js/editor/ai-tools-misc.js +216 -0
- package/dist/web/static/js/editor/build/controls.js +366 -0
- package/dist/web/static/js/editor/build/popups.js +112 -0
- package/dist/web/static/js/editor/build/right-panel.js +200 -0
- package/dist/web/static/js/editor/build/toolbar.js +73 -0
- package/dist/web/static/js/editor/build/topbar.js +131 -0
- package/dist/web/static/js/editor/build/transform-popup.js +109 -0
- package/dist/web/static/js/editor/canvas-coords.js +21 -0
- package/dist/web/static/js/editor/canvas-events.js +197 -0
- package/dist/web/static/js/editor/canvas-transforms.js +132 -0
- package/dist/web/static/js/editor/checkerboard.js +24 -0
- package/dist/web/static/js/editor/clipboard-and-drop.js +133 -0
- package/dist/web/static/js/editor/composite-helpers.js +83 -0
- package/dist/web/static/js/editor/filters/blur.js +118 -0
- package/dist/web/static/js/editor/filters/edge-feather.js +70 -0
- package/dist/web/static/js/editor/fx/adj-popup.js +677 -0
- package/dist/web/static/js/editor/fx/filter-string.js +38 -0
- package/dist/web/static/js/editor/fx/histogram.js +67 -0
- package/dist/web/static/js/editor/fx/pixel-pass.js +249 -0
- package/dist/web/static/js/editor/harmonize-masks.js +116 -0
- package/dist/web/static/js/editor/history-panel.js +176 -0
- package/dist/web/static/js/editor/keyboard-shortcuts.js +271 -0
- package/dist/web/static/js/editor/layer-helpers.js +131 -0
- package/dist/web/static/js/editor/layer-panel.js +600 -0
- package/dist/web/static/js/editor/mask-utils.js +91 -0
- package/dist/web/static/js/editor/shortcuts-popover.js +149 -0
- package/dist/web/static/js/editor/slider-ux.js +191 -0
- package/dist/web/static/js/editor/snap.js +107 -0
- package/dist/web/static/js/editor/state.js +257 -0
- package/dist/web/static/js/editor/stroke-pipeline.js +162 -0
- package/dist/web/static/js/editor/stroke-tool-sliders.js +64 -0
- package/dist/web/static/js/editor/tools/clone.js +81 -0
- package/dist/web/static/js/editor/tools/crop.js +137 -0
- package/dist/web/static/js/editor/tools/flood-fill.js +72 -0
- package/dist/web/static/js/editor/tools/lasso-mask.js +171 -0
- package/dist/web/static/js/editor/tools/lasso.js +65 -0
- package/dist/web/static/js/editor/tools/move.js +79 -0
- package/dist/web/static/js/editor/tools/stroke.js +123 -0
- package/dist/web/static/js/editor/tools/transform-drag.js +174 -0
- package/dist/web/static/js/editor/tools/transform-handles.js +271 -0
- package/dist/web/static/js/editor/tools/transform-session.js +381 -0
- package/dist/web/static/js/editor/tools/wand.js +46 -0
- package/dist/web/static/js/editor/wire-import.js +148 -0
- package/dist/web/static/js/editor/wire-inpaint-controls.js +164 -0
- package/dist/web/static/js/editor/wire-merge-buttons.js +103 -0
- package/dist/web/static/js/editor/wire-selection-controls.js +170 -0
- package/dist/web/static/js/editor/wire-topbar-menus.js +174 -0
- package/dist/web/static/js/editor/wire-topbar-overflow.js +49 -0
- package/dist/web/static/js/editor/wire-topbar.js +188 -0
- package/dist/web/static/js/emailInbox.js +1245 -0
- package/dist/web/static/js/emailLibrary/replyRecipients.js +27 -0
- package/dist/web/static/js/emailLibrary/signatureFold.js +339 -0
- package/dist/web/static/js/emailLibrary/state.js +34 -0
- package/dist/web/static/js/emailLibrary/utils.js +202 -0
- package/dist/web/static/js/emailLibrary.js +5217 -0
- package/dist/web/static/js/emojiPicker.js +311 -0
- package/dist/web/static/js/escMenuStack.js +102 -0
- package/dist/web/static/js/fileHandler.js +295 -0
- package/dist/web/static/js/gallery.js +2835 -0
- package/dist/web/static/js/galleryEditor.js +3798 -0
- package/dist/web/static/js/group.js +955 -0
- package/dist/web/static/js/init.js +405 -0
- package/dist/web/static/js/keyboard-shortcuts.js +292 -0
- package/dist/web/static/js/langIcons.js +187 -0
- package/dist/web/static/js/markdown/tableRow.js +19 -0
- package/dist/web/static/js/markdown.js +806 -0
- package/dist/web/static/js/memory.js +1418 -0
- package/dist/web/static/js/modalManager.js +1552 -0
- package/dist/web/static/js/modalSnap.js +782 -0
- package/dist/web/static/js/model/matchKey.js +19 -0
- package/dist/web/static/js/modelPicker.js +695 -0
- package/dist/web/static/js/modelSort.js +33 -0
- package/dist/web/static/js/models.js +642 -0
- package/dist/web/static/js/notes.js +5054 -0
- package/dist/web/static/js/package.json +1 -0
- package/dist/web/static/js/platform.js +47 -0
- package/dist/web/static/js/presets.js +1110 -0
- package/dist/web/static/js/providers.js +93 -0
- package/dist/web/static/js/rag.js +177 -0
- package/dist/web/static/js/research/jobs.js +335 -0
- package/dist/web/static/js/research/panel.js +1233 -0
- package/dist/web/static/js/researchSynapse.js +225 -0
- package/dist/web/static/js/search-chat.js +201 -0
- package/dist/web/static/js/search.js +52 -0
- package/dist/web/static/js/section-management.js +260 -0
- package/dist/web/static/js/sessions.js +3108 -0
- package/dist/web/static/js/settings.js +4991 -0
- package/dist/web/static/js/sidebar-layout.js +573 -0
- package/dist/web/static/js/signature.js +504 -0
- package/dist/web/static/js/skills.js +1908 -0
- package/dist/web/static/js/slashAutocomplete.js +267 -0
- package/dist/web/static/js/slashCommands.js +6099 -0
- package/dist/web/static/js/spinner.js +406 -0
- package/dist/web/static/js/storage.js +123 -0
- package/dist/web/static/js/tasks.js +2699 -0
- package/dist/web/static/js/theme.js +2086 -0
- package/dist/web/static/js/tileManager.js +386 -0
- package/dist/web/static/js/tourAutoplay.js +133 -0
- package/dist/web/static/js/tourHints.js +179 -0
- package/dist/web/static/js/tts-ai.js +521 -0
- package/dist/web/static/js/ui.js +1288 -0
- package/dist/web/static/js/util/ordinal.js +13 -0
- package/dist/web/static/js/voiceRecorder.js +283 -0
- package/dist/web/static/js/windowDrag.js +326 -0
- package/dist/web/static/js/windowResize.js +233 -0
- package/dist/web/static/landing.html +824 -0
- package/dist/web/static/lib/docx.umd.min.js +20116 -0
- package/dist/web/static/lib/highlight.min.js +1213 -0
- package/dist/web/static/lib/html2pdf.bundle.min.js +3 -0
- package/dist/web/static/lib/mammoth.browser.min.js +21 -0
- package/dist/web/static/lib/qrcode.min.js +8 -0
- package/dist/web/static/lib/xlsx.full.min.js +24 -0
- package/dist/web/static/login.html +582 -0
- package/dist/web/static/manifest.json +15 -0
- package/dist/web/static/style.css +35733 -0
- package/dist/web/static/sw.js +144 -0
- package/dist/workflows/engine.d.ts +162 -0
- package/dist/workflows/engine.d.ts.map +1 -0
- package/dist/workflows/engine.js +625 -0
- package/dist/workflows/engine.js.map +1 -0
- package/dist/workflows/index.d.ts +8 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +14 -0
- package/dist/workflows/index.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/voice/stt.ts
|
|
3
|
+
* =================
|
|
4
|
+
* BERU Speech-to-Text — offline-first.
|
|
5
|
+
*
|
|
6
|
+
* Python provider priority (ported verbatim into `_detectBackend()`):
|
|
7
|
+
* 1. moonshine — fastest edge STT
|
|
8
|
+
* 2. faster-whisper — GPU-accelerated Whisper
|
|
9
|
+
* 3. whisper-cpp — CPU GGUF Whisper via ctranslate2
|
|
10
|
+
* 4. speech_recognition + pocketsphinx (offline)
|
|
11
|
+
* 5. none — no audio input available
|
|
12
|
+
*
|
|
13
|
+
* ── Node reality ─────────────────────────────────────────────────────────────
|
|
14
|
+
* None of those engines exist as installable Node packages on this machine:
|
|
15
|
+
* `moonshine-onnx`, `faster-whisper`, `openai-whisper`, `SpeechRecognition`,
|
|
16
|
+
* `sounddevice`, `pyaudio` are all Python-only.
|
|
17
|
+
*
|
|
18
|
+
* TODO(port): STT is fully degraded. The class, its public API and its
|
|
19
|
+
* `info()` / `is_available` contract are preserved, and an engine can be
|
|
20
|
+
* plugged in at runtime with `registerSTTBackend()`. Recommended Node
|
|
21
|
+
* replacements to investigate:
|
|
22
|
+
* - `whisper.cpp` binary (`whisper-cli`) shelled out via node:child_process
|
|
23
|
+
* - `@huggingface/transformers` (Whisper ONNX) — NOT installed on this box
|
|
24
|
+
* - `vosk` / `sherpa-onnx-node` native bindings
|
|
25
|
+
*
|
|
26
|
+
* BERU is always offline. Never sends audio to a cloud.
|
|
27
|
+
*/
|
|
28
|
+
import { SAMPLE_RATE } from "./wav.js";
|
|
29
|
+
export declare const WAKE_WORDS: string[];
|
|
30
|
+
/** Moonshine model sizes: "moonshine/tiny" or "moonshine/base". */
|
|
31
|
+
export declare const MOONSHINE_MODEL: string;
|
|
32
|
+
export declare const WHISPER_MODEL: string;
|
|
33
|
+
export { SAMPLE_RATE };
|
|
34
|
+
export declare const CHUNK = 1024;
|
|
35
|
+
/** Backend ids, matching the strings the Python `_backend` attribute held. */
|
|
36
|
+
export type STTBackendName = "auto" | "moonshine" | "faster_whisper" | "whisper" | "speech_recognition" | "none";
|
|
37
|
+
/** Actionable error text returned by `transcribe()` when no engine is wired up. */
|
|
38
|
+
export declare const STT_UNAVAILABLE_ERROR: string;
|
|
39
|
+
export interface STTTranscribeOptions {
|
|
40
|
+
language: string;
|
|
41
|
+
/** Whisper-style size hint, e.g. "tiny" / "base". */
|
|
42
|
+
modelSize?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface STTBackend {
|
|
45
|
+
/** Human readable name shown by `info()`. */
|
|
46
|
+
readonly name: string;
|
|
47
|
+
/** True when the engine is actually usable (model present, binary found, …). */
|
|
48
|
+
available(): boolean;
|
|
49
|
+
transcribe(audioPath: string, options: STTTranscribeOptions): Promise<string | null>;
|
|
50
|
+
/** Optional: transcribe raw 16-bit 16 kHz mono PCM without touching disk. */
|
|
51
|
+
transcribePcm?(pcm: Buffer, options: STTTranscribeOptions): Promise<string | null>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register (or replace) an STT engine at runtime. This is the documented escape
|
|
55
|
+
* hatch for the missing Python providers — see `STT_UNAVAILABLE_ERROR`.
|
|
56
|
+
*/
|
|
57
|
+
export declare function registerSTTBackend(name: string, backend: STTBackend): void;
|
|
58
|
+
export declare function unregisterSTTBackend(name: string): void;
|
|
59
|
+
export declare function getSTTBackend(name: string): STTBackend | undefined;
|
|
60
|
+
export interface STTInfo {
|
|
61
|
+
backend: string;
|
|
62
|
+
language: string;
|
|
63
|
+
available: boolean;
|
|
64
|
+
wake_words: string[];
|
|
65
|
+
model: string;
|
|
66
|
+
}
|
|
67
|
+
export declare class STTEngine {
|
|
68
|
+
/** BERU's voice input engine — offline-first, zero cloud. */
|
|
69
|
+
provider: string;
|
|
70
|
+
language: string;
|
|
71
|
+
modelSize: string | null;
|
|
72
|
+
private _backend;
|
|
73
|
+
private _model;
|
|
74
|
+
private _lastError;
|
|
75
|
+
private _loggedDegraded;
|
|
76
|
+
constructor(provider?: string, language?: string, modelSize?: string | null);
|
|
77
|
+
/**
|
|
78
|
+
* Mirrors the Python `_detect_backend()`. Each Python `import X` probe is
|
|
79
|
+
* replaced by "is a backend registered under that id, or is its native
|
|
80
|
+
* prerequisite discoverable on this machine".
|
|
81
|
+
*/
|
|
82
|
+
private _detectBackend;
|
|
83
|
+
/** Name of the selected backend (Python: `self._backend`). */
|
|
84
|
+
get backend(): string;
|
|
85
|
+
/** Last `[ERROR] …` string produced by a degraded path. */
|
|
86
|
+
get lastError(): string;
|
|
87
|
+
get is_available(): boolean;
|
|
88
|
+
get isAvailable(): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Capture from microphone and return transcription.
|
|
91
|
+
* Blocks until the phrase ends or the timeout expires.
|
|
92
|
+
*
|
|
93
|
+
* Returns `null` when nothing was heard — this matches the Python contract.
|
|
94
|
+
* When no engine is available the descriptive error lands in `lastError`.
|
|
95
|
+
*/
|
|
96
|
+
listen(timeout?: number, maxPhrase?: number): Promise<string | null>;
|
|
97
|
+
/**
|
|
98
|
+
* Transcribe an audio file.
|
|
99
|
+
*
|
|
100
|
+
* Degradation contract: when no engine is available this resolves to a
|
|
101
|
+
* clear, actionable `[ERROR] …` string instead of throwing, so callers that
|
|
102
|
+
* render the return value directly show the operator what to install.
|
|
103
|
+
*/
|
|
104
|
+
transcribe(audioPath: string): Promise<string | null>;
|
|
105
|
+
/**
|
|
106
|
+
* TODO(port): `moonshine-onnx` is a Python package with no Node port. The
|
|
107
|
+
* lazy-load slot is preserved so a registered backend can populate `_model`.
|
|
108
|
+
* Recommended replacement: `@huggingface/transformers` Whisper ONNX (NOT
|
|
109
|
+
* installed on this machine) or the `whisper.cpp` CLI.
|
|
110
|
+
*/
|
|
111
|
+
private _getMoonshine;
|
|
112
|
+
private _listenMoonshine;
|
|
113
|
+
private _listenWhisperMic;
|
|
114
|
+
private _listenSr;
|
|
115
|
+
/**
|
|
116
|
+
* Record with the registered audio driver plus energy-based VAD.
|
|
117
|
+
* Returns raw 16-bit 16 kHz mono PCM, or `null` when no driver is registered
|
|
118
|
+
* or nothing was heard.
|
|
119
|
+
*
|
|
120
|
+
* TODO(port): Python used `sounddevice` (PortAudio). No Node audio I/O
|
|
121
|
+
* dependency is installed — see `setAudioInputDriver()` in src/voice/wav.ts.
|
|
122
|
+
*/
|
|
123
|
+
_recordSounddevice(timeout: number): Promise<Buffer | null>;
|
|
124
|
+
/**
|
|
125
|
+
* Save raw 16-bit mono PCM at 16 kHz to a WAV file.
|
|
126
|
+
* Replaces Python `_save_wav()` which used numpy + the `wave` module.
|
|
127
|
+
*/
|
|
128
|
+
_saveWav(pcm: Buffer, filePath: string): void;
|
|
129
|
+
/** Copy a raw PCM capture to a WAV path. Used by the daemon/loop layers. */
|
|
130
|
+
saveWavFromPcm(pcm: Buffer, filePath: string): void;
|
|
131
|
+
/** RMS of a float capture — kept for parity with the Python VAD maths. */
|
|
132
|
+
rms(samples: Float32Array): number;
|
|
133
|
+
check_wake_word(text: string): boolean;
|
|
134
|
+
checkWakeWord(text: string): boolean;
|
|
135
|
+
info(): STTInfo;
|
|
136
|
+
private _backends_get;
|
|
137
|
+
/** Record the error string, log it once, and (best effort) surface it to the user. */
|
|
138
|
+
private _degraded;
|
|
139
|
+
}
|
|
140
|
+
export declare function get_stt(provider?: string, kwargs?: {
|
|
141
|
+
language?: string;
|
|
142
|
+
modelSize?: string | null;
|
|
143
|
+
}): STTEngine;
|
|
144
|
+
/** camelCase alias of `get_stt`. */
|
|
145
|
+
export declare const getStt: typeof get_stt;
|
|
146
|
+
/** Test/DI hook — replace the singleton. */
|
|
147
|
+
export declare function setStt(engine: STTEngine | null): void;
|
|
148
|
+
//# sourceMappingURL=stt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stt.d.ts","sourceRoot":"","sources":["../../src/voice/stt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/voice/stt.ts
|
|
3
|
+
* =================
|
|
4
|
+
* BERU Speech-to-Text — offline-first.
|
|
5
|
+
*
|
|
6
|
+
* Python provider priority (ported verbatim into `_detectBackend()`):
|
|
7
|
+
* 1. moonshine — fastest edge STT
|
|
8
|
+
* 2. faster-whisper — GPU-accelerated Whisper
|
|
9
|
+
* 3. whisper-cpp — CPU GGUF Whisper via ctranslate2
|
|
10
|
+
* 4. speech_recognition + pocketsphinx (offline)
|
|
11
|
+
* 5. none — no audio input available
|
|
12
|
+
*
|
|
13
|
+
* ── Node reality ─────────────────────────────────────────────────────────────
|
|
14
|
+
* None of those engines exist as installable Node packages on this machine:
|
|
15
|
+
* `moonshine-onnx`, `faster-whisper`, `openai-whisper`, `SpeechRecognition`,
|
|
16
|
+
* `sounddevice`, `pyaudio` are all Python-only.
|
|
17
|
+
*
|
|
18
|
+
* TODO(port): STT is fully degraded. The class, its public API and its
|
|
19
|
+
* `info()` / `is_available` contract are preserved, and an engine can be
|
|
20
|
+
* plugged in at runtime with `registerSTTBackend()`. Recommended Node
|
|
21
|
+
* replacements to investigate:
|
|
22
|
+
* - `whisper.cpp` binary (`whisper-cli`) shelled out via node:child_process
|
|
23
|
+
* - `@huggingface/transformers` (Whisper ONNX) — NOT installed on this box
|
|
24
|
+
* - `vosk` / `sherpa-onnx-node` native bindings
|
|
25
|
+
*
|
|
26
|
+
* BERU is always offline. Never sends audio to a cloud.
|
|
27
|
+
*/
|
|
28
|
+
import fs from "node:fs";
|
|
29
|
+
import os from "node:os";
|
|
30
|
+
import path from "node:path";
|
|
31
|
+
import { getLogger } from "../core/logger.js";
|
|
32
|
+
import { whichSync } from "../core/which.js";
|
|
33
|
+
import { loadConfig } from "../core/config.js";
|
|
34
|
+
import { AUDIO_INPUT_MISSING_ERROR, SAMPLE_RATE, getAudioInputDriver, pcm16MeanAbs, rmsFloat, writeWav, } from "./wav.js";
|
|
35
|
+
const logger = getLogger();
|
|
36
|
+
export const WAKE_WORDS = ["beru activate", "beru", "shadow monarch", "marshal", "my liege"];
|
|
37
|
+
/** Moonshine model sizes: "moonshine/tiny" or "moonshine/base". */
|
|
38
|
+
export const MOONSHINE_MODEL = process.env.BERU_MOONSHINE_MODEL ?? "moonshine/tiny";
|
|
39
|
+
export const WHISPER_MODEL = process.env.BERU_WHISPER_MODEL ?? "tiny";
|
|
40
|
+
export { SAMPLE_RATE };
|
|
41
|
+
export const CHUNK = 1024;
|
|
42
|
+
/** Actionable error text returned by `transcribe()` when no engine is wired up. */
|
|
43
|
+
export const STT_UNAVAILABLE_ERROR = "[ERROR] speech-to-text unavailable — no STT engine is installed for Node.js " +
|
|
44
|
+
"(the Python stack used moonshine-onnx / faster-whisper / openai-whisper / " +
|
|
45
|
+
"SpeechRecognition, none of which have installable Node equivalents here). " +
|
|
46
|
+
"Enable it by registering an engine: registerSTTBackend('my-engine', impl) " +
|
|
47
|
+
"(see registerSTTBackend in src/voice/stt.ts), or put a whisper.cpp " +
|
|
48
|
+
"`whisper-cli` binary on PATH.";
|
|
49
|
+
const _backends = new Map();
|
|
50
|
+
/**
|
|
51
|
+
* Register (or replace) an STT engine at runtime. This is the documented escape
|
|
52
|
+
* hatch for the missing Python providers — see `STT_UNAVAILABLE_ERROR`.
|
|
53
|
+
*/
|
|
54
|
+
export function registerSTTBackend(name, backend) {
|
|
55
|
+
_backends.set(name, backend);
|
|
56
|
+
}
|
|
57
|
+
export function unregisterSTTBackend(name) {
|
|
58
|
+
_backends.delete(name);
|
|
59
|
+
}
|
|
60
|
+
export function getSTTBackend(name) {
|
|
61
|
+
return _backends.get(name);
|
|
62
|
+
}
|
|
63
|
+
export class STTEngine {
|
|
64
|
+
/** BERU's voice input engine — offline-first, zero cloud. */
|
|
65
|
+
provider;
|
|
66
|
+
language;
|
|
67
|
+
modelSize;
|
|
68
|
+
_backend;
|
|
69
|
+
_model = null;
|
|
70
|
+
_lastError = "";
|
|
71
|
+
_loggedDegraded = "";
|
|
72
|
+
constructor(provider = "auto", language = "en", modelSize = null) {
|
|
73
|
+
this.provider = provider;
|
|
74
|
+
this.language = language;
|
|
75
|
+
this.modelSize = modelSize;
|
|
76
|
+
this._backend = this._detectBackend();
|
|
77
|
+
this._model = null; // lazy-loaded
|
|
78
|
+
}
|
|
79
|
+
/* ── Backend detection ──────────────────────────────────────────────────── */
|
|
80
|
+
/**
|
|
81
|
+
* Mirrors the Python `_detect_backend()`. Each Python `import X` probe is
|
|
82
|
+
* replaced by "is a backend registered under that id, or is its native
|
|
83
|
+
* prerequisite discoverable on this machine".
|
|
84
|
+
*/
|
|
85
|
+
_detectBackend() {
|
|
86
|
+
if (this.provider !== "auto")
|
|
87
|
+
return this.provider;
|
|
88
|
+
// 1. Moonshine (best edge)
|
|
89
|
+
if (_backends.has("moonshine"))
|
|
90
|
+
return "moonshine";
|
|
91
|
+
// 2. faster-whisper (GPU-accelerated)
|
|
92
|
+
if (_backends.has("faster_whisper"))
|
|
93
|
+
return "faster_whisper";
|
|
94
|
+
// 3. openai-whisper / whisper.cpp (CPU)
|
|
95
|
+
if (_backends.has("whisper"))
|
|
96
|
+
return "whisper";
|
|
97
|
+
if (whichSync("whisper-cli") || whichSync("whisper"))
|
|
98
|
+
return "whisper";
|
|
99
|
+
// 4. SpeechRecognition + pocketsphinx (pure offline)
|
|
100
|
+
if (_backends.has("speech_recognition"))
|
|
101
|
+
return "speech_recognition";
|
|
102
|
+
return "none";
|
|
103
|
+
}
|
|
104
|
+
/** Name of the selected backend (Python: `self._backend`). */
|
|
105
|
+
get backend() {
|
|
106
|
+
return this._backend;
|
|
107
|
+
}
|
|
108
|
+
/** Last `[ERROR] …` string produced by a degraded path. */
|
|
109
|
+
get lastError() {
|
|
110
|
+
return this._lastError;
|
|
111
|
+
}
|
|
112
|
+
get is_available() {
|
|
113
|
+
return this._backend !== "none";
|
|
114
|
+
}
|
|
115
|
+
get isAvailable() {
|
|
116
|
+
return this.is_available;
|
|
117
|
+
}
|
|
118
|
+
/* ── Public API ─────────────────────────────────────────────────────────── */
|
|
119
|
+
/**
|
|
120
|
+
* Capture from microphone and return transcription.
|
|
121
|
+
* Blocks until the phrase ends or the timeout expires.
|
|
122
|
+
*
|
|
123
|
+
* Returns `null` when nothing was heard — this matches the Python contract.
|
|
124
|
+
* When no engine is available the descriptive error lands in `lastError`.
|
|
125
|
+
*/
|
|
126
|
+
async listen(timeout = 8, maxPhrase = 30) {
|
|
127
|
+
if (!this.is_available) {
|
|
128
|
+
this._degraded(STT_UNAVAILABLE_ERROR);
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
if (this._backend === "moonshine")
|
|
133
|
+
return await this._listenMoonshine(timeout);
|
|
134
|
+
if (this._backend === "faster_whisper" || this._backend === "whisper") {
|
|
135
|
+
return await this._listenWhisperMic(timeout);
|
|
136
|
+
}
|
|
137
|
+
return await this._listenSr(timeout, maxPhrase);
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
logger.debug(`[STT] listen failed (${this._backend}): ${errText(e)}`);
|
|
141
|
+
this._degraded(`[ERROR] STT listen failed (${this._backend}): ${errText(e)}`);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Transcribe an audio file.
|
|
147
|
+
*
|
|
148
|
+
* Degradation contract: when no engine is available this resolves to a
|
|
149
|
+
* clear, actionable `[ERROR] …` string instead of throwing, so callers that
|
|
150
|
+
* render the return value directly show the operator what to install.
|
|
151
|
+
*/
|
|
152
|
+
async transcribe(audioPath) {
|
|
153
|
+
const backend = this._backends_get();
|
|
154
|
+
if (backend) {
|
|
155
|
+
try {
|
|
156
|
+
const out = await backend.transcribe(audioPath, {
|
|
157
|
+
language: this.language,
|
|
158
|
+
modelSize: this.modelSize ?? undefined,
|
|
159
|
+
});
|
|
160
|
+
return out ? out.trim() || null : null;
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
const msg = `[ERROR] STT backend '${backend.name}' failed on ${audioPath}: ${errText(e)}`;
|
|
164
|
+
logger.debug(`[STT] transcribe failed: ${errText(e)}`);
|
|
165
|
+
this._degraded(msg);
|
|
166
|
+
return msg;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (this._backend === "none") {
|
|
170
|
+
this._degraded(STT_UNAVAILABLE_ERROR);
|
|
171
|
+
return STT_UNAVAILABLE_ERROR;
|
|
172
|
+
}
|
|
173
|
+
// A Python-only backend was selected (or a whisper binary is on PATH that we
|
|
174
|
+
// have no binding for) — report precisely which capability is missing.
|
|
175
|
+
const msg = `[ERROR] STT backend '${this._backend}' is selected but has no Node.js ` +
|
|
176
|
+
`implementation available. ${STT_UNAVAILABLE_ERROR}`;
|
|
177
|
+
this._degraded(msg);
|
|
178
|
+
return msg;
|
|
179
|
+
}
|
|
180
|
+
/* ── Moonshine ──────────────────────────────────────────────────────────── */
|
|
181
|
+
/**
|
|
182
|
+
* TODO(port): `moonshine-onnx` is a Python package with no Node port. The
|
|
183
|
+
* lazy-load slot is preserved so a registered backend can populate `_model`.
|
|
184
|
+
* Recommended replacement: `@huggingface/transformers` Whisper ONNX (NOT
|
|
185
|
+
* installed on this machine) or the `whisper.cpp` CLI.
|
|
186
|
+
*/
|
|
187
|
+
async _getMoonshine() {
|
|
188
|
+
throw new Error("[ERROR] moonshine-onnx is not available (Python-only, no Node binding). " +
|
|
189
|
+
"registerSTTBackend('moonshine', …) can supply an equivalent engine.");
|
|
190
|
+
}
|
|
191
|
+
async _listenMoonshine(timeout) {
|
|
192
|
+
const audio = await this._recordSounddevice(timeout);
|
|
193
|
+
if (audio === null)
|
|
194
|
+
return null;
|
|
195
|
+
const backend = this._backends_get();
|
|
196
|
+
if (backend) {
|
|
197
|
+
this._model = backend;
|
|
198
|
+
const text = backend.transcribePcm
|
|
199
|
+
? await backend.transcribePcm(audio, {
|
|
200
|
+
language: this.language,
|
|
201
|
+
modelSize: MOONSHINE_MODEL,
|
|
202
|
+
})
|
|
203
|
+
: null;
|
|
204
|
+
return text ? text.trim() || null : null;
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
await this._getMoonshine();
|
|
208
|
+
}
|
|
209
|
+
catch (e) {
|
|
210
|
+
this._degraded(errText(e));
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
/* ── faster-whisper / openai-whisper ────────────────────────────────────── */
|
|
215
|
+
async _listenWhisperMic(timeout) {
|
|
216
|
+
const audio = await this._recordSounddevice(timeout);
|
|
217
|
+
if (audio === null)
|
|
218
|
+
return null;
|
|
219
|
+
const tmp = path.join(os.tmpdir(), `beru-stt-${Date.now()}-${Math.floor(Math.random() * 1e6)}.wav`);
|
|
220
|
+
try {
|
|
221
|
+
this._saveWav(audio, tmp);
|
|
222
|
+
return await this.transcribe(tmp);
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
try {
|
|
226
|
+
fs.unlinkSync(tmp);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
/* best effort, mirrors the Python `except: pass` */
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/* ── SpeechRecognition fallback ─────────────────────────────────────────── */
|
|
234
|
+
async _listenSr(timeout, maxPhrase) {
|
|
235
|
+
// Python used `speech_recognition` + pocketsphinx / vosk. Neither exists for
|
|
236
|
+
// Node. Recording still works if a driver is registered; recognition cannot.
|
|
237
|
+
logger.debug(`[STT] sr listen requested (max_phrase=${maxPhrase}s)`);
|
|
238
|
+
const pcm = await this._recordSounddevice(timeout);
|
|
239
|
+
if (pcm === null)
|
|
240
|
+
return null;
|
|
241
|
+
this._degraded("[ERROR] speech_recognition backend unavailable — pocketsphinx / vosk have " +
|
|
242
|
+
"no Node.js binding here. Register an engine with registerSTTBackend().");
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
/* ── Audio recording helper ─────────────────────────────────────────────── */
|
|
246
|
+
/**
|
|
247
|
+
* Record with the registered audio driver plus energy-based VAD.
|
|
248
|
+
* Returns raw 16-bit 16 kHz mono PCM, or `null` when no driver is registered
|
|
249
|
+
* or nothing was heard.
|
|
250
|
+
*
|
|
251
|
+
* TODO(port): Python used `sounddevice` (PortAudio). No Node audio I/O
|
|
252
|
+
* dependency is installed — see `setAudioInputDriver()` in src/voice/wav.ts.
|
|
253
|
+
*/
|
|
254
|
+
async _recordSounddevice(timeout) {
|
|
255
|
+
const driver = getAudioInputDriver();
|
|
256
|
+
if (!driver) {
|
|
257
|
+
this._degraded(AUDIO_INPUT_MISSING_ERROR);
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
try {
|
|
261
|
+
const opts = {
|
|
262
|
+
maxSeconds: timeout,
|
|
263
|
+
sampleRate: SAMPLE_RATE,
|
|
264
|
+
silenceSeconds: 1.5,
|
|
265
|
+
energyThreshold: Math.round(0.02 * 32767),
|
|
266
|
+
};
|
|
267
|
+
const pcm = await driver.record(opts);
|
|
268
|
+
if (!pcm || pcm.length === 0)
|
|
269
|
+
return null;
|
|
270
|
+
logger.debug(`[STT] recorded ${(pcm.length / 2 / SAMPLE_RATE).toFixed(2)}s ` +
|
|
271
|
+
`(mean_abs=${pcm16MeanAbs(pcm).toFixed(1)})`);
|
|
272
|
+
return pcm;
|
|
273
|
+
}
|
|
274
|
+
catch (e) {
|
|
275
|
+
logger.debug(`[STT] audio driver '${driver.name}' failed: ${errText(e)}`);
|
|
276
|
+
this._degraded(`[ERROR] STT audio capture failed (${driver.name}): ${errText(e)}`);
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Save raw 16-bit mono PCM at 16 kHz to a WAV file.
|
|
282
|
+
* Replaces Python `_save_wav()` which used numpy + the `wave` module.
|
|
283
|
+
*/
|
|
284
|
+
_saveWav(pcm, filePath) {
|
|
285
|
+
writeWav(filePath, pcm, SAMPLE_RATE, 1);
|
|
286
|
+
}
|
|
287
|
+
/** Copy a raw PCM capture to a WAV path. Used by the daemon/loop layers. */
|
|
288
|
+
saveWavFromPcm(pcm, filePath) {
|
|
289
|
+
this._saveWav(pcm, filePath);
|
|
290
|
+
}
|
|
291
|
+
/* ── Helpers ────────────────────────────────────────────────────────────── */
|
|
292
|
+
/** RMS of a float capture — kept for parity with the Python VAD maths. */
|
|
293
|
+
rms(samples) {
|
|
294
|
+
return rmsFloat(samples);
|
|
295
|
+
}
|
|
296
|
+
check_wake_word(text) {
|
|
297
|
+
const lower = text.toLowerCase();
|
|
298
|
+
return WAKE_WORDS.some((w) => lower.includes(w));
|
|
299
|
+
}
|
|
300
|
+
checkWakeWord(text) {
|
|
301
|
+
return this.check_wake_word(text);
|
|
302
|
+
}
|
|
303
|
+
info() {
|
|
304
|
+
return {
|
|
305
|
+
backend: this._backend,
|
|
306
|
+
language: this.language,
|
|
307
|
+
available: this.is_available,
|
|
308
|
+
wake_words: WAKE_WORDS,
|
|
309
|
+
model: this.modelSize ?? "(default)",
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/* ── internals ──────────────────────────────────────────────────────────── */
|
|
313
|
+
_backends_get() {
|
|
314
|
+
if (this._backend === "none" || this._backend === "auto")
|
|
315
|
+
return undefined;
|
|
316
|
+
return _backends.get(this._backend);
|
|
317
|
+
}
|
|
318
|
+
/** Record the error string, log it once, and (best effort) surface it to the user. */
|
|
319
|
+
_degraded(msg) {
|
|
320
|
+
this._lastError = msg;
|
|
321
|
+
// Deduplicate: polling callers hit these paths every cycle; log each distinct
|
|
322
|
+
// error once so a degraded capability cannot flood the log.
|
|
323
|
+
if (this._loggedDegraded === msg)
|
|
324
|
+
return;
|
|
325
|
+
this._loggedDegraded = msg;
|
|
326
|
+
logger.warning(msg);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/* ── Singleton ─────────────────────────────────────────────────────────────── */
|
|
330
|
+
let _stt = null;
|
|
331
|
+
function sttConfigFromDisk() {
|
|
332
|
+
try {
|
|
333
|
+
const cfg = loadConfig();
|
|
334
|
+
const scfg = (cfg["stt"] ?? {});
|
|
335
|
+
return {
|
|
336
|
+
provider: typeof scfg["provider"] === "string" ? scfg["provider"] : undefined,
|
|
337
|
+
language: typeof scfg["language"] === "string" ? scfg["language"] : undefined,
|
|
338
|
+
model_size: typeof scfg["model_size"] === "string" ? scfg["model_size"] : undefined,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
return {};
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
export function get_stt(provider = "auto", kwargs = {}) {
|
|
346
|
+
if (_stt === null) {
|
|
347
|
+
const scfg = sttConfigFromDisk();
|
|
348
|
+
_stt = new STTEngine(scfg.provider ?? provider, scfg.language ?? kwargs.language ?? "en", scfg.model_size ?? kwargs.modelSize ?? null);
|
|
349
|
+
}
|
|
350
|
+
return _stt;
|
|
351
|
+
}
|
|
352
|
+
/** camelCase alias of `get_stt`. */
|
|
353
|
+
export const getStt = get_stt;
|
|
354
|
+
/** Test/DI hook — replace the singleton. */
|
|
355
|
+
export function setStt(engine) {
|
|
356
|
+
_stt = engine;
|
|
357
|
+
}
|
|
358
|
+
function errText(e) {
|
|
359
|
+
return e instanceof Error ? e.message : String(e);
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=stt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stt.js","sourceRoot":"","sources":["../../src/voice/stt.ts"],"names":[],"mappings":"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"}
|