@xopcai/xopc 0.0.191 → 0.0.193
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DstnJCS5.js → activity-store-BwmdJ5pv.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DvEkT222.js → agent-avatar-dicebear-DmNq0t2n.js} +1 -1
- package/dist/gateway/static/root/assets/agents-BOo1rVn9.js +68 -0
- package/dist/gateway/static/root/assets/{api-BTL9kayv.js → api-BM1hNzjw.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-COpP_pKN.js → app-management-settings-panel-B3xStqSX.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DTVNUEDq.js → appearance-settings-DglyenDq.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DC9qPFTx.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-IpX6VA0o.js → archive-plugin-DvtcrBss.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CKVFNUi1.js → attachment-load-CALdq4xM.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-BIGGKb0T.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BrfvfOS4.js → binary-plugins-GaVuvrDI.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-D9sEfg32.js → block-editor-C2KrMYa_.js} +4 -4
- package/dist/gateway/static/root/assets/browser-settings-page-CPW_E-xj.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-BixZ5lCR.js → browser-workflow-inputs-FfEEjhIS.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-YEFuodJI.js → browser-workflows-page-DFP9_UQk.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CsD8aGHU.js +7 -0
- package/dist/gateway/static/root/assets/capability-presets-api-BoOzFotX.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-NCeyWH6Z.js +3 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-BThDGiO3.js → channel-recipient-api-_8IiTxRB.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CknzwxNC.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-DPaJSYX_.js +1 -0
- package/dist/gateway/static/root/assets/{code-editor-D4_k-6QN.js → code-editor-dFzqyDXS.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-BMMqC0_9.js → connectors-api-vaSrhPF8.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DEGE7xp_.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-Bm8koRoD.js → cron-expression-BjFuXlGY.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-DOdkHdPv.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-CMG3mcaJ.js → desktop-pet-Dz-Yf8Uu.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-D8aaPb0x.js → desktop-pet-settings-C8EHFEtd.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-C95yW03b.js → directory-picker-path-field-DKbfmZlZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DsG7Z9lV.js → extension-debug-page-Dq0xsr_e.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CUAXEbAt.js → extension-page-IgSLUyWP.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-VC-8Pjn2.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-DL70Nakc.js → gateway-config-api-CH2R7yqo.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-BgDxQ08c.js → gateway-settings-DLQJWaBQ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-EO9mKvzE.js → gateway-startup-retry--2njcDpC.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-BX7q55uZ.js → heartbeat-settings-43loWoGb.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-DqvpI6LC.js +3 -0
- package/dist/gateway/static/root/assets/html-workspace-editor-bXK5tq64.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-Bu7PyVSh.js → image-generation-api-Cki7jfEV.js} +1 -1
- package/dist/gateway/static/root/assets/index-BpkdvHH0.js +150 -0
- package/dist/gateway/static/root/assets/index-CFVjH-EK.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Dt6wS5zW.js → keyboard-shortcuts-settings-DJDZes_8.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CvNQM6qm.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-DcD3-N00.js → local-apps-page-C2ajOn1D.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-deR2zRaE.js → locale-store-Bjvw7jtg.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-BLm5yWqQ.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-B6EVkJQy.js → management-settings--_eXnFVr.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-editor-BvUebh3C.js → markdown-editor-TWGaF7Xa.js} +2 -2
- package/dist/gateway/static/root/assets/{markdown-split-CHUjCnBh.js → markdown-split-iL2oi-x2.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DRrtI2O0.js → media-plugins-BIbkLVpQ.js} +1 -1
- package/dist/gateway/static/root/assets/messages-DQ5X6cXp.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-fermYvpI.js → notes-page-xFxaZ6gT.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-PAftxL3V.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-BO262zuu.js → page-tabs-CROi9zm1.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-yZYTy-2e.js → preview-open-alternatives-BwYcPjOM.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-Dgy8XWhR.js → product-open-page-BezeuVFd.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CCdfZcw-.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-DOG9zm5e.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-DQBFgveI.js +1 -0
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bs6tpSyX.js +5 -0
- package/dist/gateway/static/root/assets/{schema-form-DdE4gtw_.js → schema-form-CWoSjz9s.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Db6L6M2H.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CcO2bd6q.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CiYU8AvV.js → settings-form-section-BJaMEHsX.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bv03cWib.js → settings-loading-skeleton-sn4k17x7.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-D2hfeFPX.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-t_Ox1slk.js → settings-page-layout-CLtUsWsu.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-UmQC_uZ1.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DF8gW6bo.js → share-preview-page-BJ58AluH.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BZKn6Fdc.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-Cx3i24w_.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-DjUllGtk.js +2 -0
- package/dist/gateway/static/root/assets/skills-page.utils-CZYIuE26.js +1 -0
- package/dist/gateway/static/root/assets/style-TIDOdKy0.js +7 -0
- package/dist/gateway/static/root/assets/system-settings-panel-DUrgdQMk.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-BGG2cFe9.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-DnBOcGXi.js → theme-store-DtxpMC5S.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-4XBsLEuv.js → typed-models-lib-CRNMvvFX.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BN2QgFGn.js → use-autosave-Dle3-zdQ.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-BLLmw5S1.js +1 -0
- package/dist/gateway/static/root/assets/{vendor-codemirror--gTq3YAI.js → vendor-codemirror-DRr7hFaD.js} +16 -16
- package/dist/gateway/static/root/assets/voice-api-key-field-BrWH0dCl.js +1 -0
- package/dist/gateway/static/root/assets/{work-discovery-overlay-nmEAafFl.js → work-discovery-overlay-BZ1l9CFM.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-page-BnPF2vx7.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BnNWBDwz.js → workflow-run-setup-panel-BK6e9yzK.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Bp5JxQJa.js +5 -0
- package/dist/gateway/static/root/index.html +7 -7
- package/dist/gateway/static/root/notification-sw.js +15 -0
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +2 -0
- package/dist/src/agent/agent-manager.js +76 -0
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +1 -1
- package/dist/src/agent/background-review/run-background-review.js +3 -12
- package/dist/src/agent/embedded/run-for-session.js +3 -0
- package/dist/src/agent/embedded/run-turn.js +4 -1
- package/dist/src/agent/embedded/session-runner.js +3 -4
- package/dist/src/agent/embedded/types.d.ts +10 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -2
- package/dist/src/agent/external-tools/mcp-provider.d.ts +1 -0
- package/dist/src/agent/external-tools/mcp-provider.js +21 -6
- package/dist/src/agent/image/generation/provider-registry.js +1 -0
- package/dist/src/agent/image/generation/providers/dashscope.js +20 -0
- package/dist/src/agent/image/generation/providers/fal.d.ts +1 -1
- package/dist/src/agent/image/generation/providers/fal.js +12 -6
- package/dist/src/agent/image/generation/providers/google.js +8 -0
- package/dist/src/agent/image/generation/providers/minimax.js +20 -0
- package/dist/src/agent/image/generation/providers/openai.js +36 -26
- package/dist/src/agent/image/generation/types.d.ts +13 -0
- package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
- package/dist/src/agent/mcp/bundle-mcp-gateway.js +2 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +5 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js +11 -3
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +3 -2
- package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
- package/dist/src/agent/mcp/index.js +2 -2
- package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.d.ts +2 -1
- package/dist/src/agent/mcp/mcp-transport.js +22 -4
- package/dist/src/agent/memory/compaction.js +19 -17
- package/dist/src/agent/memory/context-budget.js +2 -3
- package/dist/src/agent/memory/understanding/service.d.ts +1 -0
- package/dist/src/agent/memory/understanding/service.js +49 -20
- package/dist/src/agent/memory/understanding/types.d.ts +1 -0
- package/dist/src/agent/memory/user-context-coordinator.js +6 -0
- package/dist/src/agent/orchestration/agent-orchestrator.js +15 -1
- package/dist/src/agent/service/direct-turn-helpers.js +14 -5
- package/dist/src/agent/skills/index.d.ts +1 -1
- package/dist/src/agent/skills/index.js +2 -2
- package/dist/src/agent/skills/installer.d.ts +3 -10
- package/dist/src/agent/skills/installer.js +99 -156
- package/dist/src/agent/skills/marketplace/adapter.types.d.ts +3 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +30 -6
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +21 -4
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +7 -4
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +3 -0
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +7 -1
- package/dist/src/agent/skills/marketplace/search.d.ts +2 -2
- package/dist/src/agent/skills/marketplace/search.js +52 -21
- package/dist/src/agent/skills/skills-marketplace.d.ts +1 -1
- package/dist/src/agent/skills/skills-marketplace.js +2 -2
- package/dist/src/agent/skills/types.d.ts +0 -8
- package/dist/src/agent/tools/exec-command.d.ts +1 -0
- package/dist/src/agent/tools/exec-command.js +2 -1
- package/dist/src/agent/tools/factory.d.ts +1 -0
- package/dist/src/agent/tools/factory.js +17 -2
- package/dist/src/agent/tools/managed-job-tool.d.ts +1 -1
- package/dist/src/agent/tools/managed-job-tool.js +3 -2
- package/dist/src/agent/tools/skill-install-tool.d.ts +2 -2
- package/dist/src/agent/tools/skill-install-tool.js +8 -4
- package/dist/src/agent/tools/skills-marketplace-search-tool.js +3 -2
- package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
- package/dist/src/agent/tools/workflow-tool.js +14 -4
- package/dist/src/agent-manifest/schema.d.ts +20 -0
- package/dist/src/agent-manifest/schema.js +6 -1
- package/dist/src/auth/oauth/xopc-cloud.js +163 -7
- package/dist/src/browser/providers/cloakbrowser.js +1 -1
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-manifest.js +4 -0
- package/dist/src/cli/commands/doctor/checks/node-version.js +3 -3
- package/dist/src/cli/commands/doctor/checks/tool-runtimes.d.ts +2 -0
- package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +36 -0
- package/dist/src/cli/commands/doctor/flow.js +2 -0
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/models.js +0 -1
- package/dist/src/cli/commands/onboard/model.d.ts +16 -1
- package/dist/src/cli/commands/onboard/model.js +65 -4
- package/dist/src/cli/commands/onboard.js +13 -1
- package/dist/src/cli/commands/runtime.d.ts +1 -0
- package/dist/src/cli/commands/runtime.js +77 -0
- package/dist/src/cli/commands/setup.js +15 -1
- package/dist/src/cli/commands/skills.js +7 -4
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/schema.d.ts +125 -0
- package/dist/src/config/schema.js +77 -2
- package/dist/src/config/voice.d.ts +6 -0
- package/dist/src/config/voice.js +17 -0
- package/dist/src/extensions/install.js +1 -1
- package/dist/src/extensions/types/providers.d.ts +4 -0
- package/dist/src/gateway/capability-presets-admin.d.ts +9 -0
- package/dist/src/gateway/capability-presets-admin.js +24 -6
- package/dist/src/gateway/chat-stream/mapper.js +8 -4
- package/dist/src/gateway/chat-stream/protocol.d.ts +10 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
- package/dist/src/gateway/hono/routes/commands-skills.js +2 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/local-apps.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +2 -3
- package/dist/src/gateway/hono/routes/runtime-tools.d.ts +3 -0
- package/dist/src/gateway/hono/routes/runtime-tools.js +142 -0
- package/dist/src/gateway/hono/routes/understanding-sources.js +2 -1
- package/dist/src/gateway/hono/routes/update.js +2 -2
- package/dist/src/gateway/hono/routes/voice.js +43 -2
- package/dist/src/gateway/hono/routes/you.js +22 -25
- package/dist/src/gateway/image-generation-setup.d.ts +2 -3
- package/dist/src/gateway/image-generation-setup.js +39 -8
- package/dist/src/gateway/index.js +1 -1
- package/dist/src/gateway/run-loop.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +1 -1
- package/dist/src/gateway/service/marketplace-service.js +2 -2
- package/dist/src/gateway/service/run-gateway-agent.js +21 -8
- package/dist/src/gateway/service.js +5 -5
- package/dist/src/infra/gateway-processes.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +2 -2
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/providers/extension-stream-bridge.js +8 -7
- package/dist/src/providers/model-catalog-store.d.ts +24 -4
- package/dist/src/providers/model-catalog-store.js +11 -0
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/prompt-cache-payload.d.ts +13 -0
- package/dist/src/providers/prompt-cache-payload.js +110 -0
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/providers/xopc-cloud-model-source.js +52 -6
- package/dist/src/runtime-tools/archive.d.ts +8 -0
- package/dist/src/runtime-tools/archive.js +99 -0
- package/dist/src/runtime-tools/bootstrap.d.ts +16 -0
- package/dist/src/runtime-tools/bootstrap.js +33 -0
- package/dist/src/runtime-tools/catalog.d.ts +19 -0
- package/dist/src/runtime-tools/catalog.js +59 -0
- package/dist/src/runtime-tools/command.d.ts +15 -0
- package/dist/src/runtime-tools/command.js +59 -0
- package/dist/src/runtime-tools/download-source.d.ts +24 -0
- package/dist/src/runtime-tools/download-source.js +125 -0
- package/dist/src/runtime-tools/downloader.d.ts +21 -0
- package/dist/src/runtime-tools/downloader.js +137 -0
- package/dist/src/runtime-tools/environment.d.ts +20 -0
- package/dist/src/runtime-tools/environment.js +113 -0
- package/dist/src/runtime-tools/errors.d.ts +10 -0
- package/dist/src/runtime-tools/errors.js +14 -0
- package/dist/src/runtime-tools/index.d.ts +7 -0
- package/dist/src/runtime-tools/index.js +7 -0
- package/dist/src/runtime-tools/install-lock.d.ts +1 -0
- package/dist/src/runtime-tools/install-lock.js +50 -0
- package/dist/src/runtime-tools/manager.d.ts +20 -0
- package/dist/src/runtime-tools/manager.js +641 -0
- package/dist/src/runtime-tools/manifest-store.d.ts +3 -0
- package/dist/src/runtime-tools/manifest-store.js +26 -0
- package/dist/src/runtime-tools/network.d.ts +9 -0
- package/dist/src/runtime-tools/network.js +41 -0
- package/dist/src/runtime-tools/offline-bundle.d.ts +16 -0
- package/dist/src/runtime-tools/offline-bundle.js +41 -0
- package/dist/src/runtime-tools/paths.d.ts +7 -0
- package/dist/src/runtime-tools/paths.js +22 -0
- package/dist/src/runtime-tools/probe.d.ts +7 -0
- package/dist/src/runtime-tools/probe.js +71 -0
- package/dist/src/runtime-tools/prune.d.ts +10 -0
- package/dist/src/runtime-tools/prune.js +93 -0
- package/dist/src/runtime-tools/types.d.ts +70 -0
- package/dist/src/runtime-tools/types.js +1 -0
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +42 -20
- package/dist/src/tasks/home-query-service.js +1 -5
- package/dist/src/tasks/index.js +2 -2
- package/dist/src/tasks/project-operating-view-service.d.ts +2 -1
- package/dist/src/tasks/project-operating-view-service.js +6 -4
- package/dist/src/tasks/task-dependency-service.d.ts +2 -1
- package/dist/src/tasks/task-dependency-service.js +15 -0
- package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
- package/dist/src/tunnel/frpc-binary.js +1 -1
- package/dist/src/user-context/domain.d.ts +2 -1
- package/dist/src/user-context/domain.js +12 -1
- package/dist/src/user-context/manual-understanding.js +8 -10
- package/dist/src/user-context/planner.js +1 -6
- package/dist/src/user-context/sources/activity-clustering.d.ts +5 -0
- package/dist/src/user-context/sources/activity-clustering.js +130 -0
- package/dist/src/user-context/sources/catalog.js +26 -0
- package/dist/src/user-context/sources/local-source-contract.d.ts +3 -0
- package/dist/src/user-context/sources/local-source-contract.js +15 -0
- package/dist/src/user-context/sources/repository.js +7 -1
- package/dist/src/user-context/sources/types.d.ts +7 -1
- package/dist/src/user-context/understanding.d.ts +15 -0
- package/dist/src/user-context/understanding.js +24 -0
- package/dist/src/voice/local/model-files.js +1 -1
- package/dist/src/voice/metadata/builtin.js +99 -32
- package/dist/src/voice/metadata/types.d.ts +3 -0
- package/dist/src/voice/stt/availability.js +4 -1
- package/dist/src/voice/stt/config-slice.d.ts +0 -2
- package/dist/src/voice/stt/config-slice.js +1 -6
- package/dist/src/voice/stt/factory.js +2 -2
- package/dist/src/voice/stt/index.d.ts +2 -3
- package/dist/src/voice/stt/list-providers.js +1 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.d.ts +0 -19
- package/dist/src/voice/stt/providers/alibaba-transcription.js +59 -132
- package/dist/src/voice/stt/providers/index.d.ts +1 -0
- package/dist/src/voice/stt/providers/index.js +2 -1
- package/dist/src/voice/stt/providers/openai-transcription.d.ts +2 -2
- package/dist/src/voice/stt/providers/openai-transcription.js +4 -4
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.d.ts +2 -0
- package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +49 -0
- package/dist/src/voice/stt/types.js +2 -2
- package/dist/src/voice/tts/providers/index.d.ts +1 -0
- package/dist/src/voice/tts/providers/index.js +2 -1
- package/dist/src/voice/tts/providers/xopc-cloud-speech.d.ts +2 -0
- package/dist/src/voice/tts/providers/xopc-cloud-speech.js +113 -0
- package/dist/src/voice/tts/types.d.ts +1 -1
- package/dist/src/work-discovery/analyzer.js +9 -4
- package/dist/src/work-discovery/candidate-discovery.d.ts +1 -0
- package/dist/src/work-discovery/candidate-discovery.js +3 -3
- package/dist/src/work-discovery/index.js +2 -2
- package/dist/src/work-discovery/service.d.ts +2 -1
- package/dist/src/work-discovery/service.js +126 -37
- package/dist/src/work-discovery/types.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +8 -0
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/agents-CXyivfqY.js +0 -68
- package/dist/gateway/static/root/assets/apps-page-DsE67BSO.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-D0TVev47.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DpZzq8j2.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-B9Cmcuff.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-C_EpuQtk.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-CvzD5qSv.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BKrm7tJ9.js +0 -2
- package/dist/gateway/static/root/assets/extension-settings-page-CsR7QOJo.js +0 -1
- package/dist/gateway/static/root/assets/home-page-C08Nen5T.js +0 -3
- package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
- package/dist/gateway/static/root/assets/index-B-_CEvIX.js +0 -150
- package/dist/gateway/static/root/assets/index-D6e3tPL-.css +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-BQVC0tWq.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-D6yvW-E4.js +0 -2
- package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-BVCwabjq.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-CS4Ujor7.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-DMtPC8c4.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BpfHZT88.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BZkyrJBM.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DQlK0A4l.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-C-LdINFj.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-HRG_lK4_.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-v_iLhxxa.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-S-bjtsXX.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BiNBfaX5.js +0 -2
- package/dist/gateway/static/root/assets/skills-page.utils-DlnGtvAH.js +0 -1
- package/dist/gateway/static/root/assets/system-settings-panel-Bv7GXFc6.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-BhQcOpnx.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-PtcY7BoJ.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DnhJtC5l.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-C5Kwe_bc.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-Z_qzaohv.js +0 -11
- /package/dist/gateway/static/root/assets/{workflows-page-DLioOiRN.css → style-DLioOiRN.css} +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { RuntimeError } from "./errors.js";
|
|
2
|
+
import { fetchRuntimeResource, readRuntimeResponseText } from "./network.js";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { createReadStream, createWriteStream } from "node:fs";
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { access, mkdir, rename, rm, stat } from "node:fs/promises";
|
|
7
|
+
import { pipeline } from "node:stream/promises";
|
|
8
|
+
//#region src/runtime-tools/downloader.ts
|
|
9
|
+
const MAX_ARCHIVE_BYTES = 500 * 1024 * 1024;
|
|
10
|
+
const MAX_CHECKSUM_BYTES = 1024 * 1024;
|
|
11
|
+
var RuntimeDownloadTransportError = class extends Error {
|
|
12
|
+
constructor(message, allowsSourceFallback, options) {
|
|
13
|
+
super(message, options);
|
|
14
|
+
this.allowsSourceFallback = allowsSourceFallback;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var RuntimeDownloadContentError = class extends Error {};
|
|
18
|
+
function canFallbackRuntimeDownload(error) {
|
|
19
|
+
return error instanceof RuntimeError && error.code === "RUNTIME_DOWNLOAD_FAILED" && error.cause instanceof RuntimeDownloadTransportError && error.cause.allowsSourceFallback;
|
|
20
|
+
}
|
|
21
|
+
async function fetchText(url, timeoutMs, proxy, signal) {
|
|
22
|
+
const response = await fetchRuntimeResource({
|
|
23
|
+
url,
|
|
24
|
+
timeoutMs,
|
|
25
|
+
proxy,
|
|
26
|
+
signal,
|
|
27
|
+
init: { redirect: "follow" }
|
|
28
|
+
});
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
await response.body?.cancel().catch(() => {});
|
|
31
|
+
throw new Error(`HTTP ${response.status} for ${url}`);
|
|
32
|
+
}
|
|
33
|
+
const declaredSize = Number(response.headers.get("content-length"));
|
|
34
|
+
if (Number.isFinite(declaredSize) && declaredSize > MAX_CHECKSUM_BYTES) {
|
|
35
|
+
await response.body?.cancel().catch(() => {});
|
|
36
|
+
throw new Error("Checksum response exceeds size limit");
|
|
37
|
+
}
|
|
38
|
+
return await readRuntimeResponseText(response, MAX_CHECKSUM_BYTES);
|
|
39
|
+
}
|
|
40
|
+
async function resolveExpectedChecksum(params) {
|
|
41
|
+
const lines = (await fetchText(params.checksumUrl, params.timeoutMs, params.proxy, params.signal)).split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
const match = line.match(/^([a-fA-F0-9]{64})(?:\s+[*]?(.+))?$/);
|
|
44
|
+
if (!match) continue;
|
|
45
|
+
if (!match[2] || match[2] === params.archiveFile) return match[1].toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
throw new RuntimeError(`Checksum for ${params.archiveFile} was not found`, "RUNTIME_CHECKSUM_MISMATCH", params.runtime, "resolve_checksum", true);
|
|
48
|
+
}
|
|
49
|
+
async function sha256File(path) {
|
|
50
|
+
const hash = createHash("sha256");
|
|
51
|
+
for await (const chunk of createReadStream(path)) hash.update(chunk);
|
|
52
|
+
return hash.digest("hex");
|
|
53
|
+
}
|
|
54
|
+
async function downloadVerifiedArchive(params) {
|
|
55
|
+
await mkdir(dirname(params.targetPath), { recursive: true });
|
|
56
|
+
const completedPath = params.targetPath.replace(/\.partial$/, "");
|
|
57
|
+
try {
|
|
58
|
+
await access(completedPath);
|
|
59
|
+
if (await sha256File(completedPath) === params.expectedSha256.toLowerCase()) return completedPath;
|
|
60
|
+
await rm(completedPath, { force: true });
|
|
61
|
+
} catch {}
|
|
62
|
+
try {
|
|
63
|
+
let resumeOffset = await stat(params.targetPath).then((info) => info.isFile() ? info.size : 0).catch(() => 0);
|
|
64
|
+
if (resumeOffset > MAX_ARCHIVE_BYTES) {
|
|
65
|
+
await rm(params.targetPath, { force: true });
|
|
66
|
+
resumeOffset = 0;
|
|
67
|
+
}
|
|
68
|
+
let response;
|
|
69
|
+
const request = async (offset) => {
|
|
70
|
+
try {
|
|
71
|
+
return await fetchRuntimeResource({
|
|
72
|
+
url: params.url,
|
|
73
|
+
timeoutMs: params.timeoutMs,
|
|
74
|
+
proxy: params.proxy,
|
|
75
|
+
signal: params.signal,
|
|
76
|
+
init: {
|
|
77
|
+
redirect: "follow",
|
|
78
|
+
headers: offset > 0 ? { Range: `bytes=${offset}-` } : void 0
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
} catch (error) {
|
|
82
|
+
throw new RuntimeDownloadTransportError(error instanceof Error ? error.message : String(error), !params.signal?.aborted, { cause: error });
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
response = await request(resumeOffset);
|
|
86
|
+
if (resumeOffset > 0 && response.status === 416) {
|
|
87
|
+
await response.body?.cancel().catch(() => {});
|
|
88
|
+
await rm(params.targetPath, { force: true });
|
|
89
|
+
resumeOffset = 0;
|
|
90
|
+
response = await request(0);
|
|
91
|
+
}
|
|
92
|
+
if (!response.ok || !response.body) {
|
|
93
|
+
await response.body?.cancel().catch(() => {});
|
|
94
|
+
throw new RuntimeDownloadTransportError(`HTTP ${response.status}`, response.status === 429 || response.status >= 500);
|
|
95
|
+
}
|
|
96
|
+
let total;
|
|
97
|
+
if (response.status === 206) {
|
|
98
|
+
const contentRange = response.headers.get("content-range")?.match(/^bytes (\d+)-(\d+)\/(\d+)$/);
|
|
99
|
+
if (!contentRange || Number(contentRange[1]) !== resumeOffset) {
|
|
100
|
+
await response.body.cancel().catch(() => {});
|
|
101
|
+
throw new RuntimeDownloadContentError("Invalid Content-Range response");
|
|
102
|
+
}
|
|
103
|
+
total = Number(contentRange[3]);
|
|
104
|
+
} else {
|
|
105
|
+
if (resumeOffset > 0) {
|
|
106
|
+
await rm(params.targetPath, { force: true });
|
|
107
|
+
resumeOffset = 0;
|
|
108
|
+
}
|
|
109
|
+
total = Number(response.headers.get("content-length")) || void 0;
|
|
110
|
+
}
|
|
111
|
+
if (total && total > MAX_ARCHIVE_BYTES) {
|
|
112
|
+
await response.body.cancel().catch(() => {});
|
|
113
|
+
throw new Error("Archive exceeds size limit");
|
|
114
|
+
}
|
|
115
|
+
let downloaded = resumeOffset;
|
|
116
|
+
const transform = new TransformStream({ transform(chunk, controller) {
|
|
117
|
+
downloaded += chunk.byteLength;
|
|
118
|
+
if (downloaded > MAX_ARCHIVE_BYTES) throw new Error("Archive exceeds size limit");
|
|
119
|
+
params.onProgress?.(downloaded, total);
|
|
120
|
+
controller.enqueue(chunk);
|
|
121
|
+
} });
|
|
122
|
+
await pipeline(response.body.pipeThrough(transform), createWriteStream(params.targetPath, {
|
|
123
|
+
flags: resumeOffset > 0 ? "a" : "w",
|
|
124
|
+
mode: 384
|
|
125
|
+
}));
|
|
126
|
+
if (total && downloaded !== total) throw new RuntimeDownloadTransportError("Archive download was truncated", true);
|
|
127
|
+
if (await sha256File(params.targetPath) !== params.expectedSha256.toLowerCase()) throw new RuntimeError(`Checksum mismatch for ${params.runtime} archive`, "RUNTIME_CHECKSUM_MISMATCH", params.runtime, "verify_archive", true);
|
|
128
|
+
await rename(params.targetPath, completedPath);
|
|
129
|
+
return completedPath;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
if (error instanceof RuntimeDownloadContentError || error instanceof RuntimeError && error.code === "RUNTIME_CHECKSUM_MISMATCH" || error instanceof Error && error.message === "Archive exceeds size limit") await rm(params.targetPath, { force: true });
|
|
132
|
+
if (error instanceof RuntimeError) throw error;
|
|
133
|
+
throw new RuntimeError(`Failed to download ${params.runtime} runtime: ${error instanceof Error ? error.message : String(error)}`, "RUNTIME_DOWNLOAD_FAILED", params.runtime, "download", true, [], { cause: error });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//#endregion
|
|
137
|
+
export { canFallbackRuntimeDownload, downloadVerifiedArchive, resolveExpectedChecksum, sha256File };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RuntimeToolsConfig } from '../config/schema.js';
|
|
2
|
+
import type { ResolvedRuntime, RuntimeKind } from './types.js';
|
|
3
|
+
export interface RuntimeEnvironmentOptions {
|
|
4
|
+
stateDir: string;
|
|
5
|
+
config: RuntimeToolsConfig;
|
|
6
|
+
baseEnv: Record<string, string>;
|
|
7
|
+
runtimes?: RuntimeKind[];
|
|
8
|
+
extraBinDirs?: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface RuntimeEnvironmentResult {
|
|
11
|
+
env: Record<string, string>;
|
|
12
|
+
resolved: ResolvedRuntime[];
|
|
13
|
+
}
|
|
14
|
+
export declare function buildRuntimeEnvironment(options: RuntimeEnvironmentOptions): Promise<RuntimeEnvironmentResult>;
|
|
15
|
+
export declare function resolveRuntimeCommand(params: {
|
|
16
|
+
command: string;
|
|
17
|
+
stateDir: string;
|
|
18
|
+
config: RuntimeToolsConfig;
|
|
19
|
+
allowProvision: boolean;
|
|
20
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { applyPathPrepend } from "../infra/path-prepend.js";
|
|
2
|
+
import { ManagedRuntimeManager } from "./manager.js";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { access, readdir } from "node:fs/promises";
|
|
5
|
+
//#region src/runtime-tools/environment.ts
|
|
6
|
+
const POLLUTING_ENV_KEYS = [
|
|
7
|
+
"NODE_OPTIONS",
|
|
8
|
+
"NODE_PATH",
|
|
9
|
+
"NPM_CONFIG_PREFIX",
|
|
10
|
+
"npm_config_prefix",
|
|
11
|
+
"PYTHONHOME",
|
|
12
|
+
"PYTHONPATH",
|
|
13
|
+
"VIRTUAL_ENV",
|
|
14
|
+
"CONDA_PREFIX",
|
|
15
|
+
"UV_PYTHON_INSTALL_DIR",
|
|
16
|
+
"UV_PYTHON_BIN_DIR",
|
|
17
|
+
"UV_TOOL_DIR",
|
|
18
|
+
"UV_TOOL_BIN_DIR",
|
|
19
|
+
"UV_CACHE_DIR",
|
|
20
|
+
"UV_PYTHON_INSTALL_MIRROR"
|
|
21
|
+
];
|
|
22
|
+
async function skillEnvironmentBinDirs(stateDir) {
|
|
23
|
+
const root = join(stateDir, "tools", "environments", "skills");
|
|
24
|
+
let environmentIds;
|
|
25
|
+
try {
|
|
26
|
+
environmentIds = await readdir(root);
|
|
27
|
+
} catch {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const candidates = environmentIds.flatMap((id) => [join(root, id, "bin"), join(root, id, "node_modules", ".bin")]);
|
|
31
|
+
return (await Promise.all(candidates.map(async (candidate) => {
|
|
32
|
+
try {
|
|
33
|
+
await access(candidate);
|
|
34
|
+
return candidate;
|
|
35
|
+
} catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}))).filter((candidate) => candidate !== null);
|
|
39
|
+
}
|
|
40
|
+
async function buildRuntimeEnvironment(options) {
|
|
41
|
+
const env = { ...options.baseEnv };
|
|
42
|
+
for (const key of POLLUTING_ENV_KEYS) delete env[key];
|
|
43
|
+
const manager = new ManagedRuntimeManager({
|
|
44
|
+
stateDir: options.stateDir,
|
|
45
|
+
config: options.config
|
|
46
|
+
});
|
|
47
|
+
const runtimes = options.runtimes ?? [
|
|
48
|
+
"node",
|
|
49
|
+
"uv",
|
|
50
|
+
"python"
|
|
51
|
+
];
|
|
52
|
+
const resolved = (await Promise.all(runtimes.map(async (runtime) => {
|
|
53
|
+
try {
|
|
54
|
+
return await manager.resolve({
|
|
55
|
+
runtime,
|
|
56
|
+
allowProvision: false
|
|
57
|
+
});
|
|
58
|
+
} catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}))).filter((item) => item !== null);
|
|
62
|
+
const managedBinDirs = resolved.filter((item) => item.source === "managed").map((item) => dirname(item.executable));
|
|
63
|
+
const skillBinDirs = await skillEnvironmentBinDirs(options.stateDir);
|
|
64
|
+
applyPathPrepend(env, [
|
|
65
|
+
...managedBinDirs,
|
|
66
|
+
...skillBinDirs,
|
|
67
|
+
...options.extraBinDirs ?? []
|
|
68
|
+
]);
|
|
69
|
+
if (resolved.some((item) => item.runtime === "python")) {
|
|
70
|
+
env.PYTHONNOUSERSITE = "1";
|
|
71
|
+
env.PIP_REQUIRE_VIRTUALENV = "1";
|
|
72
|
+
}
|
|
73
|
+
if (resolved.some((item) => item.runtime === "uv")) {
|
|
74
|
+
env.UV_PYTHON_INSTALL_DIR = resolved.find((item) => item.runtime === "python" && item.source === "managed")?.installDir ?? join(options.stateDir, "tools", "python", "versions");
|
|
75
|
+
env.UV_PYTHON_BIN_DIR = join(options.stateDir, "tools", "python", "bin");
|
|
76
|
+
env.UV_CACHE_DIR = join(options.stateDir, "tools", "cache", "uv");
|
|
77
|
+
env.UV_MANAGED_PYTHON = "1";
|
|
78
|
+
env.UV_NO_CONFIG = "1";
|
|
79
|
+
}
|
|
80
|
+
if (resolved.some((item) => item.runtime === "node")) {
|
|
81
|
+
env.COREPACK_HOME = join(options.stateDir, "tools", "cache", "corepack");
|
|
82
|
+
env.npm_config_cache = join(options.stateDir, "tools", "cache", "npm");
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
env,
|
|
86
|
+
resolved
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const COMMAND_RUNTIME = {
|
|
90
|
+
node: "node",
|
|
91
|
+
npm: "node",
|
|
92
|
+
npx: "node",
|
|
93
|
+
corepack: "node",
|
|
94
|
+
uv: "uv",
|
|
95
|
+
uvx: "uv",
|
|
96
|
+
python: "python",
|
|
97
|
+
python3: "python"
|
|
98
|
+
};
|
|
99
|
+
async function resolveRuntimeCommand(params) {
|
|
100
|
+
const runtime = COMMAND_RUNTIME[params.command.toLowerCase()];
|
|
101
|
+
if (!runtime) return params.command;
|
|
102
|
+
const resolved = await new ManagedRuntimeManager({
|
|
103
|
+
stateDir: params.stateDir,
|
|
104
|
+
config: params.config
|
|
105
|
+
}).resolve({
|
|
106
|
+
runtime,
|
|
107
|
+
allowProvision: params.allowProvision
|
|
108
|
+
});
|
|
109
|
+
const key = params.command.toLowerCase() === "python3" ? "python" : params.command.toLowerCase();
|
|
110
|
+
return resolved.executables[key] ?? resolved.executable;
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
export { buildRuntimeEnvironment, resolveRuntimeCommand };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RuntimeKind } from './types.js';
|
|
2
|
+
export type RuntimeErrorCode = 'RUNTIME_DISABLED' | 'RUNTIME_UNSUPPORTED' | 'RUNTIME_NOT_FOUND' | 'RUNTIME_VERSION_MISMATCH' | 'RUNTIME_DOWNLOAD_FAILED' | 'RUNTIME_CHECKSUM_MISMATCH' | 'RUNTIME_ARCHIVE_INVALID' | 'RUNTIME_INSTALL_LOCKED' | 'RUNTIME_PROBE_FAILED' | 'RUNTIME_CORRUPTED' | 'RUNTIME_PERMISSION_DENIED';
|
|
3
|
+
export declare class RuntimeError extends Error {
|
|
4
|
+
readonly code: RuntimeErrorCode;
|
|
5
|
+
readonly runtime: RuntimeKind;
|
|
6
|
+
readonly phase: string;
|
|
7
|
+
readonly repairable: boolean;
|
|
8
|
+
readonly hints: string[];
|
|
9
|
+
constructor(message: string, code: RuntimeErrorCode, runtime: RuntimeKind, phase: string, repairable: boolean, hints?: string[], options?: ErrorOptions);
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/runtime-tools/errors.ts
|
|
2
|
+
var RuntimeError = class extends Error {
|
|
3
|
+
constructor(message, code, runtime, phase, repairable, hints = [], options) {
|
|
4
|
+
super(message, options);
|
|
5
|
+
this.code = code;
|
|
6
|
+
this.runtime = runtime;
|
|
7
|
+
this.phase = phase;
|
|
8
|
+
this.repairable = repairable;
|
|
9
|
+
this.hints = hints;
|
|
10
|
+
this.name = "RuntimeError";
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { RuntimeError };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RuntimeError } from "./errors.js";
|
|
2
|
+
import { bundledPythonArchiveName, resolveOfflineBundleArtifact } from "./offline-bundle.js";
|
|
3
|
+
import { ManagedRuntimeManager } from "./manager.js";
|
|
4
|
+
import { buildRuntimeEnvironment, resolveRuntimeCommand } from "./environment.js";
|
|
5
|
+
import { provisionEagerRuntimes } from "./bootstrap.js";
|
|
6
|
+
import { pruneRuntimeTools } from "./prune.js";
|
|
7
|
+
export { ManagedRuntimeManager, RuntimeError, buildRuntimeEnvironment, bundledPythonArchiveName, provisionEagerRuntimes, pruneRuntimeTools, resolveOfflineBundleArtifact, resolveRuntimeCommand };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function withInstallLock<T>(path: string, metadata: Record<string, unknown>, fn: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { dirname } from "node:path";
|
|
2
|
+
import { mkdir, open, readFile, unlink } from "node:fs/promises";
|
|
3
|
+
//#region src/runtime-tools/install-lock.ts
|
|
4
|
+
const LOCK_STALE_MS = 1800 * 1e3;
|
|
5
|
+
const LOCK_WAIT_MS = 250;
|
|
6
|
+
function isProcessAlive(pid) {
|
|
7
|
+
try {
|
|
8
|
+
process.kill(pid, 0);
|
|
9
|
+
return true;
|
|
10
|
+
} catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async function staleLock(path) {
|
|
15
|
+
try {
|
|
16
|
+
const value = JSON.parse(await readFile(path, "utf8"));
|
|
17
|
+
const pid = typeof value.pid === "number" ? value.pid : 0;
|
|
18
|
+
const createdAt = typeof value.createdAt === "number" ? value.createdAt : 0;
|
|
19
|
+
return !isProcessAlive(pid) && Date.now() - createdAt > LOCK_STALE_MS;
|
|
20
|
+
} catch {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function withInstallLock(path, metadata, fn) {
|
|
25
|
+
await mkdir(dirname(path), { recursive: true });
|
|
26
|
+
while (true) try {
|
|
27
|
+
const handle = await open(path, "wx", 384);
|
|
28
|
+
await handle.writeFile(JSON.stringify({
|
|
29
|
+
pid: process.pid,
|
|
30
|
+
createdAt: Date.now(),
|
|
31
|
+
...metadata
|
|
32
|
+
}));
|
|
33
|
+
await handle.close();
|
|
34
|
+
break;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
if (error.code !== "EEXIST") throw error;
|
|
37
|
+
if (await staleLock(path)) {
|
|
38
|
+
await unlink(path).catch(() => void 0);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, LOCK_WAIT_MS));
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
return await fn();
|
|
45
|
+
} finally {
|
|
46
|
+
await unlink(path).catch(() => void 0);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { withInstallLock };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { ResolvedRuntime, RuntimeKind, RuntimeManagerOptions, RuntimeRequest, RuntimeStatus } from './types.js';
|
|
3
|
+
export declare class ManagedRuntimeManager extends EventEmitter {
|
|
4
|
+
private readonly options;
|
|
5
|
+
private readonly inFlight;
|
|
6
|
+
constructor(options: RuntimeManagerOptions);
|
|
7
|
+
defaultVersion(runtime: RuntimeKind): string;
|
|
8
|
+
resolve(request: RuntimeRequest): Promise<ResolvedRuntime>;
|
|
9
|
+
private resolveUncached;
|
|
10
|
+
probeManaged(runtime: RuntimeKind, requestedVersion: string): Promise<ResolvedRuntime | null>;
|
|
11
|
+
install(runtime: RuntimeKind, version?: string, signal?: AbortSignal): Promise<ResolvedRuntime>;
|
|
12
|
+
private installDistribution;
|
|
13
|
+
private installPython;
|
|
14
|
+
private installBundledPython;
|
|
15
|
+
private uvEnvironment;
|
|
16
|
+
status(runtime: RuntimeKind): Promise<RuntimeStatus>;
|
|
17
|
+
statusAll(): Promise<RuntimeStatus[]>;
|
|
18
|
+
repair(runtime: RuntimeKind): Promise<ResolvedRuntime>;
|
|
19
|
+
private progress;
|
|
20
|
+
}
|