@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,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AXONIZ CodeTools — source-code intelligence (TypeScript port).
|
|
3
|
+
*
|
|
4
|
+
* Ported from `axoniz/tools/code_tools.py`. Provides linting, formatting,
|
|
5
|
+
* structural visualisation and architectural summaries.
|
|
6
|
+
*
|
|
7
|
+
* Python-stdlib mapping:
|
|
8
|
+
* subprocess.run(["flake8", …]) -> execFileCaptured (no shell)
|
|
9
|
+
* subprocess.run(["black", …]) -> execFileCaptured (no shell)
|
|
10
|
+
* os.walk -> recursive fs.readdirSync(withFileTypes)
|
|
11
|
+
* re.match(r"(class|def)\s+(\w+)") -> /^(?:class|def)\s+([\p{L}\p{N}_]+)/u
|
|
12
|
+
*/
|
|
13
|
+
import fs from "node:fs";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { errText, execFileCaptured } from "./_internal.js";
|
|
16
|
+
export class CodeTools {
|
|
17
|
+
workspace;
|
|
18
|
+
constructor(workspace = ".") {
|
|
19
|
+
this.workspace = path.resolve(workspace);
|
|
20
|
+
}
|
|
21
|
+
/** Translates a relative path into an absolute system path. */
|
|
22
|
+
_resolve(p) {
|
|
23
|
+
return path.isAbsolute(p) ? p : path.join(this.workspace, p);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Static analysis via `flake8` to surface errors / stylistic
|
|
27
|
+
* inconsistencies in Python code.
|
|
28
|
+
*/
|
|
29
|
+
async lint(p) {
|
|
30
|
+
const full = this._resolve(p);
|
|
31
|
+
try {
|
|
32
|
+
const res = await execFileCaptured("flake8", [full, "--max-line-length=120"], {
|
|
33
|
+
timeoutMs: 30_000,
|
|
34
|
+
cwd: this.workspace,
|
|
35
|
+
});
|
|
36
|
+
const out = res.stdout.trim();
|
|
37
|
+
return out.length > 0 ? `Linting Analysis for ${full}:\n${out}` : `No stylistic issues detected in ${full}.`;
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
const err = e;
|
|
41
|
+
if (err && err.code === "ENOENT") {
|
|
42
|
+
return "The 'flake8' utility is not installed. Please run: pip install flake8";
|
|
43
|
+
}
|
|
44
|
+
return `An unexpected error occurred during linting: ${errText(e)}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Reformat Python source with `black`. */
|
|
48
|
+
async formatCode(p) {
|
|
49
|
+
const full = this._resolve(p);
|
|
50
|
+
try {
|
|
51
|
+
const res = await execFileCaptured("black", [full], {
|
|
52
|
+
timeoutMs: 10_000,
|
|
53
|
+
cwd: this.workspace,
|
|
54
|
+
});
|
|
55
|
+
return `Code Formatting Result for ${full}:\n${res.stdout || res.stderr}`;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
const err = e;
|
|
59
|
+
if (err && err.code === "ENOENT") {
|
|
60
|
+
return "The 'black' formatter is not installed. Please run: pip install black";
|
|
61
|
+
}
|
|
62
|
+
return `Formatting failed due to an error: ${errText(e)}`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Visual directory structure to expose the project's physical layout. */
|
|
66
|
+
tree(p = ".", maxDepth = 4) {
|
|
67
|
+
const full = this._resolve(p);
|
|
68
|
+
const lines = [`${full}/`];
|
|
69
|
+
const walk = (directory, prefix, depth) => {
|
|
70
|
+
if (depth > maxDepth)
|
|
71
|
+
return;
|
|
72
|
+
let items;
|
|
73
|
+
try {
|
|
74
|
+
items = fs.readdirSync(directory).slice().sort();
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// PermissionError in Python -> silently stop.
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Exclude non-essential directories to reduce noise.
|
|
81
|
+
const ignore = new Set([".git", "__pycache__", "node_modules", ".venv", "venv", ".axoniz"]);
|
|
82
|
+
items = items.filter((i) => !ignore.has(i));
|
|
83
|
+
items.forEach((item, i) => {
|
|
84
|
+
const isLast = i === items.length - 1;
|
|
85
|
+
const connector = isLast ? "└── " : "├── ";
|
|
86
|
+
const fullPath = path.join(directory, item);
|
|
87
|
+
lines.push(`${prefix}${connector}${item}`);
|
|
88
|
+
let isDir = false;
|
|
89
|
+
try {
|
|
90
|
+
isDir = fs.statSync(fullPath).isDirectory();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
isDir = false;
|
|
94
|
+
}
|
|
95
|
+
if (isDir) {
|
|
96
|
+
const extension = isLast ? " " : "│ ";
|
|
97
|
+
walk(fullPath, prefix + extension, depth + 1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
walk(full, "", 1);
|
|
102
|
+
return lines.join("\n");
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Scan Python sources and extract structural information (classes and
|
|
106
|
+
* function definitions) as a high-level architectural summary.
|
|
107
|
+
*/
|
|
108
|
+
analyze(p = ".") {
|
|
109
|
+
const full = this._resolve(p);
|
|
110
|
+
const summary = [`Architectural Overview: ${full}`];
|
|
111
|
+
const filesToScan = [];
|
|
112
|
+
let isFile = false;
|
|
113
|
+
try {
|
|
114
|
+
isFile = fs.statSync(full).isFile();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
isFile = false;
|
|
118
|
+
}
|
|
119
|
+
if (isFile) {
|
|
120
|
+
if (full.endsWith(".py"))
|
|
121
|
+
filesToScan.push(full);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
for (const root of walkDirs(full)) {
|
|
125
|
+
// Skip internal data and temporary folders.
|
|
126
|
+
if ([".git", "__pycache__", ".axoniz"].some((x) => root.includes(x)))
|
|
127
|
+
continue;
|
|
128
|
+
let entries;
|
|
129
|
+
try {
|
|
130
|
+
entries = fs.readdirSync(root, { withFileTypes: true });
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
for (const ent of entries) {
|
|
136
|
+
if (ent.isFile() && ent.name.endsWith(".py")) {
|
|
137
|
+
filesToScan.push(path.join(root, ent.name));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (filesToScan.length === 0) {
|
|
143
|
+
return `${summary[0]} - No Python source files were found in this directory.`;
|
|
144
|
+
}
|
|
145
|
+
for (const fpath of filesToScan) {
|
|
146
|
+
const rel = path.relative(this.workspace, fpath);
|
|
147
|
+
summary.push(`\nSource File: ${rel}`);
|
|
148
|
+
try {
|
|
149
|
+
const raw = fs.readFileSync(fpath, "utf8");
|
|
150
|
+
for (const rawLine of raw.split("\n")) {
|
|
151
|
+
const line = rawLine.trim();
|
|
152
|
+
if (line.startsWith("class ") || line.startsWith("def ")) {
|
|
153
|
+
const m = /^(class|def)\s+([\p{L}\p{N}_]+)/u.exec(line);
|
|
154
|
+
if (m)
|
|
155
|
+
summary.push(` [${m[1].toUpperCase()}] ${m[2]}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
summary.push(` [ERROR] Failed to read file structure: ${errText(e)}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return summary.join("\n");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/* ── helpers ─────────────────────────────────────────────────────────────── */
|
|
167
|
+
/** Depth-first directory walk mirroring `os.walk` (top-down, root first). */
|
|
168
|
+
function* walkDirs(root) {
|
|
169
|
+
let isDir = false;
|
|
170
|
+
try {
|
|
171
|
+
isDir = fs.statSync(root).isDirectory();
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
isDir = false;
|
|
175
|
+
}
|
|
176
|
+
if (!isDir)
|
|
177
|
+
return;
|
|
178
|
+
yield root;
|
|
179
|
+
let entries;
|
|
180
|
+
try {
|
|
181
|
+
entries = fs.readdirSync(root, { withFileTypes: true });
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
for (const ent of entries) {
|
|
187
|
+
if (ent.isDirectory())
|
|
188
|
+
yield* walkDirs(path.join(root, ent.name));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=code_tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code_tools.js","sourceRoot":"","sources":["../../src/tools/code_tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AXONIZ ComputerTools — GUI awareness and control (TypeScript port).
|
|
3
|
+
*
|
|
4
|
+
* Ported from `axoniz/tools/computer_tools.py`.
|
|
5
|
+
*
|
|
6
|
+
* Python dependency mapping:
|
|
7
|
+
* pyautogui (mouse/keyboard) -> PowerShell P/Invoke against the Win32 API
|
|
8
|
+
* (`SetCursorPos`, `mouse_event`, `keybd_event`). There is no npm
|
|
9
|
+
* dependency available for GUI input, and this project must not gain new
|
|
10
|
+
* ones, so the Win32 calls are driven through `Add-Type`. On non-Windows
|
|
11
|
+
* hosts these capabilities genuinely cannot be provided and every input
|
|
12
|
+
* method returns a clear `[ERROR] ... not supported in this build` string
|
|
13
|
+
* instead of throwing, per the port contract.
|
|
14
|
+
* pyautogui.screenshot / Pillow -> `screenshot-desktop`
|
|
15
|
+
* pytesseract / Tesseract-OCR -> the `tesseract` binary via execFile
|
|
16
|
+
*
|
|
17
|
+
* Screen capture works on Windows/macOS/Linux through `screenshot-desktop`;
|
|
18
|
+
* input control and screen-size queries are Windows-only in this build.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ComputerTools {
|
|
21
|
+
readonly workspace: string;
|
|
22
|
+
private _available;
|
|
23
|
+
private _screenSize;
|
|
24
|
+
private _capture;
|
|
25
|
+
constructor(workspace?: string);
|
|
26
|
+
/** True when a PowerShell host exists for the Win32 input path. */
|
|
27
|
+
private _inputBackend;
|
|
28
|
+
/** Screen capture works wherever `screenshot-desktop` can load its backend. */
|
|
29
|
+
private _captureBackend;
|
|
30
|
+
private _loadCapture;
|
|
31
|
+
/** Mirrors `_check_deps()`: probes the input backend once and caches it. */
|
|
32
|
+
_check_deps(): boolean;
|
|
33
|
+
private _readScreenSize;
|
|
34
|
+
/** Run an input script through PowerShell, returning trimmed stdout. */
|
|
35
|
+
private _runInputScript;
|
|
36
|
+
/** Move the mouse to absolute coordinates (x, y). */
|
|
37
|
+
mouse_move(x: number, y: number): string;
|
|
38
|
+
/** Click at (x, y), or at the current position when omitted. */
|
|
39
|
+
mouse_click(x?: number | null, y?: number | null, button?: string): string;
|
|
40
|
+
/** Type text, forwarding it to the focused window as key events. */
|
|
41
|
+
key_type(text: string, interval?: number): string;
|
|
42
|
+
/** Press a special key (e.g. 'enter', 'esc', 'ctrl', 'alt'). */
|
|
43
|
+
key_press(key: string): string;
|
|
44
|
+
/** Get the primary monitor resolution. */
|
|
45
|
+
screen_size(): string;
|
|
46
|
+
/** Take a screenshot and save it into the workspace. */
|
|
47
|
+
screen_capture(filename?: string): Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Find the coordinates of text on screen using OCR.
|
|
50
|
+
* Requires the `tesseract` binary; if it is absent a clear error string is
|
|
51
|
+
* returned (the Python version raised ImportError for pytesseract).
|
|
52
|
+
*/
|
|
53
|
+
screen_find_text(text: string): Promise<string>;
|
|
54
|
+
/** Tool-name -> callable map, mirroring `as_tool_map()`. */
|
|
55
|
+
as_tool_map(): Record<string, (...args: never[]) => unknown>;
|
|
56
|
+
/** camelCase alias of `as_tool_map()` for TypeScript call sites. */
|
|
57
|
+
asToolMap(): Record<string, (...args: never[]) => unknown>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=computer_tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computer_tools.d.ts","sourceRoot":"","sources":["../../src/tools/computer_tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA4EH,qBAAa,aAAa;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAkC;IAElD,YAAY,SAAS,SAAM,EAE1B;IAID,mEAAmE;IACnE,OAAO,CAAC,aAAa;IAIrB,+EAA+E;IAC/E,OAAO,CAAC,eAAe;YAQT,YAAY;IAa1B,4EAA4E;IAC5E,WAAW,IAAI,OAAO,CAKrB;IAED,OAAO,CAAC,eAAe;IAYvB,wEAAwE;IACxE,OAAO,CAAC,eAAe;IA2BvB,qDAAqD;IACrD,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;IAED,gEAAgE;IAChE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,SAAS,GAAG,MAAM,CAezE;IAID,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,MAAM,CAa9C;IAED,gEAAgE;IAChE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ7B;IAID,0CAA0C;IAC1C,WAAW,IAAI,MAAM,CAGpB;IAED,wDAAwD;IAClD,cAAc,CAAC,QAAQ,SAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE;IAED;;;;OAIG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCpD;IAED,4DAA4D;IAC5D,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,CAU3D;IAED,oEAAoE;IACpE,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,CAEzD;CACF"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AXONIZ ComputerTools — GUI awareness and control (TypeScript port).
|
|
3
|
+
*
|
|
4
|
+
* Ported from `axoniz/tools/computer_tools.py`.
|
|
5
|
+
*
|
|
6
|
+
* Python dependency mapping:
|
|
7
|
+
* pyautogui (mouse/keyboard) -> PowerShell P/Invoke against the Win32 API
|
|
8
|
+
* (`SetCursorPos`, `mouse_event`, `keybd_event`). There is no npm
|
|
9
|
+
* dependency available for GUI input, and this project must not gain new
|
|
10
|
+
* ones, so the Win32 calls are driven through `Add-Type`. On non-Windows
|
|
11
|
+
* hosts these capabilities genuinely cannot be provided and every input
|
|
12
|
+
* method returns a clear `[ERROR] ... not supported in this build` string
|
|
13
|
+
* instead of throwing, per the port contract.
|
|
14
|
+
* pyautogui.screenshot / Pillow -> `screenshot-desktop`
|
|
15
|
+
* pytesseract / Tesseract-OCR -> the `tesseract` binary via execFile
|
|
16
|
+
*
|
|
17
|
+
* Screen capture works on Windows/macOS/Linux through `screenshot-desktop`;
|
|
18
|
+
* input control and screen-size queries are Windows-only in this build.
|
|
19
|
+
*/
|
|
20
|
+
import { spawnSync } from "node:child_process";
|
|
21
|
+
import { createRequire } from "node:module";
|
|
22
|
+
import fs from "node:fs";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
import { whichSync } from "../core/which.js";
|
|
25
|
+
import { errText, execFileCaptured } from "./_internal.js";
|
|
26
|
+
const requireCjs = createRequire(import.meta.url);
|
|
27
|
+
/** Common pyautogui key names -> Windows virtual-key codes. */
|
|
28
|
+
const VK_CODES = {
|
|
29
|
+
enter: 0x0d,
|
|
30
|
+
return: 0x0d,
|
|
31
|
+
tab: 0x09,
|
|
32
|
+
esc: 0x1b,
|
|
33
|
+
escape: 0x1b,
|
|
34
|
+
space: 0x20,
|
|
35
|
+
backspace: 0x08,
|
|
36
|
+
delete: 0x2e,
|
|
37
|
+
del: 0x2e,
|
|
38
|
+
insert: 0x2d,
|
|
39
|
+
home: 0x24,
|
|
40
|
+
end: 0x23,
|
|
41
|
+
pageup: 0x21,
|
|
42
|
+
pagedown: 0x22,
|
|
43
|
+
up: 0x26,
|
|
44
|
+
down: 0x28,
|
|
45
|
+
left: 0x25,
|
|
46
|
+
right: 0x27,
|
|
47
|
+
shift: 0x10,
|
|
48
|
+
ctrl: 0x11,
|
|
49
|
+
control: 0x11,
|
|
50
|
+
alt: 0x12,
|
|
51
|
+
win: 0x5b,
|
|
52
|
+
capslock: 0x14,
|
|
53
|
+
f1: 0x70,
|
|
54
|
+
f2: 0x71,
|
|
55
|
+
f3: 0x72,
|
|
56
|
+
f4: 0x73,
|
|
57
|
+
f5: 0x74,
|
|
58
|
+
f6: 0x75,
|
|
59
|
+
f7: 0x76,
|
|
60
|
+
f8: 0x77,
|
|
61
|
+
f9: 0x78,
|
|
62
|
+
f10: 0x79,
|
|
63
|
+
f11: 0x7a,
|
|
64
|
+
f12: 0x7b,
|
|
65
|
+
};
|
|
66
|
+
const NOT_SUPPORTED = "[ERROR] Mouse/keyboard control is not supported in this build (no pyautogui equivalent is available on Node; Win32 input control requires Windows).";
|
|
67
|
+
/** P/Invoke prelude shared by every input script. */
|
|
68
|
+
const WIN32_PRELUDE = `
|
|
69
|
+
$ErrorActionPreference = 'Stop'
|
|
70
|
+
Add-Type -Namespace Axn -Name Ui -MemberDefinition @'
|
|
71
|
+
[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern bool SetCursorPos(int X, int Y);
|
|
72
|
+
[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, System.UIntPtr dwExtraInfo);
|
|
73
|
+
[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, System.UIntPtr dwExtraInfo);
|
|
74
|
+
public static void Move(int x, int y) { SetCursorPos(x, y); }
|
|
75
|
+
public static void Press(uint down, uint up) { mouse_event(down, 0, 0, 0, System.UIntPtr.Zero); mouse_event(up, 0, 0, 0, System.UIntPtr.Zero); }
|
|
76
|
+
public static void Key(byte vk) { keybd_event(vk, 0, 0, System.UIntPtr.Zero); keybd_event(vk, 0, 2, System.UIntPtr.Zero); }
|
|
77
|
+
'@
|
|
78
|
+
`;
|
|
79
|
+
export class ComputerTools {
|
|
80
|
+
workspace;
|
|
81
|
+
_available = null;
|
|
82
|
+
_screenSize = [0, 0];
|
|
83
|
+
_capture;
|
|
84
|
+
constructor(workspace = ".") {
|
|
85
|
+
this.workspace = path.resolve(workspace);
|
|
86
|
+
}
|
|
87
|
+
/* ── capability detection ──────────────────────────────────────────────── */
|
|
88
|
+
/** True when a PowerShell host exists for the Win32 input path. */
|
|
89
|
+
_inputBackend() {
|
|
90
|
+
return process.platform === "win32" && Boolean(whichSync("powershell") ?? whichSync("pwsh"));
|
|
91
|
+
}
|
|
92
|
+
/** Screen capture works wherever `screenshot-desktop` can load its backend. */
|
|
93
|
+
_captureBackend() {
|
|
94
|
+
return (process.platform === "win32" ||
|
|
95
|
+
process.platform === "darwin" ||
|
|
96
|
+
process.platform === "linux");
|
|
97
|
+
}
|
|
98
|
+
async _loadCapture() {
|
|
99
|
+
if (this._capture !== undefined)
|
|
100
|
+
return this._capture;
|
|
101
|
+
try {
|
|
102
|
+
// CommonJS package without bundled types; loaded through createRequire.
|
|
103
|
+
const mod = requireCjs("screenshot-desktop");
|
|
104
|
+
const candidate = typeof mod === "function" ? mod : mod.default;
|
|
105
|
+
this._capture = typeof candidate === "function" ? candidate : null;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
this._capture = null;
|
|
109
|
+
}
|
|
110
|
+
return this._capture;
|
|
111
|
+
}
|
|
112
|
+
/** Mirrors `_check_deps()`: probes the input backend once and caches it. */
|
|
113
|
+
_check_deps() {
|
|
114
|
+
if (this._available !== null)
|
|
115
|
+
return this._available;
|
|
116
|
+
this._available = this._inputBackend();
|
|
117
|
+
if (this._available)
|
|
118
|
+
this._readScreenSize();
|
|
119
|
+
return this._available;
|
|
120
|
+
}
|
|
121
|
+
_readScreenSize() {
|
|
122
|
+
const size = this._runInputScript(`
|
|
123
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
124
|
+
$b = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
|
|
125
|
+
Write-Output ($b.Width.ToString() + 'x' + $b.Height.ToString())
|
|
126
|
+
`);
|
|
127
|
+
if (size.ok) {
|
|
128
|
+
const m = /^(\d+)x(\d+)$/.exec(size.message.trim());
|
|
129
|
+
if (m)
|
|
130
|
+
this._screenSize = [Number(m[1]), Number(m[2])];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Run an input script through PowerShell, returning trimmed stdout. */
|
|
134
|
+
_runInputScript(body) {
|
|
135
|
+
if (!this._inputBackend())
|
|
136
|
+
return { ok: false, message: NOT_SUPPORTED };
|
|
137
|
+
const host = whichSync("powershell") ?? whichSync("pwsh");
|
|
138
|
+
if (!host)
|
|
139
|
+
return { ok: false, message: NOT_SUPPORTED };
|
|
140
|
+
const script = `${WIN32_PRELUDE}\n${body}`;
|
|
141
|
+
const encoded = Buffer.from(script, "utf16le").toString("base64");
|
|
142
|
+
const res = spawnSync(host, ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-EncodedCommand", encoded], { timeout: 20_000, windowsHide: true, encoding: "utf8" });
|
|
143
|
+
if (res.error) {
|
|
144
|
+
const e = res.error;
|
|
145
|
+
if (e.code === "ETIMEDOUT")
|
|
146
|
+
return { ok: false, message: "[ERROR] input command timed out" };
|
|
147
|
+
return { ok: false, message: `[ERROR] ${e.message}` };
|
|
148
|
+
}
|
|
149
|
+
const stdout = typeof res.stdout === "string" ? res.stdout : "";
|
|
150
|
+
const stderr = typeof res.stderr === "string" ? res.stderr : "";
|
|
151
|
+
if (res.status !== 0) {
|
|
152
|
+
const detail = (stderr || stdout).trim().split("\n").slice(0, 4).join(" ").slice(0, 300);
|
|
153
|
+
return { ok: false, message: `[ERROR] ${detail || `exit ${res.status}`}` };
|
|
154
|
+
}
|
|
155
|
+
return { ok: true, message: stdout.trim() };
|
|
156
|
+
}
|
|
157
|
+
/* ── mouse ─────────────────────────────────────────────────────────────── */
|
|
158
|
+
/** Move the mouse to absolute coordinates (x, y). */
|
|
159
|
+
mouse_move(x, y) {
|
|
160
|
+
if (!this._check_deps())
|
|
161
|
+
return NOT_SUPPORTED;
|
|
162
|
+
const res = this._runInputScript(`[Axn.Ui]::Move(${Math.trunc(x)}, ${Math.trunc(y)})`);
|
|
163
|
+
return res.ok ? `[OK] Mouse moved to (${x}, ${y})` : `[ERROR] mouse_move failed: ${res.message}`;
|
|
164
|
+
}
|
|
165
|
+
/** Click at (x, y), or at the current position when omitted. */
|
|
166
|
+
mouse_click(x, y, button = "left") {
|
|
167
|
+
if (!this._check_deps())
|
|
168
|
+
return NOT_SUPPORTED;
|
|
169
|
+
const down = buttonFlagDown(button);
|
|
170
|
+
const up = buttonFlagUp(button);
|
|
171
|
+
if (down === null || up === null) {
|
|
172
|
+
return `[ERROR] mouse_click failed: unsupported button '${button}'`;
|
|
173
|
+
}
|
|
174
|
+
const hasX = x !== null && x !== undefined;
|
|
175
|
+
const hasY = y !== null && y !== undefined;
|
|
176
|
+
const move = hasX || hasY ? `[Axn.Ui]::Move(${Math.trunc(Number(x ?? 0))}, ${Math.trunc(Number(y ?? 0))})\n` : "";
|
|
177
|
+
const res = this._runInputScript(`${move}[Axn.Ui]::Press(${down}, ${up})`);
|
|
178
|
+
const label = button.charAt(0).toUpperCase() + button.slice(1);
|
|
179
|
+
return res.ok
|
|
180
|
+
? `[OK] ${label} click at (${hasX ? x : "current"}, ${hasY ? y : "current"})`
|
|
181
|
+
: `[ERROR] mouse_click failed: ${res.message}`;
|
|
182
|
+
}
|
|
183
|
+
/* ── keyboard ──────────────────────────────────────────────────────────── */
|
|
184
|
+
/** Type text, forwarding it to the focused window as key events. */
|
|
185
|
+
key_type(text, interval = 0.05) {
|
|
186
|
+
if (!this._check_deps())
|
|
187
|
+
return NOT_SUPPORTED;
|
|
188
|
+
void interval; // SendKeys has no per-key delay; accepted for API parity.
|
|
189
|
+
// Literal text is base64-encoded and decoded to UTF-16 in PowerShell, so
|
|
190
|
+
// SendKeys metacharacters (+ ^ % ~ ( ) { } [ ]) are escaped safely.
|
|
191
|
+
const b64 = Buffer.from(text, "utf8").toString("base64");
|
|
192
|
+
const res = this._runInputScript(`
|
|
193
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
194
|
+
$t = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('${b64}'))
|
|
195
|
+
[System.Windows.Forms.SendKeys]::SendWait(($t -replace '([+^%~(){}[\\]])', '{$1}'))
|
|
196
|
+
`);
|
|
197
|
+
const preview = text.slice(0, 20);
|
|
198
|
+
return res.ok ? `[OK] Typed: '${preview}...'` : `[ERROR] key_type failed: ${res.message}`;
|
|
199
|
+
}
|
|
200
|
+
/** Press a special key (e.g. 'enter', 'esc', 'ctrl', 'alt'). */
|
|
201
|
+
key_press(key) {
|
|
202
|
+
if (!this._check_deps())
|
|
203
|
+
return NOT_SUPPORTED;
|
|
204
|
+
const vk = VK_CODES[key.trim().toLowerCase()];
|
|
205
|
+
if (vk === undefined) {
|
|
206
|
+
return `[ERROR] key_press failed: unknown key '${key}'`;
|
|
207
|
+
}
|
|
208
|
+
const res = this._runInputScript(`[Axn.Ui]::Key(${vk})`);
|
|
209
|
+
return res.ok ? `[OK] Pressed: ${key}` : `[ERROR] key_press failed: ${res.message}`;
|
|
210
|
+
}
|
|
211
|
+
/* ── screen ────────────────────────────────────────────────────────────── */
|
|
212
|
+
/** Get the primary monitor resolution. */
|
|
213
|
+
screen_size() {
|
|
214
|
+
if (!this._check_deps())
|
|
215
|
+
return NOT_SUPPORTED;
|
|
216
|
+
return `Resolution: ${this._screenSize[0]}x${this._screenSize[1]}`;
|
|
217
|
+
}
|
|
218
|
+
/** Take a screenshot and save it into the workspace. */
|
|
219
|
+
async screen_capture(filename = "screenshot.png") {
|
|
220
|
+
if (!this._captureBackend()) {
|
|
221
|
+
return "[ERROR] Screen capture is not supported on this platform in this build.";
|
|
222
|
+
}
|
|
223
|
+
const shot = await this._loadCapture();
|
|
224
|
+
if (!shot) {
|
|
225
|
+
return "[ERROR] The 'screenshot-desktop' backend could not be loaded; screen capture is unavailable.";
|
|
226
|
+
}
|
|
227
|
+
const full = path.isAbsolute(filename) ? filename : path.join(this.workspace, filename);
|
|
228
|
+
try {
|
|
229
|
+
fs.mkdirSync(path.dirname(full), { recursive: true });
|
|
230
|
+
await shot({ filename: full, format: "png" });
|
|
231
|
+
const buf = fs.readFileSync(full);
|
|
232
|
+
const dims = pngDimensions(buf);
|
|
233
|
+
const w = dims ? dims[0] : 0;
|
|
234
|
+
const h = dims ? dims[1] : 0;
|
|
235
|
+
return `[OK] Screenshot saved to ${full} (${w}x${h})`;
|
|
236
|
+
}
|
|
237
|
+
catch (e) {
|
|
238
|
+
return `[ERROR] screen_capture failed: ${errText(e)}`;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Find the coordinates of text on screen using OCR.
|
|
243
|
+
* Requires the `tesseract` binary; if it is absent a clear error string is
|
|
244
|
+
* returned (the Python version raised ImportError for pytesseract).
|
|
245
|
+
*/
|
|
246
|
+
async screen_find_text(text) {
|
|
247
|
+
if (!this._captureBackend()) {
|
|
248
|
+
return "[ERROR] Screen capture is not supported on this platform in this build.";
|
|
249
|
+
}
|
|
250
|
+
const shot = await this._loadCapture();
|
|
251
|
+
if (!shot)
|
|
252
|
+
return "[ERROR] Dependencies missing.";
|
|
253
|
+
const tesseract = whichSync("tesseract");
|
|
254
|
+
if (!tesseract) {
|
|
255
|
+
return "[ERROR] 'tesseract' not installed. Install Tesseract-OCR and ensure it is on PATH.";
|
|
256
|
+
}
|
|
257
|
+
const tmp = path.join(this.workspace, `.axoniz_ocr_${process.pid}_${Date.now()}.png`);
|
|
258
|
+
try {
|
|
259
|
+
await shot({ filename: tmp, format: "png" });
|
|
260
|
+
const res = await execFileCaptured(tesseract, [tmp, "stdout", "tsv"], { timeoutMs: 60_000 });
|
|
261
|
+
const target = text.toLowerCase();
|
|
262
|
+
for (const line of res.stdout.split("\n")) {
|
|
263
|
+
const cols = line.split("\t");
|
|
264
|
+
if (cols.length < 12)
|
|
265
|
+
continue;
|
|
266
|
+
const word = cols[11] ?? "";
|
|
267
|
+
if (word.length === 0)
|
|
268
|
+
continue;
|
|
269
|
+
if (target.includes(word.toLowerCase()) || word.toLowerCase().includes(target)) {
|
|
270
|
+
const left = Number(cols[6] ?? 0);
|
|
271
|
+
const top = Number(cols[7] ?? 0);
|
|
272
|
+
const width = Number(cols[8] ?? 0);
|
|
273
|
+
const height = Number(cols[9] ?? 0);
|
|
274
|
+
const x = left + Math.floor(width / 2);
|
|
275
|
+
const y = top + Math.floor(height / 2);
|
|
276
|
+
return `[OK] Found '${text}' at (${x}, ${y})`;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return `[NOT FOUND] Text '${text}' not visible on screen.`;
|
|
280
|
+
}
|
|
281
|
+
catch (e) {
|
|
282
|
+
return `[ERROR] screen_find_text failed: ${errText(e)}`;
|
|
283
|
+
}
|
|
284
|
+
finally {
|
|
285
|
+
try {
|
|
286
|
+
fs.rmSync(tmp, { force: true });
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
/* ignore */
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/** Tool-name -> callable map, mirroring `as_tool_map()`. */
|
|
294
|
+
as_tool_map() {
|
|
295
|
+
return {
|
|
296
|
+
mouse_move: this.mouse_move.bind(this),
|
|
297
|
+
mouse_click: this.mouse_click.bind(this),
|
|
298
|
+
key_type: this.key_type.bind(this),
|
|
299
|
+
key_press: this.key_press.bind(this),
|
|
300
|
+
screen_size: this.screen_size.bind(this),
|
|
301
|
+
screen_capture: this.screen_capture.bind(this),
|
|
302
|
+
screen_find: this.screen_find_text.bind(this),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/** camelCase alias of `as_tool_map()` for TypeScript call sites. */
|
|
306
|
+
asToolMap() {
|
|
307
|
+
return this.as_tool_map();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/* ── helpers ─────────────────────────────────────────────────────────────── */
|
|
311
|
+
/** MOUSEEVENTF_* down/up flag pairs for the requested button. */
|
|
312
|
+
function buttonFlagDown(button) {
|
|
313
|
+
switch (button.toLowerCase()) {
|
|
314
|
+
case "left":
|
|
315
|
+
return 0x0002;
|
|
316
|
+
case "right":
|
|
317
|
+
return 0x0008;
|
|
318
|
+
case "middle":
|
|
319
|
+
return 0x0020;
|
|
320
|
+
default:
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
function buttonFlagUp(button) {
|
|
325
|
+
switch (button.toLowerCase()) {
|
|
326
|
+
case "left":
|
|
327
|
+
return 0x0004;
|
|
328
|
+
case "right":
|
|
329
|
+
return 0x0010;
|
|
330
|
+
case "middle":
|
|
331
|
+
return 0x0040;
|
|
332
|
+
default:
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/** Width/height from a PNG IHDR chunk, or null when the buffer is not a PNG. */
|
|
337
|
+
function pngDimensions(buf) {
|
|
338
|
+
if (buf.length < 24)
|
|
339
|
+
return null;
|
|
340
|
+
if (buf.readUInt32BE(0) !== 0x89504e47 || buf.readUInt32BE(4) !== 0x0d0a1a0a)
|
|
341
|
+
return null;
|
|
342
|
+
const w = buf.readUInt32BE(16);
|
|
343
|
+
const h = buf.readUInt32BE(20);
|
|
344
|
+
if (w === 0 || h === 0)
|
|
345
|
+
return null;
|
|
346
|
+
return [w, h];
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=computer_tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computer_tools.js","sourceRoot":"","sources":["../../src/tools/computer_tools.ts"],"names":[],"mappings":"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"}
|