@johpaz/hive-agents 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -39
- package/dist/hive.js +3127 -3104
- package/dist/ui/assets/{AgentCreateForm-B4eK7efF.js → AgentCreateForm-tJZv9FZC.js} +1 -1
- package/dist/ui/assets/{AgentDetailPage-BD2uoJWk.js → AgentDetailPage-Du-mRcAX.js} +1 -1
- package/dist/ui/assets/AgentNewPage-DIFYd_Ys.js +1 -0
- package/dist/ui/assets/{AgentsPage-4JUZXvkA.js → AgentsPage-YvSgWRiw.js} +6 -6
- package/dist/ui/assets/CanvasPage-DtMwGvxf.js +33 -0
- package/dist/ui/assets/{ChannelsPage-BUn7-nhV.js → ChannelsPage-BdBXWHjj.js} +1 -1
- package/dist/ui/assets/DashboardPage-ghl1ZguH.js +6 -0
- package/dist/ui/assets/{LoginPage-C8j_urUD.js → LoginPage-CAmSI9Vy.js} +1 -1
- package/dist/ui/assets/LogsPage-DAPBHkwK.js +1 -0
- package/dist/ui/assets/MeetingPage-WjjGOqqU.js +1 -0
- package/dist/ui/assets/{NotFound-Drh-sJPN.js → NotFound-BMeQSGcG.js} +1 -1
- package/dist/ui/assets/ProvidersPage-Ct6HsAi1.js +1 -0
- package/dist/ui/assets/{RecoverPage-DNb1Pr8h.js → RecoverPage-DpW3l-yv.js} +1 -1
- package/dist/ui/assets/SettingsPage-DBJ7_E6C.js +9 -0
- package/dist/ui/assets/SetupPage-DKmLVUaj.js +1 -0
- package/dist/ui/assets/{WebChatPage-R-YOwA4F.js → WebChatPage-CVRcKept.js} +2 -2
- package/dist/ui/assets/accordion-C5d5Rm5z.js +1 -0
- package/dist/ui/assets/{alert-U8FsgWi7.js → alert-C-NE-P3s.js} +1 -1
- package/dist/ui/assets/{alert-dialog-CRdMkkmk.js → alert-dialog-C5mzbHdP.js} +1 -1
- package/dist/ui/assets/{badge-Cli1jnH5.js → badge-ChpACfWO.js} +1 -1
- package/dist/ui/assets/chevron-up-BYhk0K2J.js +1 -0
- package/dist/ui/assets/{dialog-DQ3s-LuO.js → dialog-QnZ0ad8O.js} +1 -1
- package/dist/ui/assets/dropdown-menu-BK-CO3Od.js +1 -0
- package/dist/ui/assets/{es-DcMjrpbA.js → es-NQNoaWDx.js} +1 -1
- package/dist/ui/assets/index-B2fCYtTS.css +2 -0
- package/dist/ui/assets/index-DMCjjdqf.js +116 -0
- package/dist/ui/assets/{label-0BvGVXvZ.js → label-D2H1IR_J.js} +1 -1
- package/dist/ui/assets/progress-BherYzY6.js +1 -0
- package/dist/ui/assets/scroll-area-DkeyX32e.js +1 -0
- package/dist/ui/assets/{slider-D47dOrRa.js → slider-CsiUDxc3.js} +1 -1
- package/dist/ui/assets/switch-BDwN8RYV.js +1 -0
- package/dist/ui/assets/{table-DhowbNxQ.js → table-CSc8ubon.js} +1 -1
- package/dist/ui/assets/terminal-DN38Q456.js +1 -0
- package/dist/ui/assets/useProviders-C6_QHsEi.js +1 -0
- package/dist/ui/assets/{vendor-radix-JY4ncZrD.js → vendor-radix-cw1bQaVC.js} +4 -4
- package/dist/ui/assets/{vendor-react-CscwQerf.js → vendor-react-D4s9E-zj.js} +1 -1
- package/dist/ui/dist/assets/AgentCreateForm-tJZv9FZC.js +1 -0
- package/dist/ui/dist/assets/AgentDetailPage-Du-mRcAX.js +1 -0
- package/dist/ui/dist/assets/AgentNewPage-DIFYd_Ys.js +1 -0
- package/dist/ui/dist/assets/AgentsPage-YvSgWRiw.js +10 -0
- package/dist/ui/dist/assets/CanvasPage-DtMwGvxf.js +33 -0
- package/dist/ui/dist/assets/ChannelsPage-BdBXWHjj.js +8 -0
- package/dist/ui/dist/assets/DashboardPage-ghl1ZguH.js +6 -0
- package/dist/ui/dist/assets/LoginPage-CAmSI9Vy.js +1 -0
- package/dist/ui/dist/assets/LogsPage-DAPBHkwK.js +1 -0
- package/dist/ui/dist/assets/MeetingPage-WjjGOqqU.js +1 -0
- package/dist/ui/dist/assets/NotFound-BMeQSGcG.js +1 -0
- package/dist/ui/dist/assets/ProvidersPage-Ct6HsAi1.js +1 -0
- package/dist/ui/dist/assets/RecoverPage-DpW3l-yv.js +1 -0
- package/dist/ui/dist/assets/SettingsPage-DBJ7_E6C.js +9 -0
- package/dist/ui/dist/assets/SetupPage-DKmLVUaj.js +1 -0
- package/dist/ui/dist/assets/WebChatPage-CVRcKept.js +16 -0
- package/dist/ui/dist/assets/accordion-C5d5Rm5z.js +1 -0
- package/dist/ui/dist/assets/activity-c3pNngT_.js +1 -0
- package/dist/ui/dist/assets/alert-C-NE-P3s.js +1 -0
- package/dist/ui/dist/assets/alert-dialog-C5mzbHdP.js +1 -0
- package/dist/ui/dist/assets/arrow-left-CBcbX5EZ.js +1 -0
- package/dist/ui/dist/assets/badge-ChpACfWO.js +1 -0
- package/dist/ui/dist/assets/calendar-B-KZ9RQO.js +1 -0
- package/dist/ui/dist/assets/card-CNf6BS2e.js +1 -0
- package/dist/ui/dist/assets/chevron-left-D4U-5A27.js +1 -0
- package/dist/ui/dist/assets/chevron-right-CR4Skrf3.js +1 -0
- package/dist/ui/dist/assets/chevron-up-BYhk0K2J.js +1 -0
- package/dist/ui/dist/assets/circle-alert-CyHDwUj8.js +1 -0
- package/dist/ui/dist/assets/circle-check-Bb54Ebmu.js +1 -0
- package/dist/ui/dist/assets/cpu-Cdgc_B1K.js +1 -0
- package/dist/ui/dist/assets/dialog-QnZ0ad8O.js +1 -0
- package/dist/ui/dist/assets/download-C3ifGMjJ.js +1 -0
- package/dist/ui/dist/assets/dropdown-menu-BK-CO3Od.js +1 -0
- package/dist/ui/dist/assets/es-NQNoaWDx.js +1 -0
- package/dist/ui/dist/assets/external-link-BvxYeTP1.js +1 -0
- package/dist/ui/dist/assets/eye-DqNTU_GD.js +1 -0
- package/dist/ui/dist/assets/file-text-BT_9S9SM.js +1 -0
- package/dist/ui/dist/assets/folder-open-BhH8y9ac.js +1 -0
- package/dist/ui/dist/assets/format-GVHeOyWI.js +1 -0
- package/dist/ui/dist/assets/gateway-url-COCbW0IR.js +1 -0
- package/dist/ui/dist/assets/gauge-D_TMa4i9.js +1 -0
- package/dist/ui/dist/assets/globe-DeCQTCDJ.js +1 -0
- package/dist/ui/dist/assets/hexagon-DsGOUl-H.js +1 -0
- package/dist/ui/dist/assets/history-BSG-Ypqf.js +1 -0
- package/dist/ui/dist/assets/index-B2fCYtTS.css +2 -0
- package/dist/ui/dist/assets/index-DMCjjdqf.js +116 -0
- package/dist/ui/dist/assets/info-NwLoa2Mj.js +1 -0
- package/dist/ui/dist/assets/key-3EP0dhkT.js +1 -0
- package/dist/ui/dist/assets/label-D2H1IR_J.js +1 -0
- package/dist/ui/dist/assets/loader-circle-CZNax6kS.js +1 -0
- package/dist/ui/dist/assets/lock-Ei1_J-Nq.js +1 -0
- package/dist/ui/dist/assets/pause-BUqah9Bi.js +1 -0
- package/dist/ui/dist/assets/play-NcZ4swwL.js +1 -0
- package/dist/ui/dist/assets/plus-CX1xyhp5.js +1 -0
- package/dist/ui/dist/assets/progress-BherYzY6.js +1 -0
- package/dist/ui/dist/assets/refresh-cw-DaYdjQFk.js +1 -0
- package/dist/ui/dist/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
- package/dist/ui/dist/assets/save-CUdYyHNy.js +1 -0
- package/dist/ui/dist/assets/scroll-area-DkeyX32e.js +1 -0
- package/dist/ui/dist/assets/send-B0H5SEIE.js +1 -0
- package/dist/ui/dist/assets/settings-Ds4SqD8s.js +1 -0
- package/dist/ui/dist/assets/slider-CsiUDxc3.js +14 -0
- package/dist/ui/dist/assets/sparkles-yUEb-7oH.js +1 -0
- package/dist/ui/dist/assets/square-BD81nFtN.js +1 -0
- package/dist/ui/dist/assets/switch-BDwN8RYV.js +1 -0
- package/dist/ui/dist/assets/table-CSc8ubon.js +1 -0
- package/dist/ui/dist/assets/terminal-DN38Q456.js +1 -0
- package/dist/ui/dist/assets/textarea-CXgXWKrT.js +1 -0
- package/dist/ui/dist/assets/trash-2-CNjMkoq6.js +1 -0
- package/dist/ui/dist/assets/triangle-alert-C9Y8Ub4X.js +1 -0
- package/dist/ui/dist/assets/useProviders-C6_QHsEi.js +1 -0
- package/dist/ui/dist/assets/utils-3pnRFmFe.js +1 -0
- package/dist/ui/dist/assets/vendor-charts-Bu2lyBKP.js +65 -0
- package/dist/ui/dist/assets/vendor-query-DsWPbQdG.js +1 -0
- package/dist/ui/dist/assets/vendor-radix-cw1bQaVC.js +63 -0
- package/dist/ui/dist/assets/vendor-react-D4s9E-zj.js +1 -0
- package/dist/ui/dist/assets/vendor-router-C9pIYwbJ.js +3 -0
- package/dist/ui/dist/assets/volume-2-CeSXNDv4.js +1 -0
- package/dist/ui/dist/assets/zap-hlXjpSeA.js +1 -0
- package/dist/ui/dist/favicon.ico +0 -0
- package/dist/ui/dist/index.html +40 -0
- package/dist/ui/dist/placeholder.svg +1 -0
- package/dist/ui/index.html +6 -6
- package/package.json +137 -13
- package/packages/cli/src/adapters/binary.ts +461 -0
- package/packages/cli/src/adapters/bun-global.ts +378 -0
- package/packages/cli/src/adapters/config.ts +314 -0
- package/packages/cli/src/adapters/docker.ts +308 -0
- package/packages/cli/src/adapters/factory.ts +168 -0
- package/packages/cli/src/adapters/index.ts +80 -0
- package/packages/cli/src/adapters/types.ts +218 -0
- package/packages/cli/src/commands/agent-run.ts +168 -0
- package/packages/cli/src/commands/agents.ts +398 -0
- package/packages/cli/src/commands/chat.ts +142 -0
- package/packages/cli/src/commands/config.ts +49 -0
- package/packages/cli/src/commands/cron.ts +487 -0
- package/packages/cli/src/commands/dev.ts +58 -0
- package/packages/cli/src/commands/doctor.ts +320 -0
- package/packages/cli/src/commands/gateway.ts +719 -0
- package/packages/cli/src/commands/logs.ts +57 -0
- package/packages/cli/src/commands/mcp.ts +175 -0
- package/packages/cli/src/commands/message.ts +77 -0
- package/packages/cli/src/commands/migrate.ts +90 -0
- package/packages/cli/src/commands/onboard.ts +1656 -0
- package/packages/cli/src/commands/security.ts +144 -0
- package/packages/cli/src/commands/service.ts +50 -0
- package/packages/cli/src/commands/sessions.ts +116 -0
- package/packages/cli/src/commands/skills.ts +215 -0
- package/packages/cli/src/commands/update.ts +203 -0
- package/packages/cli/src/index.ts +210 -0
- package/packages/cli/src/ui-bundle.generated.ts +3 -0
- package/packages/cli/src/utils/token.ts +6 -0
- package/packages/core/src/agent/agent-loop.ts +691 -0
- package/packages/core/src/agent/compaction.ts +240 -0
- package/packages/core/src/agent/context-compiler.ts +467 -0
- package/packages/core/src/agent/context-guard.ts +91 -0
- package/packages/core/src/agent/conversation-store.ts +244 -0
- package/packages/core/src/agent/curator.ts +158 -0
- package/packages/core/src/agent/hooks.ts +166 -0
- package/packages/core/src/agent/llm-client.ts +167 -0
- package/packages/core/src/agent/llm-providers/anthropic.ts +212 -0
- package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
- package/packages/core/src/agent/llm-providers/gemini.ts +215 -0
- package/packages/core/src/agent/llm-providers/groq.ts +5 -0
- package/packages/core/src/agent/llm-providers/interface.ts +195 -0
- package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
- package/packages/core/src/agent/llm-providers/local-llama.ts +37 -0
- package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
- package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
- package/packages/core/src/agent/llm-providers/ollama.ts +175 -0
- package/packages/core/src/agent/llm-providers/openai-compat-base.ts +379 -0
- package/packages/core/src/agent/llm-providers/openai.ts +5 -0
- package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
- package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
- package/packages/core/src/agent/native-tools.ts +31 -0
- package/packages/core/src/agent/playbook-selector.ts +147 -0
- package/packages/core/src/agent/prompt-builder.ts +169 -0
- package/packages/core/src/agent/providers/index.ts +204 -0
- package/packages/core/src/agent/providers.ts +1 -0
- package/packages/core/src/agent/reflector.ts +200 -0
- package/packages/core/src/agent/service.ts +267 -0
- package/packages/core/src/agent/skill-selector.ts +479 -0
- package/packages/core/src/agent/stuck-loop.ts +133 -0
- package/packages/core/src/agent/tool-selector.ts +569 -0
- package/packages/core/src/agent/tracer.ts +100 -0
- package/packages/core/src/auth/auth.ts +108 -0
- package/packages/core/src/auth/index.ts +1 -0
- package/packages/core/src/canvas/a2ui-tools.ts +255 -0
- package/packages/core/src/canvas/canvas-manager.ts +390 -0
- package/packages/core/src/canvas/canvas-tools.ts +448 -0
- package/packages/core/src/canvas/emitter.ts +149 -0
- package/packages/core/src/canvas/index.ts +3 -0
- package/packages/core/src/channels/base.ts +154 -0
- package/packages/core/src/channels/discord.ts +273 -0
- package/packages/core/src/channels/index.ts +7 -0
- package/packages/core/src/channels/manager.ts +450 -0
- package/packages/core/src/channels/slack.ts +323 -0
- package/packages/core/src/channels/telegram.ts +612 -0
- package/packages/core/src/channels/webchat.ts +139 -0
- package/packages/core/src/channels/whatsapp.ts +548 -0
- package/packages/core/src/config/index.ts +12 -0
- package/packages/core/src/config/loader.ts +569 -0
- package/packages/core/src/events/agent-bus.ts +460 -0
- package/packages/core/src/events/event-bus.ts +169 -0
- package/packages/core/src/gateway/channel-notify.ts +64 -0
- package/packages/core/src/gateway/helpers/cors.ts +32 -0
- package/packages/core/src/gateway/helpers/index.ts +4 -0
- package/packages/core/src/gateway/helpers/narration.ts +57 -0
- package/packages/core/src/gateway/helpers/path.ts +13 -0
- package/packages/core/src/gateway/helpers/redact.ts +61 -0
- package/packages/core/src/gateway/index.ts +5 -0
- package/packages/core/src/gateway/initializer.ts +363 -0
- package/packages/core/src/gateway/lane-queue.ts +169 -0
- package/packages/core/src/gateway/llm-local/client.ts +94 -0
- package/packages/core/src/gateway/llm-local/detector.ts +321 -0
- package/packages/core/src/gateway/llm-local/downloader.ts +216 -0
- package/packages/core/src/gateway/llm-local/index.ts +34 -0
- package/packages/core/src/gateway/llm-local/manager.ts +186 -0
- package/packages/core/src/gateway/llm-local/models.ts +149 -0
- package/packages/core/src/gateway/llm-local/server.ts +179 -0
- package/packages/core/src/gateway/resolver.ts +108 -0
- package/packages/core/src/gateway/router.ts +124 -0
- package/packages/core/src/gateway/routes/agents.ts +210 -0
- package/packages/core/src/gateway/routes/auth.ts +244 -0
- package/packages/core/src/gateway/routes/channels.ts +484 -0
- package/packages/core/src/gateway/routes/chat.ts +241 -0
- package/packages/core/src/gateway/routes/config.ts +12 -0
- package/packages/core/src/gateway/routes/cron-api.ts +544 -0
- package/packages/core/src/gateway/routes/ethics.ts +46 -0
- package/packages/core/src/gateway/routes/llm-local.ts +271 -0
- package/packages/core/src/gateway/routes/mcp.ts +319 -0
- package/packages/core/src/gateway/routes/meeting.ts +232 -0
- package/packages/core/src/gateway/routes/models.ts +163 -0
- package/packages/core/src/gateway/routes/multimodal.ts +93 -0
- package/packages/core/src/gateway/routes/providers.ts +220 -0
- package/packages/core/src/gateway/routes/setup.ts +441 -0
- package/packages/core/src/gateway/routes/skills.ts +115 -0
- package/packages/core/src/gateway/routes/system.ts +469 -0
- package/packages/core/src/gateway/routes/tasks.ts +44 -0
- package/packages/core/src/gateway/routes/tools.ts +59 -0
- package/packages/core/src/gateway/routes/tts-local.ts +388 -0
- package/packages/core/src/gateway/routes/users.ts +122 -0
- package/packages/core/src/gateway/routes/voice.ts +189 -0
- package/packages/core/src/gateway/routes/workspace.ts +281 -0
- package/packages/core/src/gateway/server.ts +2744 -0
- package/packages/core/src/gateway/session.ts +95 -0
- package/packages/core/src/gateway/slash-commands.ts +207 -0
- package/packages/core/src/gateway/tts/README.md +94 -0
- package/packages/core/src/gateway/tts/package.json +25 -0
- package/packages/core/src/gateway/tts/src/client.ts +59 -0
- package/packages/core/src/gateway/tts/src/detect.ts +42 -0
- package/packages/core/src/gateway/tts/src/index.ts +15 -0
- package/packages/core/src/gateway/tts/src/install.ts +129 -0
- package/packages/core/src/gateway/tts/src/models.ts +50 -0
- package/packages/core/src/gateway/tts/src/server.ts +252 -0
- package/packages/core/src/gateway/tts/voices/.gitkeep +0 -0
- package/packages/core/src/heartbeat/index.ts +157 -0
- package/packages/core/src/index.ts +56 -0
- package/packages/core/src/mcp/hot-reload.ts +148 -0
- package/packages/core/src/mcp/singleton.ts +21 -0
- package/packages/core/src/mcp/tool-sync.ts +176 -0
- package/packages/core/src/multimodal/index.ts +2 -0
- package/packages/core/src/multimodal/types.ts +28 -0
- package/packages/core/src/multimodal/vision-service.ts +283 -0
- package/packages/core/src/plugins/api.ts +128 -0
- package/packages/core/src/plugins/index.ts +2 -0
- package/packages/core/src/plugins/loader.ts +365 -0
- package/packages/core/src/resilience/circuit-breaker.ts +225 -0
- package/packages/core/src/scheduler/CronScheduler.ts +699 -0
- package/packages/core/src/scheduler/dag/AgentExecutor.ts +53 -0
- package/packages/core/src/scheduler/dag/DAGScheduler.ts +250 -0
- package/packages/core/src/scheduler/dag/EventBridge.ts +122 -0
- package/packages/core/src/scheduler/dag/TaskGraph.ts +192 -0
- package/packages/core/src/scheduler/dag/TaskNode.ts +97 -0
- package/packages/core/src/scheduler/dag/TaskResult.ts +22 -0
- package/packages/core/src/scheduler/dag/errors.ts +37 -0
- package/packages/core/src/scheduler/dag/index.ts +26 -0
- package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +97 -0
- package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +21 -0
- package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +46 -0
- package/packages/core/src/scheduler/index.ts +22 -0
- package/packages/core/src/scheduler/integration.ts +237 -0
- package/packages/core/src/scheduler/types.ts +164 -0
- package/packages/core/src/security/google-chat.ts +269 -0
- package/packages/core/src/security/index.ts +192 -0
- package/packages/core/src/security/pairing.ts +250 -0
- package/packages/core/src/security/rate-limit.ts +270 -0
- package/packages/core/src/security/signal.ts +321 -0
- package/packages/core/src/state/store.ts +312 -0
- package/packages/core/src/storage/crypto.ts +197 -0
- package/packages/core/src/storage/migrate.ts +147 -0
- package/packages/core/src/storage/onboarding.ts +1506 -0
- package/packages/core/src/storage/schema.ts +666 -0
- package/packages/core/src/storage/seed.ts +628 -0
- package/packages/core/src/storage/sqlite.ts +407 -0
- package/packages/core/src/storage/usage.ts +374 -0
- package/packages/core/src/tool-runtime/index.ts +476 -0
- package/packages/core/src/tool-runtime/tool-worker.ts +125 -0
- package/packages/core/src/tools/agents/get-available-models.ts +118 -0
- package/packages/core/src/tools/agents/index.ts +610 -0
- package/packages/core/src/tools/canvas/index.ts +420 -0
- package/packages/core/src/tools/cli/index.ts +142 -0
- package/packages/core/src/tools/core/index.ts +478 -0
- package/packages/core/src/tools/cron/index.ts +635 -0
- package/packages/core/src/tools/filesystem/fs-delete.ts +78 -0
- package/packages/core/src/tools/filesystem/fs-edit.ts +106 -0
- package/packages/core/src/tools/filesystem/fs-exists.ts +63 -0
- package/packages/core/src/tools/filesystem/fs-glob.ts +108 -0
- package/packages/core/src/tools/filesystem/fs-list.ts +129 -0
- package/packages/core/src/tools/filesystem/fs-read.ts +72 -0
- package/packages/core/src/tools/filesystem/fs-write.ts +67 -0
- package/packages/core/src/tools/filesystem/index.ts +34 -0
- package/packages/core/src/tools/filesystem/workspace-guard.ts +62 -0
- package/packages/core/src/tools/index.ts +197 -0
- package/packages/core/src/tools/meeting/index.ts +363 -0
- package/packages/core/src/tools/office/index.ts +47 -0
- package/packages/core/src/tools/office/office-escribir-docx.ts +192 -0
- package/packages/core/src/tools/office/office-escribir-pdf.ts +172 -0
- package/packages/core/src/tools/office/office-escribir-pptx.ts +174 -0
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +116 -0
- package/packages/core/src/tools/office/office-leer-docx.ts +93 -0
- package/packages/core/src/tools/office/office-leer-pdf.ts +114 -0
- package/packages/core/src/tools/office/office-leer-pptx.ts +136 -0
- package/packages/core/src/tools/office/office-leer-xlsx.ts +124 -0
- package/packages/core/src/tools/types.ts +39 -0
- package/packages/core/src/tools/voice/index.ts +104 -0
- package/packages/core/src/tools/web/browser-click.ts +78 -0
- package/packages/core/src/tools/web/browser-extract.ts +139 -0
- package/packages/core/src/tools/web/browser-navigate.ts +106 -0
- package/packages/core/src/tools/web/browser-screenshot.ts +87 -0
- package/packages/core/src/tools/web/browser-script.ts +88 -0
- package/packages/core/src/tools/web/browser-service.ts +554 -0
- package/packages/core/src/tools/web/browser-type.ts +101 -0
- package/packages/core/src/tools/web/browser-wait.ts +136 -0
- package/packages/core/src/tools/web/index.ts +41 -0
- package/packages/core/src/tools/web/web-fetch.ts +78 -0
- package/packages/core/src/tools/web/web-search.ts +123 -0
- package/packages/core/src/utils/benchmark.ts +80 -0
- package/packages/core/src/utils/crypto.ts +73 -0
- package/packages/core/src/utils/date.ts +42 -0
- package/packages/core/src/utils/index.ts +5 -0
- package/packages/core/src/utils/logger.ts +389 -0
- package/packages/core/src/utils/retry.ts +70 -0
- package/packages/core/src/utils/toon.ts +253 -0
- package/packages/core/src/voice/index.ts +643 -0
- package/packages/mcp/src/config.ts +13 -0
- package/packages/mcp/src/index.ts +1 -0
- package/packages/mcp/src/logger.ts +47 -0
- package/packages/mcp/src/manager.ts +439 -0
- package/packages/mcp/src/transports/index.ts +67 -0
- package/packages/mcp/src/transports/sse.ts +238 -0
- package/packages/mcp/src/transports/websocket.ts +159 -0
- package/packages/skills/src/bundled/agents/agent_spawner/SKILL.md +167 -0
- package/packages/skills/src/bundled/agents/code_delegator/SKILL.md +156 -0
- package/packages/skills/src/bundled/agents/memory_manager/SKILL.md +143 -0
- package/packages/skills/src/bundled/agents/research_and_remember/SKILL.md +139 -0
- package/packages/skills/src/bundled/agents/task_orchestrator/SKILL.md +198 -0
- package/packages/skills/src/bundled/canvas/a2ui_dashboard/SKILL.md +176 -0
- package/packages/skills/src/bundled/canvas/a2ui_form/SKILL.md +202 -0
- package/packages/skills/src/bundled/canvas/a2ui_interactive/SKILL.md +206 -0
- package/packages/skills/src/bundled/canvas/canvas_dashboard/SKILL.md +146 -0
- package/packages/skills/src/bundled/canvas/canvas_interact/SKILL.md +148 -0
- package/packages/skills/src/bundled/canvas/canvas_report/SKILL.md +146 -0
- package/packages/skills/src/bundled/cli/cli_pipeline/SKILL.md +136 -0
- package/packages/skills/src/bundled/cli/cli_safe_exec/SKILL.md +125 -0
- package/packages/skills/src/bundled/cron_manager/SKILL.md +188 -0
- package/packages/skills/src/bundled/cron_reminder/SKILL.md +112 -0
- package/packages/skills/src/bundled/filesystem/file_manager/SKILL.md +118 -0
- package/packages/skills/src/bundled/filesystem/file_read_and_summarize/SKILL.md +108 -0
- package/packages/skills/src/bundled/filesystem/file_writer/SKILL.md +135 -0
- package/packages/skills/src/bundled/meeting/meeting_transcription/SKILL.md +213 -0
- package/packages/skills/src/bundled/office/office_document_manager/SKILL.md +262 -0
- package/packages/skills/src/bundled/search_knowledge/busqueda_fts5/SKILL.md +74 -0
- package/packages/skills/src/bundled/voice/voice_assistant/SKILL.md +174 -0
- package/packages/skills/src/bundled/voice/voice_input/SKILL.md +146 -0
- package/packages/skills/src/bundled/voice/voice_output/SKILL.md +151 -0
- package/packages/skills/src/bundled/web/browser_automate/SKILL.md +120 -0
- package/packages/skills/src/bundled/web/browser_scrape/SKILL.md +109 -0
- package/packages/skills/src/bundled/web/web_monitor/SKILL.md +127 -0
- package/packages/skills/src/bundled/web/web_research/SKILL.md +119 -0
- package/packages/skills/src/bundled-data.generated.ts +1964 -0
- package/packages/skills/src/index.ts +1 -0
- package/packages/skills/src/loader.ts +388 -0
- package/dist/ui/assets/AgentNewPage-GB-tVN50.js +0 -1
- package/dist/ui/assets/BridgePage-DDcDILKu.js +0 -1
- package/dist/ui/assets/CanvasPage-oOk2sGOD.js +0 -33
- package/dist/ui/assets/DashboardPage-DV_2qWYJ.js +0 -6
- package/dist/ui/assets/LogsPage-DayYjh01.js +0 -1
- package/dist/ui/assets/MeetingPage-C01uPuqj.js +0 -1
- package/dist/ui/assets/ProjectsPage-B8_am_Ib.js +0 -1
- package/dist/ui/assets/ProvidersPage-DBzi66e4.js +0 -1
- package/dist/ui/assets/SettingsPage-CFA_Tknl.js +0 -9
- package/dist/ui/assets/SetupPage-BrUWbhvT.js +0 -1
- package/dist/ui/assets/accordion-DdAEfIXR.js +0 -1
- package/dist/ui/assets/chevron-down-DIosfU_U.js +0 -1
- package/dist/ui/assets/chevron-up-CI-W21Fy.js +0 -1
- package/dist/ui/assets/circle-S0-ouLz-.js +0 -1
- package/dist/ui/assets/circle-minus-CE0iJrl8.js +0 -1
- package/dist/ui/assets/circle-x-jUJ5zZvQ.js +0 -1
- package/dist/ui/assets/dropdown-menu-C2CXM1VE.js +0 -1
- package/dist/ui/assets/index-BN0875JH.css +0 -2
- package/dist/ui/assets/index-CH6sBa3Q.js +0 -116
- package/dist/ui/assets/pencil-5VdSj-h5.js +0 -1
- package/dist/ui/assets/progress-JN30I5fF.js +0 -1
- package/dist/ui/assets/scroll-area-BQQPitM8.js +0 -1
- package/dist/ui/assets/search-ChPgnVKj.js +0 -1
- package/dist/ui/assets/switch-C7W2-KEx.js +0 -1
- package/dist/ui/assets/terminal-C-R5Fckz.js +0 -1
- package/dist/ui/assets/useProviders-TBnWn-Hq.js +0 -1
- /package/dist/ui/assets/{card-DFKnZ6ky.js → card-CNf6BS2e.js} +0 -0
- /package/dist/ui/assets/{circle-alert-KuAm2FWh.js → circle-alert-CyHDwUj8.js} +0 -0
- /package/dist/ui/assets/{circle-check-6Ard1-2z.js → circle-check-Bb54Ebmu.js} +0 -0
- /package/dist/ui/assets/{cpu-KDy6-FAI.js → cpu-Cdgc_B1K.js} +0 -0
- /package/dist/ui/assets/{download-Cjbk4Rek.js → download-C3ifGMjJ.js} +0 -0
- /package/dist/ui/assets/{external-link-HtrFM63g.js → external-link-BvxYeTP1.js} +0 -0
- /package/dist/ui/assets/{eye-D1dB40_o.js → eye-DqNTU_GD.js} +0 -0
- /package/dist/ui/assets/{file-text-CE58EfH0.js → file-text-BT_9S9SM.js} +0 -0
- /package/dist/ui/assets/{folder-open-DIPKeiI_.js → folder-open-BhH8y9ac.js} +0 -0
- /package/dist/ui/assets/{format-BwdV8bB5.js → format-GVHeOyWI.js} +0 -0
- /package/dist/ui/assets/{gateway-url-D5uj6Nxg.js → gateway-url-COCbW0IR.js} +0 -0
- /package/dist/ui/assets/{gauge-DmQmJHEg.js → gauge-D_TMa4i9.js} +0 -0
- /package/dist/ui/assets/{globe-_hUGxQF4.js → globe-DeCQTCDJ.js} +0 -0
- /package/dist/ui/assets/{hexagon-BaNGQlQj.js → hexagon-DsGOUl-H.js} +0 -0
- /package/dist/ui/assets/{history-BfZVGlZa.js → history-BSG-Ypqf.js} +0 -0
- /package/dist/ui/assets/{info-CBZ5-AlC.js → info-NwLoa2Mj.js} +0 -0
- /package/dist/ui/assets/{key-Bv5DdTPh.js → key-3EP0dhkT.js} +0 -0
- /package/dist/ui/assets/{loader-circle-C4hhXLgp.js → loader-circle-CZNax6kS.js} +0 -0
- /package/dist/ui/assets/{lock-CkZYexqw.js → lock-Ei1_J-Nq.js} +0 -0
- /package/dist/ui/assets/{pause-Bpy1_s7y.js → pause-BUqah9Bi.js} +0 -0
- /package/dist/ui/assets/{play-Cj4osqJZ.js → play-NcZ4swwL.js} +0 -0
- /package/dist/ui/assets/{plus-BQhgZN3A.js → plus-CX1xyhp5.js} +0 -0
- /package/dist/ui/assets/{refresh-cw-BfREHVQM.js → refresh-cw-DaYdjQFk.js} +0 -0
- /package/dist/ui/assets/{save-FFTD4dMp.js → save-CUdYyHNy.js} +0 -0
- /package/dist/ui/assets/{settings-BdHKUL92.js → settings-Ds4SqD8s.js} +0 -0
- /package/dist/ui/assets/{sparkles-r4uJbJAl.js → sparkles-yUEb-7oH.js} +0 -0
- /package/dist/ui/assets/{square-G7Hyufqm.js → square-BD81nFtN.js} +0 -0
- /package/dist/ui/assets/{textarea-5kyuD04X.js → textarea-CXgXWKrT.js} +0 -0
- /package/dist/ui/assets/{trash-2-DXVBRWfh.js → trash-2-CNjMkoq6.js} +0 -0
- /package/dist/ui/assets/{triangle-alert-Bu5seg9O.js → triangle-alert-C9Y8Ub4X.js} +0 -0
- /package/dist/ui/assets/{vendor-router-CCECILJ0.js → vendor-router-C9pIYwbJ.js} +0 -0
- /package/dist/ui/assets/{volume-2-s9DuS696.js → volume-2-CeSXNDv4.js} +0 -0
- /package/dist/ui/assets/{zap-BPHZzXKV.js → zap-hlXjpSeA.js} +0 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docker Compose Adapter
|
|
3
|
+
*
|
|
4
|
+
* Handles Hive installation via Docker Compose (standard configuration).
|
|
5
|
+
* Uses docker-compose.yml with named volumes and host.docker.internal.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { spawn, execSync } from "node:child_process";
|
|
9
|
+
import * as path from "node:path";
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
import type {
|
|
12
|
+
InstallationAdapter,
|
|
13
|
+
InstallationConfig,
|
|
14
|
+
GatewayConfig,
|
|
15
|
+
ValidationResult,
|
|
16
|
+
} from "./types";
|
|
17
|
+
import {
|
|
18
|
+
getHiveDir,
|
|
19
|
+
getDefaultPaths,
|
|
20
|
+
loadEnvFile,
|
|
21
|
+
mergeEnv,
|
|
22
|
+
expandPath,
|
|
23
|
+
waitForHttpPort,
|
|
24
|
+
} from "./config";
|
|
25
|
+
import { PORTS } from "./types";
|
|
26
|
+
|
|
27
|
+
type SpawnedProcess = {
|
|
28
|
+
on(event: "close", listener: (code: number | null) => void): void;
|
|
29
|
+
on(event: "error", listener: (error: Error) => void): void;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Docker Compose installation adapter
|
|
34
|
+
*/
|
|
35
|
+
export class DockerAdapter implements InstallationAdapter {
|
|
36
|
+
readonly type = "docker" as const;
|
|
37
|
+
readonly name = "Docker Compose";
|
|
38
|
+
|
|
39
|
+
private hiveDir: string;
|
|
40
|
+
private composeFile: string;
|
|
41
|
+
private envFile: string;
|
|
42
|
+
|
|
43
|
+
constructor(options?: { hiveDir?: string; composeFile?: string }) {
|
|
44
|
+
this.hiveDir = options?.hiveDir || getHiveDir();
|
|
45
|
+
this.composeFile = options?.composeFile || this.findComposeFile();
|
|
46
|
+
this.envFile = path.join(path.dirname(this.composeFile), ".env");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Find the docker-compose.yml file
|
|
51
|
+
*/
|
|
52
|
+
private findComposeFile(): string {
|
|
53
|
+
// Only check standard installation locations — NOT process.cwd().
|
|
54
|
+
// Searching cwd causes false positives when running from the dev/source directory.
|
|
55
|
+
const standardPaths = [
|
|
56
|
+
"/opt/hive/docker-compose.yml",
|
|
57
|
+
"/usr/local/share/hive/docker-compose.yml",
|
|
58
|
+
path.join(process.env.HOME || "", ".hive", "docker-compose.yml"),
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
for (const composePath of standardPaths) {
|
|
62
|
+
if (existsSync(composePath)) {
|
|
63
|
+
return composePath;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Default to a path that won't exist → detect() will return false gracefully
|
|
68
|
+
return "/opt/hive/docker-compose.yml";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Check if Docker is available and this installation method is active
|
|
73
|
+
*/
|
|
74
|
+
async detect(): Promise<boolean> {
|
|
75
|
+
try {
|
|
76
|
+
// Check if Docker is installed
|
|
77
|
+
execSync("docker --version", { stdio: "ignore" });
|
|
78
|
+
|
|
79
|
+
// Check if docker-compose is available
|
|
80
|
+
execSync("docker compose version", { stdio: "ignore" });
|
|
81
|
+
|
|
82
|
+
// Check if compose file exists
|
|
83
|
+
if (!existsSync(this.composeFile)) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Verify the compose file actually defines a "hive" service.
|
|
88
|
+
// Use "config --services" instead of "ps" so it works even when containers are stopped.
|
|
89
|
+
try {
|
|
90
|
+
const out = execSync(
|
|
91
|
+
`docker compose -f "${this.composeFile}" config --services`,
|
|
92
|
+
{ encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }
|
|
93
|
+
);
|
|
94
|
+
return out.trim().split("\n").map(s => s.trim()).includes("hive");
|
|
95
|
+
} catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
} catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get Docker-specific installation configuration
|
|
105
|
+
*/
|
|
106
|
+
async getConfig(): Promise<InstallationConfig> {
|
|
107
|
+
const env = await this.getEnvironment();
|
|
108
|
+
const paths = getDefaultPaths(this.hiveDir);
|
|
109
|
+
|
|
110
|
+
// In Docker mode, UI is served from /app/ui inside container
|
|
111
|
+
// but we access it via the exposed port
|
|
112
|
+
paths.uiDir = null;
|
|
113
|
+
|
|
114
|
+
const port = parseInt(env.HIVE_PORT || "18790", 10) || PORTS.GATEWAY;
|
|
115
|
+
const publicUrl = env.HIVE_PUBLIC_URL || undefined;
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
type: this.type,
|
|
119
|
+
gateway: {
|
|
120
|
+
host: env.HIVE_HOST || "0.0.0.0",
|
|
121
|
+
port,
|
|
122
|
+
wsPort: port,
|
|
123
|
+
publicUrl,
|
|
124
|
+
openBrowser: !env.NO_BROWSER,
|
|
125
|
+
daemon: false,
|
|
126
|
+
},
|
|
127
|
+
paths,
|
|
128
|
+
env,
|
|
129
|
+
isDev: false,
|
|
130
|
+
hasEmbeddedUI: false,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Start Hive using Docker Compose
|
|
136
|
+
*/
|
|
137
|
+
async start(config: GatewayConfig): Promise<void> {
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
const child = spawn("docker", ["compose", "-f", this.composeFile, "up", "-d"], {
|
|
140
|
+
stdio: "inherit",
|
|
141
|
+
detached: false,
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
const childProcess = child as unknown as SpawnedProcess;
|
|
145
|
+
childProcess.on("close", (code) => {
|
|
146
|
+
if (code === 0) {
|
|
147
|
+
resolve();
|
|
148
|
+
} else {
|
|
149
|
+
reject(new Error(`Docker compose exited with code ${code}`));
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
childProcess.on("error", (error) => {
|
|
154
|
+
reject(error);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Stop Hive Docker container
|
|
161
|
+
*/
|
|
162
|
+
async stop(): Promise<void> {
|
|
163
|
+
return new Promise((resolve, reject) => {
|
|
164
|
+
const child = spawn("docker", ["compose", "-f", this.composeFile, "down"], {
|
|
165
|
+
stdio: "inherit",
|
|
166
|
+
detached: false,
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
const childProcess = child as unknown as SpawnedProcess;
|
|
170
|
+
childProcess.on("close", (code) => {
|
|
171
|
+
if (code === 0) {
|
|
172
|
+
resolve();
|
|
173
|
+
} else {
|
|
174
|
+
reject(new Error(`Docker compose down exited with code ${code}`));
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
childProcess.on("error", (error) => {
|
|
179
|
+
reject(error);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Check if Docker container is running
|
|
186
|
+
*/
|
|
187
|
+
async isRunning(): Promise<boolean> {
|
|
188
|
+
try {
|
|
189
|
+
const output = execSync("docker compose ps --format json", {
|
|
190
|
+
encoding: "utf-8",
|
|
191
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
const services = JSON.parse(output.trim());
|
|
195
|
+
if (Array.isArray(services)) {
|
|
196
|
+
const hive = services.find((s: any) => s.service === "hive");
|
|
197
|
+
return hive && hive.state === "running";
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return false;
|
|
201
|
+
} catch {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Get Docker container PID (not directly accessible, returns null)
|
|
208
|
+
*/
|
|
209
|
+
async getPid(): Promise<number | null> {
|
|
210
|
+
try {
|
|
211
|
+
const output = execSync("docker inspect --format '{{.State.Pid}}' $(docker compose ps -q hive)", {
|
|
212
|
+
encoding: "utf-8",
|
|
213
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
const pid = parseInt(output.trim(), 10);
|
|
217
|
+
if (!isNaN(pid) && pid > 0) {
|
|
218
|
+
return pid;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return null;
|
|
222
|
+
} catch {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Get Docker-specific environment variables
|
|
229
|
+
*/
|
|
230
|
+
async getEnvironment(): Promise<Record<string, string>> {
|
|
231
|
+
const fileEnv = loadEnvFile(this.envFile);
|
|
232
|
+
|
|
233
|
+
const defaults = {
|
|
234
|
+
HIVE_HOST: "0.0.0.0",
|
|
235
|
+
HIVE_PORT: String(PORTS.GATEWAY),
|
|
236
|
+
OLLAMA_HOST: "http://host.docker.internal:11434",
|
|
237
|
+
NO_BROWSER: "1",
|
|
238
|
+
HIVE_PUBLIC_URL: "",
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
return mergeEnv(defaults, fileEnv, process.env);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Validate Docker installation
|
|
246
|
+
*/
|
|
247
|
+
async validate(): Promise<ValidationResult> {
|
|
248
|
+
const errors: string[] = [];
|
|
249
|
+
const warnings: string[] = [];
|
|
250
|
+
const info: string[] = [];
|
|
251
|
+
|
|
252
|
+
// Check Docker installation
|
|
253
|
+
try {
|
|
254
|
+
const version = execSync("docker --version", { encoding: "utf-8" }).trim();
|
|
255
|
+
info.push(`Docker: ${version}`);
|
|
256
|
+
} catch {
|
|
257
|
+
errors.push("Docker is not installed or not in PATH");
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Check docker-compose
|
|
261
|
+
try {
|
|
262
|
+
const version = execSync("docker compose version", { encoding: "utf-8" }).trim();
|
|
263
|
+
info.push(`Docker Compose: ${version}`);
|
|
264
|
+
} catch {
|
|
265
|
+
errors.push("Docker Compose is not installed");
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Check compose file
|
|
269
|
+
if (!existsSync(this.composeFile)) {
|
|
270
|
+
errors.push(`docker-compose.yml not found at ${this.composeFile}`);
|
|
271
|
+
} else {
|
|
272
|
+
info.push(`Compose file: ${this.composeFile}`);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Check if Docker daemon is running
|
|
276
|
+
try {
|
|
277
|
+
execSync("docker info", { stdio: "ignore" });
|
|
278
|
+
info.push("Docker daemon is running");
|
|
279
|
+
} catch {
|
|
280
|
+
errors.push("Docker daemon is not running");
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Check container health if running
|
|
284
|
+
const running = await this.isRunning();
|
|
285
|
+
if (running) {
|
|
286
|
+
info.push("Hive container is running");
|
|
287
|
+
|
|
288
|
+
// Check health endpoint
|
|
289
|
+
const config = await this.getConfig();
|
|
290
|
+
const healthy = await waitForHttpPort(config.gateway.port, "/health", 5000);
|
|
291
|
+
|
|
292
|
+
if (healthy) {
|
|
293
|
+
info.push("Hive health check passed");
|
|
294
|
+
} else {
|
|
295
|
+
warnings.push("Hive container is running but health check failed");
|
|
296
|
+
}
|
|
297
|
+
} else {
|
|
298
|
+
warnings.push("Hive container is not running");
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
valid: errors.length === 0,
|
|
303
|
+
errors,
|
|
304
|
+
warnings,
|
|
305
|
+
info,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation Adapter Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides automatic detection and instantiation of the appropriate
|
|
5
|
+
* installation adapter based on the current environment.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { InstallationAdapter, InstallationType, AdapterOptions } from "./types";
|
|
9
|
+
import { DockerAdapter } from "./docker";
|
|
10
|
+
import { BunGlobalAdapter } from "./bun-global";
|
|
11
|
+
import { BinaryAdapter } from "./binary";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Priority order for adapter detection
|
|
15
|
+
* Lower number = higher priority
|
|
16
|
+
*/
|
|
17
|
+
const DETECTION_PRIORITY: InstallationType[] = [
|
|
18
|
+
"docker", // Standard Docker
|
|
19
|
+
"binary", // Compiled binary
|
|
20
|
+
"bun-global", // Global npm installation
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Create adapter instances for all available types
|
|
25
|
+
*/
|
|
26
|
+
function createAllAdapters(options?: { hiveDir?: string }): Record<InstallationType, InstallationAdapter> {
|
|
27
|
+
return {
|
|
28
|
+
"docker": new DockerAdapter({ hiveDir: options?.hiveDir }),
|
|
29
|
+
"bun-global": new BunGlobalAdapter({ hiveDir: options?.hiveDir }),
|
|
30
|
+
"binary": new BinaryAdapter({ hiveDir: options?.hiveDir }),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Detect and return the appropriate installation adapter
|
|
36
|
+
*
|
|
37
|
+
* Detection strategy:
|
|
38
|
+
* 1. If forceType is specified, use that adapter
|
|
39
|
+
* 2. Check for Hostinguer configuration (most specific)
|
|
40
|
+
* 3. Check for standard Docker installation
|
|
41
|
+
* 4. Check for compiled binary
|
|
42
|
+
* 5. Check for global Bun installation
|
|
43
|
+
* 6. Default to BinaryAdapter (embedded UI fallback)
|
|
44
|
+
*/
|
|
45
|
+
export async function detectAdapter(options?: AdapterOptions): Promise<InstallationAdapter> {
|
|
46
|
+
const hiveDir = options?.hiveDir;
|
|
47
|
+
const verbose = options?.verbose ?? false;
|
|
48
|
+
|
|
49
|
+
// Force specific adapter type
|
|
50
|
+
if (options?.forceType) {
|
|
51
|
+
const adapters = createAllAdapters({ hiveDir });
|
|
52
|
+
const adapter = adapters[options.forceType];
|
|
53
|
+
|
|
54
|
+
if (verbose) {
|
|
55
|
+
console.log(`Using forced adapter: ${adapter.name} (${options.forceType})`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return adapter;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Try detection in priority order
|
|
62
|
+
const adapters = createAllAdapters({ hiveDir });
|
|
63
|
+
|
|
64
|
+
for (const type of DETECTION_PRIORITY) {
|
|
65
|
+
const adapter = adapters[type];
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
const isDetected = await adapter.detect();
|
|
69
|
+
|
|
70
|
+
if (isDetected) {
|
|
71
|
+
if (verbose) {
|
|
72
|
+
console.log(`Detected installation: ${adapter.name} (${type})`);
|
|
73
|
+
}
|
|
74
|
+
return adapter;
|
|
75
|
+
}
|
|
76
|
+
} catch (error) {
|
|
77
|
+
if (verbose) {
|
|
78
|
+
console.warn(`Error detecting ${type}:`, (error as Error).message);
|
|
79
|
+
}
|
|
80
|
+
// Continue to next adapter
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Fallback: return BinaryAdapter as default
|
|
85
|
+
// This handles cases where we're running from source or embedded
|
|
86
|
+
if (verbose) {
|
|
87
|
+
console.log("No specific installation detected, using BinaryAdapter (fallback)");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return adapters.binary;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Detect all available installation methods
|
|
95
|
+
* Returns an array of adapters that detected successfully
|
|
96
|
+
*/
|
|
97
|
+
export async function detectAllAdapters(options?: { hiveDir?: string }): Promise<InstallationAdapter[]> {
|
|
98
|
+
const adapters = createAllAdapters({ hiveDir: options?.hiveDir });
|
|
99
|
+
const available: InstallationAdapter[] = [];
|
|
100
|
+
|
|
101
|
+
for (const type of DETECTION_PRIORITY) {
|
|
102
|
+
const adapter = adapters[type];
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
if (await adapter.detect()) {
|
|
106
|
+
available.push(adapter);
|
|
107
|
+
}
|
|
108
|
+
} catch {
|
|
109
|
+
// Adapter detection failed, skip
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return available;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Get the primary installation type
|
|
118
|
+
*/
|
|
119
|
+
export async function getInstallationType(options?: { hiveDir?: string }): Promise<InstallationType> {
|
|
120
|
+
const adapter = await detectAdapter({ hiveDir: options?.hiveDir });
|
|
121
|
+
return adapter.type;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Check if a specific installation type is available
|
|
126
|
+
*/
|
|
127
|
+
export async function isInstallationTypeAvailable(
|
|
128
|
+
type: InstallationType,
|
|
129
|
+
options?: { hiveDir?: string }
|
|
130
|
+
): Promise<boolean> {
|
|
131
|
+
const adapters = createAllAdapters({ hiveDir: options?.hiveDir });
|
|
132
|
+
const adapter = adapters[type];
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
return await adapter.detect();
|
|
136
|
+
} catch {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Get adapter by type
|
|
143
|
+
*/
|
|
144
|
+
export function getAdapterByType(
|
|
145
|
+
type: InstallationType,
|
|
146
|
+
options?: { hiveDir?: string }
|
|
147
|
+
): InstallationAdapter {
|
|
148
|
+
const adapters = createAllAdapters({ hiveDir: options?.hiveDir });
|
|
149
|
+
return adapters[type];
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Installation type display names
|
|
154
|
+
*/
|
|
155
|
+
export const INSTALLATION_TYPE_NAMES: Record<InstallationType, string> = {
|
|
156
|
+
"docker": "Docker Compose",
|
|
157
|
+
"bun-global": "Bun Global (npm-style)",
|
|
158
|
+
"binary": "Standalone Binary",
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Installation type descriptions
|
|
163
|
+
*/
|
|
164
|
+
export const INSTALLATION_TYPE_DESCRIPTIONS: Record<InstallationType, string> = {
|
|
165
|
+
"docker": "Standard Docker Compose installation with named volumes",
|
|
166
|
+
"bun-global": "Global installation via `bun install -g @johpaz/hive-agents`",
|
|
167
|
+
"binary": "Standalone compiled binary with embedded UI (or Docker container)",
|
|
168
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installation Adapters
|
|
3
|
+
*
|
|
4
|
+
* Unified interface for different Hive installation methods.
|
|
5
|
+
* Each adapter handles the specifics of its installation type,
|
|
6
|
+
* providing a consistent API for gateway management.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { detectAdapter } from "@johpaz/hive-agents-cli/adapters";
|
|
11
|
+
*
|
|
12
|
+
* const adapter = await detectAdapter();
|
|
13
|
+
* console.log(`Detected: ${adapter.name}`);
|
|
14
|
+
*
|
|
15
|
+
* const config = await adapter.getConfig();
|
|
16
|
+
* console.log(`Gateway port: ${config.gateway.port}`);
|
|
17
|
+
*
|
|
18
|
+
* const validation = await adapter.validate();
|
|
19
|
+
* if (!validation.valid) {
|
|
20
|
+
* console.error("Validation errors:", validation.errors);
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @packageDocumentation
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
// Types and interfaces
|
|
28
|
+
export type {
|
|
29
|
+
InstallationType,
|
|
30
|
+
InstallationAdapter,
|
|
31
|
+
InstallationConfig,
|
|
32
|
+
InstallationPaths,
|
|
33
|
+
GatewayConfig,
|
|
34
|
+
ValidationResult,
|
|
35
|
+
AdapterOptions,
|
|
36
|
+
} from "./types";
|
|
37
|
+
|
|
38
|
+
// Constants and schemas
|
|
39
|
+
export {
|
|
40
|
+
DEFAULT_GATEWAY_CONFIG,
|
|
41
|
+
PORTS,
|
|
42
|
+
gatewayConfigSchema,
|
|
43
|
+
installationPathsSchema,
|
|
44
|
+
installationConfigSchema,
|
|
45
|
+
} from "./types";
|
|
46
|
+
|
|
47
|
+
// Configuration utilities
|
|
48
|
+
export {
|
|
49
|
+
getHiveDir,
|
|
50
|
+
getDefaultPaths,
|
|
51
|
+
loadEnvFile,
|
|
52
|
+
mergeEnv,
|
|
53
|
+
validateGatewayConfig,
|
|
54
|
+
validateInstallationConfig,
|
|
55
|
+
findFreePort,
|
|
56
|
+
isPortAvailable,
|
|
57
|
+
waitForPort,
|
|
58
|
+
waitForHttpPort,
|
|
59
|
+
expandPath,
|
|
60
|
+
getDistDir,
|
|
61
|
+
isDevMode,
|
|
62
|
+
isChildProcess,
|
|
63
|
+
getPlatformInfo,
|
|
64
|
+
} from "./config";
|
|
65
|
+
|
|
66
|
+
// Adapters
|
|
67
|
+
export { DockerAdapter } from "./docker";
|
|
68
|
+
export { BunGlobalAdapter } from "./bun-global";
|
|
69
|
+
export { BinaryAdapter } from "./binary";
|
|
70
|
+
|
|
71
|
+
// Factory and detection
|
|
72
|
+
export {
|
|
73
|
+
detectAdapter,
|
|
74
|
+
detectAllAdapters,
|
|
75
|
+
getInstallationType,
|
|
76
|
+
isInstallationTypeAvailable,
|
|
77
|
+
getAdapterByType,
|
|
78
|
+
INSTALLATION_TYPE_NAMES,
|
|
79
|
+
INSTALLATION_TYPE_DESCRIPTIONS,
|
|
80
|
+
} from "./factory";
|