hivehq 2.0.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/CHANGELOG.md +592 -0
- package/LICENSE +208 -0
- package/LICENSE.BSL +101 -0
- package/NOTICE +15 -0
- package/README.en.md +451 -0
- package/README.md +329 -0
- package/SECURITY.md +59 -0
- package/TRADEMARK.md +41 -0
- package/assets/hive-hero.png +0 -0
- package/assets/hive-team-view.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/qq-group.jpg +0 -0
- package/dist/bin/team +7 -0
- package/dist/bin/team.cmd +3 -0
- package/dist/src/cli/hive-remote.d.ts +46 -0
- package/dist/src/cli/hive-remote.js +257 -0
- package/dist/src/cli/hive-update.d.ts +75 -0
- package/dist/src/cli/hive-update.js +215 -0
- package/dist/src/cli/hive.d.ts +78 -0
- package/dist/src/cli/hive.js +336 -0
- package/dist/src/cli/team.d.ts +38 -0
- package/dist/src/cli/team.js +762 -0
- package/dist/src/server/agent-command-resolver.d.ts +17 -0
- package/dist/src/server/agent-command-resolver.js +106 -0
- package/dist/src/server/agent-exit-classification.d.ts +6 -0
- package/dist/src/server/agent-exit-classification.js +6 -0
- package/dist/src/server/agent-launch-cache.d.ts +20 -0
- package/dist/src/server/agent-launch-cache.js +75 -0
- package/dist/src/server/agent-launch-resolver.d.ts +4 -0
- package/dist/src/server/agent-launch-resolver.js +38 -0
- package/dist/src/server/agent-manager-support.d.ts +36 -0
- package/dist/src/server/agent-manager-support.js +318 -0
- package/dist/src/server/agent-manager.d.ts +54 -0
- package/dist/src/server/agent-manager.js +104 -0
- package/dist/src/server/agent-run-bootstrap.d.ts +83 -0
- package/dist/src/server/agent-run-bootstrap.js +101 -0
- package/dist/src/server/agent-run-exit-handler.d.ts +8 -0
- package/dist/src/server/agent-run-exit-handler.js +32 -0
- package/dist/src/server/agent-run-start-context.d.ts +24 -0
- package/dist/src/server/agent-run-start-context.js +1 -0
- package/dist/src/server/agent-run-starter.d.ts +30 -0
- package/dist/src/server/agent-run-starter.js +155 -0
- package/dist/src/server/agent-run-store.d.ts +51 -0
- package/dist/src/server/agent-run-store.js +137 -0
- package/dist/src/server/agent-run-sync.d.ts +10 -0
- package/dist/src/server/agent-run-sync.js +32 -0
- package/dist/src/server/agent-runtime-active-run.d.ts +3 -0
- package/dist/src/server/agent-runtime-active-run.js +10 -0
- package/dist/src/server/agent-runtime-close.d.ts +5 -0
- package/dist/src/server/agent-runtime-close.js +36 -0
- package/dist/src/server/agent-runtime-contract.d.ts +48 -0
- package/dist/src/server/agent-runtime-contract.js +1 -0
- package/dist/src/server/agent-runtime-flow-adapter.d.ts +10 -0
- package/dist/src/server/agent-runtime-flow-adapter.js +14 -0
- package/dist/src/server/agent-runtime-list-runs.d.ts +3 -0
- package/dist/src/server/agent-runtime-list-runs.js +18 -0
- package/dist/src/server/agent-runtime-ports.d.ts +22 -0
- package/dist/src/server/agent-runtime-ports.js +1 -0
- package/dist/src/server/agent-runtime-stop-run.d.ts +4 -0
- package/dist/src/server/agent-runtime-stop-run.js +19 -0
- package/dist/src/server/agent-runtime-types.d.ts +5 -0
- package/dist/src/server/agent-runtime-types.js +1 -0
- package/dist/src/server/agent-runtime.d.ts +10 -0
- package/dist/src/server/agent-runtime.js +143 -0
- package/dist/src/server/agent-session-store.d.ts +7 -0
- package/dist/src/server/agent-session-store.js +45 -0
- package/dist/src/server/agent-startup-instructions.d.ts +20 -0
- package/dist/src/server/agent-startup-instructions.js +36 -0
- package/dist/src/server/agent-stdin-dispatcher.d.ts +52 -0
- package/dist/src/server/agent-stdin-dispatcher.js +224 -0
- package/dist/src/server/agent-tokens.d.ts +15 -0
- package/dist/src/server/agent-tokens.js +25 -0
- package/dist/src/server/app-state-store.d.ts +10 -0
- package/dist/src/server/app-state-store.js +12 -0
- package/dist/src/server/app.d.ts +20 -0
- package/dist/src/server/app.js +211 -0
- package/dist/src/server/claude-command-defaults.d.ts +1 -0
- package/dist/src/server/claude-command-defaults.js +5 -0
- package/dist/src/server/claude-session-coordinator.d.ts +10 -0
- package/dist/src/server/claude-session-coordinator.js +68 -0
- package/dist/src/server/claude-session-support.d.ts +1 -0
- package/dist/src/server/claude-session-support.js +1 -0
- package/dist/src/server/command-preset-defaults.d.ts +11 -0
- package/dist/src/server/command-preset-defaults.js +63 -0
- package/dist/src/server/command-preset-store.d.ts +49 -0
- package/dist/src/server/command-preset-store.js +83 -0
- package/dist/src/server/cron-util.d.ts +7 -0
- package/dist/src/server/cron-util.js +19 -0
- package/dist/src/server/dispatch-ledger-serializer.d.ts +15 -0
- package/dist/src/server/dispatch-ledger-serializer.js +14 -0
- package/dist/src/server/dispatch-ledger-store.d.ts +108 -0
- package/dist/src/server/dispatch-ledger-store.js +241 -0
- package/dist/src/server/env-sync-message.d.ts +9 -0
- package/dist/src/server/env-sync-message.js +29 -0
- package/dist/src/server/feature-flags.d.ts +42 -0
- package/dist/src/server/feature-flags.js +24 -0
- package/dist/src/server/fs-browse.d.ts +40 -0
- package/dist/src/server/fs-browse.js +306 -0
- package/dist/src/server/fs-pick-folder.d.ts +25 -0
- package/dist/src/server/fs-pick-folder.js +115 -0
- package/dist/src/server/fs-sandbox.d.ts +15 -0
- package/dist/src/server/fs-sandbox.js +56 -0
- package/dist/src/server/hive-team-guidance.d.ts +39 -0
- package/dist/src/server/hive-team-guidance.js +295 -0
- package/dist/src/server/http-errors.d.ts +22 -0
- package/dist/src/server/http-errors.js +44 -0
- package/dist/src/server/live-run-registry.d.ts +22 -0
- package/dist/src/server/live-run-registry.js +52 -0
- package/dist/src/server/local-request-guard.d.ts +3 -0
- package/dist/src/server/local-request-guard.js +41 -0
- package/dist/src/server/machine-name.d.ts +2 -0
- package/dist/src/server/machine-name.js +13 -0
- package/dist/src/server/marketplace-store.d.ts +38 -0
- package/dist/src/server/marketplace-store.js +85 -0
- package/dist/src/server/message-log-store.d.ts +51 -0
- package/dist/src/server/message-log-store.js +90 -0
- package/dist/src/server/open-target-commands.d.ts +54 -0
- package/dist/src/server/open-target-commands.js +204 -0
- package/dist/src/server/orchestrator-autostart.d.ts +42 -0
- package/dist/src/server/orchestrator-autostart.js +114 -0
- package/dist/src/server/orchestrator-launch.d.ts +24 -0
- package/dist/src/server/orchestrator-launch.js +71 -0
- package/dist/src/server/package-version.d.ts +17 -0
- package/dist/src/server/package-version.js +32 -0
- package/dist/src/server/path-canonicalization.d.ts +3 -0
- package/dist/src/server/path-canonicalization.js +29 -0
- package/dist/src/server/platform-path.d.ts +4 -0
- package/dist/src/server/platform-path.js +26 -0
- package/dist/src/server/post-start-input-writer.d.ts +6 -0
- package/dist/src/server/post-start-input-writer.js +242 -0
- package/dist/src/server/preset-launch-support.d.ts +6 -0
- package/dist/src/server/preset-launch-support.js +98 -0
- package/dist/src/server/pty-output-bus.d.ts +8 -0
- package/dist/src/server/pty-output-bus.js +32 -0
- package/dist/src/server/recovery-summary.d.ts +15 -0
- package/dist/src/server/recovery-summary.js +92 -0
- package/dist/src/server/remote-audit-store.d.ts +51 -0
- package/dist/src/server/remote-audit-store.js +108 -0
- package/dist/src/server/remote-config-keys.d.ts +17 -0
- package/dist/src/server/remote-config-keys.js +27 -0
- package/dist/src/server/remote-control-constants.d.ts +30 -0
- package/dist/src/server/remote-control-constants.js +29 -0
- package/dist/src/server/remote-device-session.d.ts +40 -0
- package/dist/src/server/remote-device-session.js +22 -0
- package/dist/src/server/remote-device-store.d.ts +36 -0
- package/dist/src/server/remote-device-store.js +67 -0
- package/dist/src/server/remote-frame-bridge.d.ts +102 -0
- package/dist/src/server/remote-frame-bridge.js +791 -0
- package/dist/src/server/remote-gateway-client.d.ts +14 -0
- package/dist/src/server/remote-gateway-client.js +36 -0
- package/dist/src/server/remote-loopback-auth.d.ts +6 -0
- package/dist/src/server/remote-loopback-auth.js +112 -0
- package/dist/src/server/remote-pairing-tunnel.d.ts +59 -0
- package/dist/src/server/remote-pairing-tunnel.js +146 -0
- package/dist/src/server/remote-pairing.d.ts +58 -0
- package/dist/src/server/remote-pairing.js +237 -0
- package/dist/src/server/remote-tunnel.d.ts +113 -0
- package/dist/src/server/remote-tunnel.js +514 -0
- package/dist/src/server/report-outbox-store.d.ts +36 -0
- package/dist/src/server/report-outbox-store.js +33 -0
- package/dist/src/server/restart-policy-support.d.ts +30 -0
- package/dist/src/server/restart-policy-support.js +21 -0
- package/dist/src/server/restart-policy.d.ts +18 -0
- package/dist/src/server/restart-policy.js +77 -0
- package/dist/src/server/role-template-store.d.ts +45 -0
- package/dist/src/server/role-template-store.js +76 -0
- package/dist/src/server/role-templates.d.ts +7 -0
- package/dist/src/server/role-templates.js +54 -0
- package/dist/src/server/route-helpers.d.ts +9 -0
- package/dist/src/server/route-helpers.js +61 -0
- package/dist/src/server/route-types.d.ts +121 -0
- package/dist/src/server/route-types.js +1 -0
- package/dist/src/server/routes-dispatches.d.ts +2 -0
- package/dist/src/server/routes-dispatches.js +54 -0
- package/dist/src/server/routes-fs.d.ts +2 -0
- package/dist/src/server/routes-fs.js +24 -0
- package/dist/src/server/routes-marketplace.d.ts +2 -0
- package/dist/src/server/routes-marketplace.js +54 -0
- package/dist/src/server/routes-open-workspace.d.ts +2 -0
- package/dist/src/server/routes-open-workspace.js +47 -0
- package/dist/src/server/routes-remote.d.ts +2 -0
- package/dist/src/server/routes-remote.js +166 -0
- package/dist/src/server/routes-runtime.d.ts +2 -0
- package/dist/src/server/routes-runtime.js +79 -0
- package/dist/src/server/routes-settings.d.ts +2 -0
- package/dist/src/server/routes-settings.js +213 -0
- package/dist/src/server/routes-tasks.d.ts +2 -0
- package/dist/src/server/routes-tasks.js +47 -0
- package/dist/src/server/routes-team-memory.d.ts +2 -0
- package/dist/src/server/routes-team-memory.js +154 -0
- package/dist/src/server/routes-team-recall.d.ts +2 -0
- package/dist/src/server/routes-team-recall.js +119 -0
- package/dist/src/server/routes-team.d.ts +2 -0
- package/dist/src/server/routes-team.js +351 -0
- package/dist/src/server/routes-ui.d.ts +2 -0
- package/dist/src/server/routes-ui.js +17 -0
- package/dist/src/server/routes-version.d.ts +2 -0
- package/dist/src/server/routes-version.js +6 -0
- package/dist/src/server/routes-workflow-schedules.d.ts +2 -0
- package/dist/src/server/routes-workflow-schedules.js +58 -0
- package/dist/src/server/routes-workflows.d.ts +2 -0
- package/dist/src/server/routes-workflows.js +83 -0
- package/dist/src/server/routes-workspace-memory-dreams.d.ts +2 -0
- package/dist/src/server/routes-workspace-memory-dreams.js +105 -0
- package/dist/src/server/routes-workspace-memory.d.ts +2 -0
- package/dist/src/server/routes-workspace-memory.js +215 -0
- package/dist/src/server/routes-workspaces.d.ts +2 -0
- package/dist/src/server/routes-workspaces.js +177 -0
- package/dist/src/server/routes.d.ts +6 -0
- package/dist/src/server/routes.js +55 -0
- package/dist/src/server/runtime-database.d.ts +3 -0
- package/dist/src/server/runtime-database.js +41 -0
- package/dist/src/server/runtime-message-builders.d.ts +7 -0
- package/dist/src/server/runtime-message-builders.js +60 -0
- package/dist/src/server/runtime-restart-policy.d.ts +18 -0
- package/dist/src/server/runtime-restart-policy.js +12 -0
- package/dist/src/server/runtime-store-contract.d.ts +162 -0
- package/dist/src/server/runtime-store-contract.js +1 -0
- package/dist/src/server/runtime-store-dream.d.ts +23 -0
- package/dist/src/server/runtime-store-dream.js +16 -0
- package/dist/src/server/runtime-store-helpers.d.ts +115 -0
- package/dist/src/server/runtime-store-helpers.js +411 -0
- package/dist/src/server/runtime-store-memory.d.ts +33 -0
- package/dist/src/server/runtime-store-memory.js +37 -0
- package/dist/src/server/runtime-store-remote.d.ts +5 -0
- package/dist/src/server/runtime-store-remote.js +45 -0
- package/dist/src/server/runtime-store-workflows.d.ts +6 -0
- package/dist/src/server/runtime-store-workflows.js +108 -0
- package/dist/src/server/runtime-store.d.ts +4 -0
- package/dist/src/server/runtime-store.js +165 -0
- package/dist/src/server/session-capture-claude.d.ts +34 -0
- package/dist/src/server/session-capture-claude.js +103 -0
- package/dist/src/server/session-capture-codex.d.ts +6 -0
- package/dist/src/server/session-capture-codex.js +108 -0
- package/dist/src/server/session-capture-gemini.d.ts +5 -0
- package/dist/src/server/session-capture-gemini.js +81 -0
- package/dist/src/server/session-capture-opencode.d.ts +22 -0
- package/dist/src/server/session-capture-opencode.js +75 -0
- package/dist/src/server/session-capture.d.ts +77 -0
- package/dist/src/server/session-capture.js +123 -0
- package/dist/src/server/settings-store.d.ts +22 -0
- package/dist/src/server/settings-store.js +22 -0
- package/dist/src/server/sqlite-schema-v10.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v10.js +13 -0
- package/dist/src/server/sqlite-schema-v11.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v11.js +10 -0
- package/dist/src/server/sqlite-schema-v12.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v12.js +21 -0
- package/dist/src/server/sqlite-schema-v13.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v13.js +4 -0
- package/dist/src/server/sqlite-schema-v14.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v14.js +84 -0
- package/dist/src/server/sqlite-schema-v15.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v15.js +73 -0
- package/dist/src/server/sqlite-schema-v16.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v16.js +6 -0
- package/dist/src/server/sqlite-schema-v17.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v17.js +15 -0
- package/dist/src/server/sqlite-schema-v18.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v18.js +6 -0
- package/dist/src/server/sqlite-schema-v19.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v19.js +17 -0
- package/dist/src/server/sqlite-schema-v20.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v20.js +20 -0
- package/dist/src/server/sqlite-schema-v21.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v21.js +20 -0
- package/dist/src/server/sqlite-schema-v22.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v22.js +27 -0
- package/dist/src/server/sqlite-schema-v23.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v23.js +43 -0
- package/dist/src/server/sqlite-schema-v24.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v24.js +34 -0
- package/dist/src/server/sqlite-schema-v25.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v25.js +127 -0
- package/dist/src/server/sqlite-schema-v26.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v26.js +56 -0
- package/dist/src/server/sqlite-schema-v27.d.ts +6 -0
- package/dist/src/server/sqlite-schema-v27.js +92 -0
- package/dist/src/server/sqlite-schema-v28.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v28.js +19 -0
- package/dist/src/server/sqlite-schema-v5.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v5.js +61 -0
- package/dist/src/server/sqlite-schema-v7.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v7.js +70 -0
- package/dist/src/server/sqlite-schema-v8.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v8.js +6 -0
- package/dist/src/server/sqlite-schema-v9.d.ts +2 -0
- package/dist/src/server/sqlite-schema-v9.js +6 -0
- package/dist/src/server/sqlite-schema.d.ts +3 -0
- package/dist/src/server/sqlite-schema.js +353 -0
- package/dist/src/server/startup-command-parser.d.ts +20 -0
- package/dist/src/server/startup-command-parser.js +72 -0
- package/dist/src/server/system-message.d.ts +8 -0
- package/dist/src/server/system-message.js +8 -0
- package/dist/src/server/task-deps.d.ts +32 -0
- package/dist/src/server/task-deps.js +40 -0
- package/dist/src/server/tasks-file-watcher.d.ts +47 -0
- package/dist/src/server/tasks-file-watcher.js +200 -0
- package/dist/src/server/tasks-file.d.ts +23 -0
- package/dist/src/server/tasks-file.js +101 -0
- package/dist/src/server/tasks-websocket-server.d.ts +8 -0
- package/dist/src/server/tasks-websocket-server.js +95 -0
- package/dist/src/server/team-authz.d.ts +13 -0
- package/dist/src/server/team-authz.js +53 -0
- package/dist/src/server/team-autostaff.d.ts +16 -0
- package/dist/src/server/team-autostaff.js +16 -0
- package/dist/src/server/team-list-enrichment.d.ts +22 -0
- package/dist/src/server/team-list-enrichment.js +40 -0
- package/dist/src/server/team-list-serializer.d.ts +2 -0
- package/dist/src/server/team-list-serializer.js +11 -0
- package/dist/src/server/team-memory-digest.d.ts +52 -0
- package/dist/src/server/team-memory-digest.js +200 -0
- package/dist/src/server/team-memory-dream-applier.d.ts +5 -0
- package/dist/src/server/team-memory-dream-applier.js +234 -0
- package/dist/src/server/team-memory-dream-http-serializers.d.ts +13 -0
- package/dist/src/server/team-memory-dream-http-serializers.js +12 -0
- package/dist/src/server/team-memory-dream-ops.d.ts +40 -0
- package/dist/src/server/team-memory-dream-ops.js +153 -0
- package/dist/src/server/team-memory-dream-reverter.d.ts +22 -0
- package/dist/src/server/team-memory-dream-reverter.js +221 -0
- package/dist/src/server/team-memory-dream-run-store.d.ts +23 -0
- package/dist/src/server/team-memory-dream-run-store.js +211 -0
- package/dist/src/server/team-memory-dream-runner.d.ts +37 -0
- package/dist/src/server/team-memory-dream-runner.js +178 -0
- package/dist/src/server/team-memory-dream-scheduler.d.ts +32 -0
- package/dist/src/server/team-memory-dream-scheduler.js +115 -0
- package/dist/src/server/team-memory-dream-store.d.ts +19 -0
- package/dist/src/server/team-memory-dream-store.js +16 -0
- package/dist/src/server/team-memory-dream-types.d.ts +104 -0
- package/dist/src/server/team-memory-dream-types.js +23 -0
- package/dist/src/server/team-memory-export.d.ts +22 -0
- package/dist/src/server/team-memory-export.js +220 -0
- package/dist/src/server/team-memory-feature.d.ts +12 -0
- package/dist/src/server/team-memory-feature.js +12 -0
- package/dist/src/server/team-memory-http-serializers.d.ts +102 -0
- package/dist/src/server/team-memory-http-serializers.js +46 -0
- package/dist/src/server/team-memory-injection.d.ts +31 -0
- package/dist/src/server/team-memory-injection.js +49 -0
- package/dist/src/server/team-memory-store.d.ts +116 -0
- package/dist/src/server/team-memory-store.js +513 -0
- package/dist/src/server/team-operations.d.ts +102 -0
- package/dist/src/server/team-operations.js +387 -0
- package/dist/src/server/team-recall-store.d.ts +38 -0
- package/dist/src/server/team-recall-store.js +205 -0
- package/dist/src/server/terminal-flow-control.d.ts +19 -0
- package/dist/src/server/terminal-flow-control.js +116 -0
- package/dist/src/server/terminal-input-profile.d.ts +10 -0
- package/dist/src/server/terminal-input-profile.js +9 -0
- package/dist/src/server/terminal-protocol.d.ts +29 -0
- package/dist/src/server/terminal-protocol.js +47 -0
- package/dist/src/server/terminal-state-mirror.d.ts +21 -0
- package/dist/src/server/terminal-state-mirror.js +67 -0
- package/dist/src/server/terminal-stream-hub.d.ts +9 -0
- package/dist/src/server/terminal-stream-hub.js +192 -0
- package/dist/src/server/terminal-ws-server.d.ts +6 -0
- package/dist/src/server/terminal-ws-server.js +115 -0
- package/dist/src/server/ui-auth-helpers.d.ts +4 -0
- package/dist/src/server/ui-auth-helpers.js +28 -0
- package/dist/src/server/ui-auth.d.ts +8 -0
- package/dist/src/server/ui-auth.js +32 -0
- package/dist/src/server/version-service.d.ts +16 -0
- package/dist/src/server/version-service.js +72 -0
- package/dist/src/server/webhook-notifier.d.ts +34 -0
- package/dist/src/server/webhook-notifier.js +47 -0
- package/dist/src/server/websocket-upgrade-safety.d.ts +10 -0
- package/dist/src/server/websocket-upgrade-safety.js +35 -0
- package/dist/src/server/windows-command-line.d.ts +3 -0
- package/dist/src/server/windows-command-line.js +9 -0
- package/dist/src/server/windows-filename.d.ts +2 -0
- package/dist/src/server/windows-filename.js +33 -0
- package/dist/src/server/worker-output-tracker.d.ts +14 -0
- package/dist/src/server/worker-output-tracker.js +50 -0
- package/dist/src/server/workflow-cli-policy.d.ts +60 -0
- package/dist/src/server/workflow-cli-policy.js +110 -0
- package/dist/src/server/workflow-dispatch-awaiter.d.ts +12 -0
- package/dist/src/server/workflow-dispatch-awaiter.js +80 -0
- package/dist/src/server/workflow-feature.d.ts +15 -0
- package/dist/src/server/workflow-feature.js +15 -0
- package/dist/src/server/workflow-http-serializers.d.ts +64 -0
- package/dist/src/server/workflow-http-serializers.js +58 -0
- package/dist/src/server/workflow-output-schema.d.ts +18 -0
- package/dist/src/server/workflow-output-schema.js +41 -0
- package/dist/src/server/workflow-run-log-store.d.ts +19 -0
- package/dist/src/server/workflow-run-log-store.js +45 -0
- package/dist/src/server/workflow-run-store.d.ts +50 -0
- package/dist/src/server/workflow-run-store.js +103 -0
- package/dist/src/server/workflow-runner.d.ts +147 -0
- package/dist/src/server/workflow-runner.js +411 -0
- package/dist/src/server/workflow-schedule-create.d.ts +14 -0
- package/dist/src/server/workflow-schedule-create.js +41 -0
- package/dist/src/server/workflow-schedule-store.d.ts +43 -0
- package/dist/src/server/workflow-schedule-store.js +112 -0
- package/dist/src/server/workflow-scheduler.d.ts +36 -0
- package/dist/src/server/workflow-scheduler.js +97 -0
- package/dist/src/server/workflow-script-loader.d.ts +34 -0
- package/dist/src/server/workflow-script-loader.js +106 -0
- package/dist/src/server/workspace-path-validation.d.ts +1 -0
- package/dist/src/server/workspace-path-validation.js +42 -0
- package/dist/src/server/workspace-shell-runtime.d.ts +35 -0
- package/dist/src/server/workspace-shell-runtime.js +228 -0
- package/dist/src/server/workspace-store-contract.d.ts +32 -0
- package/dist/src/server/workspace-store-contract.js +1 -0
- package/dist/src/server/workspace-store-hydration.d.ts +5 -0
- package/dist/src/server/workspace-store-hydration.js +76 -0
- package/dist/src/server/workspace-store-mutations.d.ts +14 -0
- package/dist/src/server/workspace-store-mutations.js +48 -0
- package/dist/src/server/workspace-store-support.d.ts +33 -0
- package/dist/src/server/workspace-store-support.js +36 -0
- package/dist/src/server/workspace-store.d.ts +5 -0
- package/dist/src/server/workspace-store.js +153 -0
- package/dist/src/shared/fs-browse.d.ts +1 -0
- package/dist/src/shared/fs-browse.js +1 -0
- package/dist/src/shared/open-targets.d.ts +20 -0
- package/dist/src/shared/open-targets.js +36 -0
- package/dist/src/shared/path-input.d.ts +12 -0
- package/dist/src/shared/path-input.js +22 -0
- package/dist/src/shared/remote-bridge-routing.d.ts +19 -0
- package/dist/src/shared/remote-bridge-routing.js +141 -0
- package/dist/src/shared/remote-crypto.d.ts +138 -0
- package/dist/src/shared/remote-crypto.js +427 -0
- package/dist/src/shared/remote-pairing-code.d.ts +7 -0
- package/dist/src/shared/remote-pairing-code.js +47 -0
- package/dist/src/shared/remote-protocol.d.ts +160 -0
- package/dist/src/shared/remote-protocol.js +526 -0
- package/dist/src/shared/team-memory.d.ts +11 -0
- package/dist/src/shared/team-memory.js +10 -0
- package/dist/src/shared/team-recall.d.ts +1 -0
- package/dist/src/shared/team-recall.js +1 -0
- package/dist/src/shared/types.d.ts +66 -0
- package/dist/src/shared/types.js +1 -0
- package/dist/vendor/marketplace/en/LICENSE +21 -0
- package/dist/vendor/marketplace/en/SOURCES.md +12 -0
- package/dist/vendor/marketplace/en/academic/academic-anthropologist.md +125 -0
- package/dist/vendor/marketplace/en/academic/academic-geographer.md +127 -0
- package/dist/vendor/marketplace/en/academic/academic-historian.md +123 -0
- package/dist/vendor/marketplace/en/academic/academic-narratologist.md +118 -0
- package/dist/vendor/marketplace/en/academic/academic-psychologist.md +118 -0
- package/dist/vendor/marketplace/en/design/design-brand-guardian.md +322 -0
- package/dist/vendor/marketplace/en/design/design-image-prompt-engineer.md +236 -0
- package/dist/vendor/marketplace/en/design/design-inclusive-visuals-specialist.md +71 -0
- package/dist/vendor/marketplace/en/design/design-ui-designer.md +383 -0
- package/dist/vendor/marketplace/en/design/design-ux-architect.md +469 -0
- package/dist/vendor/marketplace/en/design/design-ux-researcher.md +329 -0
- package/dist/vendor/marketplace/en/design/design-visual-storyteller.md +149 -0
- package/dist/vendor/marketplace/en/design/design-whimsy-injector.md +438 -0
- package/dist/vendor/marketplace/en/engineering/engineering-ai-data-remediation-engineer.md +211 -0
- package/dist/vendor/marketplace/en/engineering/engineering-ai-engineer.md +146 -0
- package/dist/vendor/marketplace/en/engineering/engineering-autonomous-optimization-architect.md +107 -0
- package/dist/vendor/marketplace/en/engineering/engineering-backend-architect.md +235 -0
- package/dist/vendor/marketplace/en/engineering/engineering-cms-developer.md +536 -0
- package/dist/vendor/marketplace/en/engineering/engineering-code-reviewer.md +76 -0
- package/dist/vendor/marketplace/en/engineering/engineering-codebase-onboarding-engineer.md +173 -0
- package/dist/vendor/marketplace/en/engineering/engineering-data-engineer.md +306 -0
- package/dist/vendor/marketplace/en/engineering/engineering-database-optimizer.md +176 -0
- package/dist/vendor/marketplace/en/engineering/engineering-devops-automator.md +376 -0
- package/dist/vendor/marketplace/en/engineering/engineering-email-intelligence-engineer.md +353 -0
- package/dist/vendor/marketplace/en/engineering/engineering-embedded-firmware-engineer.md +173 -0
- package/dist/vendor/marketplace/en/engineering/engineering-feishu-integration-developer.md +598 -0
- package/dist/vendor/marketplace/en/engineering/engineering-filament-optimization-specialist.md +283 -0
- package/dist/vendor/marketplace/en/engineering/engineering-frontend-developer.md +225 -0
- package/dist/vendor/marketplace/en/engineering/engineering-git-workflow-master.md +84 -0
- package/dist/vendor/marketplace/en/engineering/engineering-incident-response-commander.md +444 -0
- package/dist/vendor/marketplace/en/engineering/engineering-minimal-change-engineer.md +207 -0
- package/dist/vendor/marketplace/en/engineering/engineering-mobile-app-builder.md +493 -0
- package/dist/vendor/marketplace/en/engineering/engineering-rapid-prototyper.md +462 -0
- package/dist/vendor/marketplace/en/engineering/engineering-security-engineer.md +304 -0
- package/dist/vendor/marketplace/en/engineering/engineering-senior-developer.md +176 -0
- package/dist/vendor/marketplace/en/engineering/engineering-software-architect.md +81 -0
- package/dist/vendor/marketplace/en/engineering/engineering-solidity-smart-contract-engineer.md +522 -0
- package/dist/vendor/marketplace/en/engineering/engineering-sre.md +90 -0
- package/dist/vendor/marketplace/en/engineering/engineering-technical-writer.md +393 -0
- package/dist/vendor/marketplace/en/engineering/engineering-threat-detection-engineer.md +534 -0
- package/dist/vendor/marketplace/en/engineering/engineering-voice-ai-integration-engineer.md +561 -0
- package/dist/vendor/marketplace/en/engineering/engineering-wechat-mini-program-developer.md +350 -0
- package/dist/vendor/marketplace/en/finance/finance-bookkeeper-controller.md +260 -0
- package/dist/vendor/marketplace/en/finance/finance-financial-analyst.md +234 -0
- package/dist/vendor/marketplace/en/finance/finance-fpa-analyst.md +263 -0
- package/dist/vendor/marketplace/en/finance/finance-investment-researcher.md +272 -0
- package/dist/vendor/marketplace/en/finance/finance-tax-strategist.md +239 -0
- package/dist/vendor/marketplace/en/game-development/blender/blender-addon-engineer.md +234 -0
- package/dist/vendor/marketplace/en/game-development/game-audio-engineer.md +264 -0
- package/dist/vendor/marketplace/en/game-development/game-designer.md +167 -0
- package/dist/vendor/marketplace/en/game-development/godot/godot-gameplay-scripter.md +334 -0
- package/dist/vendor/marketplace/en/game-development/godot/godot-multiplayer-engineer.md +297 -0
- package/dist/vendor/marketplace/en/game-development/godot/godot-shader-developer.md +266 -0
- package/dist/vendor/marketplace/en/game-development/level-designer.md +208 -0
- package/dist/vendor/marketplace/en/game-development/narrative-designer.md +243 -0
- package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-avatar-creator.md +297 -0
- package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-experience-designer.md +305 -0
- package/dist/vendor/marketplace/en/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
- package/dist/vendor/marketplace/en/game-development/technical-artist.md +229 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-architect.md +271 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-editor-tool-developer.md +310 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-multiplayer-engineer.md +321 -0
- package/dist/vendor/marketplace/en/game-development/unity/unity-shader-graph-artist.md +269 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-multiplayer-architect.md +313 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-systems-engineer.md +310 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-technical-artist.md +256 -0
- package/dist/vendor/marketplace/en/game-development/unreal-engine/unreal-world-builder.md +273 -0
- package/dist/vendor/marketplace/en/integrations/mcp-memory/backend-architect-with-memory.md +247 -0
- package/dist/vendor/marketplace/en/manifest.json +1869 -0
- package/dist/vendor/marketplace/en/marketing/marketing-agentic-search-optimizer.md +311 -0
- package/dist/vendor/marketplace/en/marketing/marketing-ai-citation-strategist.md +170 -0
- package/dist/vendor/marketplace/en/marketing/marketing-app-store-optimizer.md +321 -0
- package/dist/vendor/marketplace/en/marketing/marketing-baidu-seo-specialist.md +226 -0
- package/dist/vendor/marketplace/en/marketing/marketing-bilibili-content-strategist.md +199 -0
- package/dist/vendor/marketplace/en/marketing/marketing-book-co-author.md +110 -0
- package/dist/vendor/marketplace/en/marketing/marketing-carousel-growth-engine.md +199 -0
- package/dist/vendor/marketplace/en/marketing/marketing-china-ecommerce-operator.md +283 -0
- package/dist/vendor/marketplace/en/marketing/marketing-china-market-localization-strategist.md +283 -0
- package/dist/vendor/marketplace/en/marketing/marketing-content-creator.md +54 -0
- package/dist/vendor/marketplace/en/marketing/marketing-cross-border-ecommerce.md +259 -0
- package/dist/vendor/marketplace/en/marketing/marketing-douyin-strategist.md +149 -0
- package/dist/vendor/marketplace/en/marketing/marketing-growth-hacker.md +54 -0
- package/dist/vendor/marketplace/en/marketing/marketing-instagram-curator.md +113 -0
- package/dist/vendor/marketplace/en/marketing/marketing-kuaishou-strategist.md +223 -0
- package/dist/vendor/marketplace/en/marketing/marketing-linkedin-content-creator.md +214 -0
- package/dist/vendor/marketplace/en/marketing/marketing-livestream-commerce-coach.md +305 -0
- package/dist/vendor/marketplace/en/marketing/marketing-podcast-strategist.md +277 -0
- package/dist/vendor/marketplace/en/marketing/marketing-private-domain-operator.md +308 -0
- package/dist/vendor/marketplace/en/marketing/marketing-reddit-community-builder.md +123 -0
- package/dist/vendor/marketplace/en/marketing/marketing-seo-specialist.md +321 -0
- package/dist/vendor/marketplace/en/marketing/marketing-short-video-editing-coach.md +412 -0
- package/dist/vendor/marketplace/en/marketing/marketing-social-media-strategist.md +125 -0
- package/dist/vendor/marketplace/en/marketing/marketing-tiktok-strategist.md +125 -0
- package/dist/vendor/marketplace/en/marketing/marketing-twitter-engager.md +126 -0
- package/dist/vendor/marketplace/en/marketing/marketing-video-optimization-specialist.md +119 -0
- package/dist/vendor/marketplace/en/marketing/marketing-wechat-official-account.md +145 -0
- package/dist/vendor/marketplace/en/marketing/marketing-weibo-strategist.md +240 -0
- package/dist/vendor/marketplace/en/marketing/marketing-xiaohongshu-specialist.md +138 -0
- package/dist/vendor/marketplace/en/marketing/marketing-zhihu-strategist.md +162 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-auditor.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-creative-strategist.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-paid-social-strategist.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-ppc-strategist.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-programmatic-buyer.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-search-query-analyst.md +71 -0
- package/dist/vendor/marketplace/en/paid-media/paid-media-tracking-specialist.md +71 -0
- package/dist/vendor/marketplace/en/product/product-behavioral-nudge-engine.md +80 -0
- package/dist/vendor/marketplace/en/product/product-feedback-synthesizer.md +119 -0
- package/dist/vendor/marketplace/en/product/product-manager.md +469 -0
- package/dist/vendor/marketplace/en/product/product-sprint-prioritizer.md +154 -0
- package/dist/vendor/marketplace/en/product/product-trend-researcher.md +159 -0
- package/dist/vendor/marketplace/en/project-management/project-management-experiment-tracker.md +198 -0
- package/dist/vendor/marketplace/en/project-management/project-management-jira-workflow-steward.md +230 -0
- package/dist/vendor/marketplace/en/project-management/project-management-project-shepherd.md +194 -0
- package/dist/vendor/marketplace/en/project-management/project-management-studio-operations.md +200 -0
- package/dist/vendor/marketplace/en/project-management/project-management-studio-producer.md +203 -0
- package/dist/vendor/marketplace/en/project-management/project-manager-senior.md +135 -0
- package/dist/vendor/marketplace/en/sales/sales-account-strategist.md +227 -0
- package/dist/vendor/marketplace/en/sales/sales-coach.md +271 -0
- package/dist/vendor/marketplace/en/sales/sales-deal-strategist.md +180 -0
- package/dist/vendor/marketplace/en/sales/sales-discovery-coach.md +225 -0
- package/dist/vendor/marketplace/en/sales/sales-engineer.md +182 -0
- package/dist/vendor/marketplace/en/sales/sales-outbound-strategist.md +201 -0
- package/dist/vendor/marketplace/en/sales/sales-pipeline-analyst.md +267 -0
- package/dist/vendor/marketplace/en/sales/sales-proposal-strategist.md +217 -0
- package/dist/vendor/marketplace/en/spatial-computing/macos-spatial-metal-engineer.md +337 -0
- package/dist/vendor/marketplace/en/spatial-computing/terminal-integration-specialist.md +70 -0
- package/dist/vendor/marketplace/en/spatial-computing/visionos-spatial-engineer.md +54 -0
- package/dist/vendor/marketplace/en/spatial-computing/xr-cockpit-interaction-specialist.md +32 -0
- package/dist/vendor/marketplace/en/spatial-computing/xr-immersive-developer.md +32 -0
- package/dist/vendor/marketplace/en/spatial-computing/xr-interface-architect.md +32 -0
- package/dist/vendor/marketplace/en/specialized/accounts-payable-agent.md +185 -0
- package/dist/vendor/marketplace/en/specialized/agentic-identity-trust.md +387 -0
- package/dist/vendor/marketplace/en/specialized/agents-orchestrator.md +367 -0
- package/dist/vendor/marketplace/en/specialized/automation-governance-architect.md +216 -0
- package/dist/vendor/marketplace/en/specialized/blockchain-security-auditor.md +463 -0
- package/dist/vendor/marketplace/en/specialized/compliance-auditor.md +158 -0
- package/dist/vendor/marketplace/en/specialized/corporate-training-designer.md +192 -0
- package/dist/vendor/marketplace/en/specialized/customer-service.md +398 -0
- package/dist/vendor/marketplace/en/specialized/data-consolidation-agent.md +60 -0
- package/dist/vendor/marketplace/en/specialized/government-digital-presales-consultant.md +363 -0
- package/dist/vendor/marketplace/en/specialized/healthcare-customer-service.md +389 -0
- package/dist/vendor/marketplace/en/specialized/healthcare-marketing-compliance.md +395 -0
- package/dist/vendor/marketplace/en/specialized/hospitality-guest-services.md +603 -0
- package/dist/vendor/marketplace/en/specialized/hr-onboarding.md +451 -0
- package/dist/vendor/marketplace/en/specialized/identity-graph-operator.md +260 -0
- package/dist/vendor/marketplace/en/specialized/language-translator.md +264 -0
- package/dist/vendor/marketplace/en/specialized/legal-billing-time-tracking.md +569 -0
- package/dist/vendor/marketplace/en/specialized/legal-client-intake.md +492 -0
- package/dist/vendor/marketplace/en/specialized/legal-document-review.md +454 -0
- package/dist/vendor/marketplace/en/specialized/loan-officer-assistant.md +555 -0
- package/dist/vendor/marketplace/en/specialized/lsp-index-engineer.md +314 -0
- package/dist/vendor/marketplace/en/specialized/real-estate-buyer-seller.md +596 -0
- package/dist/vendor/marketplace/en/specialized/recruitment-specialist.md +509 -0
- package/dist/vendor/marketplace/en/specialized/report-distribution-agent.md +65 -0
- package/dist/vendor/marketplace/en/specialized/retail-customer-returns.md +566 -0
- package/dist/vendor/marketplace/en/specialized/sales-data-extraction-agent.md +67 -0
- package/dist/vendor/marketplace/en/specialized/sales-outreach.md +425 -0
- package/dist/vendor/marketplace/en/specialized/specialized-chief-of-staff.md +279 -0
- package/dist/vendor/marketplace/en/specialized/specialized-civil-engineer.md +356 -0
- package/dist/vendor/marketplace/en/specialized/specialized-cultural-intelligence-strategist.md +88 -0
- package/dist/vendor/marketplace/en/specialized/specialized-developer-advocate.md +317 -0
- package/dist/vendor/marketplace/en/specialized/specialized-document-generator.md +55 -0
- package/dist/vendor/marketplace/en/specialized/specialized-french-consulting-market.md +192 -0
- package/dist/vendor/marketplace/en/specialized/specialized-korean-business-navigator.md +216 -0
- package/dist/vendor/marketplace/en/specialized/specialized-mcp-builder.md +248 -0
- package/dist/vendor/marketplace/en/specialized/specialized-model-qa.md +488 -0
- package/dist/vendor/marketplace/en/specialized/specialized-salesforce-architect.md +180 -0
- package/dist/vendor/marketplace/en/specialized/specialized-workflow-architect.md +597 -0
- package/dist/vendor/marketplace/en/specialized/study-abroad-advisor.md +282 -0
- package/dist/vendor/marketplace/en/specialized/supply-chain-strategist.md +582 -0
- package/dist/vendor/marketplace/en/support/support-analytics-reporter.md +365 -0
- package/dist/vendor/marketplace/en/support/support-executive-summary-generator.md +212 -0
- package/dist/vendor/marketplace/en/support/support-finance-tracker.md +442 -0
- package/dist/vendor/marketplace/en/support/support-infrastructure-maintainer.md +618 -0
- package/dist/vendor/marketplace/en/support/support-legal-compliance-checker.md +588 -0
- package/dist/vendor/marketplace/en/support/support-support-responder.md +585 -0
- package/dist/vendor/marketplace/en/testing/testing-accessibility-auditor.md +316 -0
- package/dist/vendor/marketplace/en/testing/testing-api-tester.md +306 -0
- package/dist/vendor/marketplace/en/testing/testing-evidence-collector.md +210 -0
- package/dist/vendor/marketplace/en/testing/testing-performance-benchmarker.md +268 -0
- package/dist/vendor/marketplace/en/testing/testing-reality-checker.md +236 -0
- package/dist/vendor/marketplace/en/testing/testing-test-results-analyzer.md +305 -0
- package/dist/vendor/marketplace/en/testing/testing-tool-evaluator.md +394 -0
- package/dist/vendor/marketplace/en/testing/testing-workflow-optimizer.md +450 -0
- package/dist/vendor/marketplace/zh/LICENSE +22 -0
- package/dist/vendor/marketplace/zh/SOURCES.md +12 -0
- package/dist/vendor/marketplace/zh/academic/academic-anthropologist.md +124 -0
- package/dist/vendor/marketplace/zh/academic/academic-geographer.md +126 -0
- package/dist/vendor/marketplace/zh/academic/academic-historian.md +122 -0
- package/dist/vendor/marketplace/zh/academic/academic-narratologist.md +117 -0
- package/dist/vendor/marketplace/zh/academic/academic-psychologist.md +117 -0
- package/dist/vendor/marketplace/zh/academic/academic-study-planner.md +214 -0
- package/dist/vendor/marketplace/zh/design/design-brand-guardian.md +321 -0
- package/dist/vendor/marketplace/zh/design/design-image-prompt-engineer.md +255 -0
- package/dist/vendor/marketplace/zh/design/design-inclusive-visuals-specialist.md +177 -0
- package/dist/vendor/marketplace/zh/design/design-ui-designer.md +382 -0
- package/dist/vendor/marketplace/zh/design/design-ux-architect.md +482 -0
- package/dist/vendor/marketplace/zh/design/design-ux-researcher.md +328 -0
- package/dist/vendor/marketplace/zh/design/design-visual-storyteller.md +159 -0
- package/dist/vendor/marketplace/zh/design/design-whimsy-injector.md +453 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-ai-data-remediation-engineer.md +209 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-ai-engineer.md +161 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-autonomous-optimization-architect.md +115 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-backend-architect.md +234 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-cms-developer.md +534 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-code-reviewer.md +172 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-codebase-onboarding-engineer.md +172 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-data-engineer.md +324 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-database-optimizer.md +175 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-devops-automator.md +375 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-dingtalk-integration-developer.md +574 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-email-intelligence-engineer.md +349 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-embedded-firmware-engineer.md +168 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-embedded-linux-driver-engineer.md +255 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-feishu-integration-developer.md +597 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-filament-optimization-specialist.md +283 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-fpga-digital-design-engineer.md +227 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-frontend-developer.md +224 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-git-workflow-master.md +220 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-incident-response-commander.md +465 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-iot-solution-architect.md +220 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-mechanical-design-engineer.md +311 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-minimal-change-engineer.md +206 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-mobile-app-builder.md +434 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-pc-host-engineer.md +231 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-rapid-prototyper.md +461 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-security-engineer.md +303 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-senior-developer.md +177 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-software-architect.md +200 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-solidity-smart-contract-engineer.md +541 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-sre.md +233 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-technical-writer.md +409 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-threat-detection-engineer.md +553 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-voice-ai-integration-engineer.md +560 -0
- package/dist/vendor/marketplace/zh/engineering/engineering-wechat-mini-program-developer.md +288 -0
- package/dist/vendor/marketplace/zh/finance/finance-bookkeeper-controller.md +271 -0
- package/dist/vendor/marketplace/zh/finance/finance-financial-analyst.md +244 -0
- package/dist/vendor/marketplace/zh/finance/finance-financial-forecaster.md +213 -0
- package/dist/vendor/marketplace/zh/finance/finance-fpa-analyst.md +272 -0
- package/dist/vendor/marketplace/zh/finance/finance-fraud-detector.md +241 -0
- package/dist/vendor/marketplace/zh/finance/finance-investment-researcher.md +283 -0
- package/dist/vendor/marketplace/zh/finance/finance-invoice-manager.md +242 -0
- package/dist/vendor/marketplace/zh/finance/finance-tax-strategist.md +250 -0
- package/dist/vendor/marketplace/zh/game-development/blender/blender-addon-engineer.md +233 -0
- package/dist/vendor/marketplace/zh/game-development/game-audio-engineer.md +265 -0
- package/dist/vendor/marketplace/zh/game-development/game-designer.md +168 -0
- package/dist/vendor/marketplace/zh/game-development/godot/godot-gameplay-scripter.md +335 -0
- package/dist/vendor/marketplace/zh/game-development/godot/godot-multiplayer-engineer.md +296 -0
- package/dist/vendor/marketplace/zh/game-development/godot/godot-shader-developer.md +267 -0
- package/dist/vendor/marketplace/zh/game-development/level-designer.md +209 -0
- package/dist/vendor/marketplace/zh/game-development/narrative-designer.md +244 -0
- package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-avatar-creator.md +298 -0
- package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-experience-designer.md +306 -0
- package/dist/vendor/marketplace/zh/game-development/roblox-studio/roblox-systems-scripter.md +325 -0
- package/dist/vendor/marketplace/zh/game-development/technical-artist.md +230 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-architect.md +272 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-editor-tool-developer.md +300 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-multiplayer-engineer.md +238 -0
- package/dist/vendor/marketplace/zh/game-development/unity/unity-shader-graph-artist.md +270 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-multiplayer-architect.md +314 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-systems-engineer.md +311 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-technical-artist.md +256 -0
- package/dist/vendor/marketplace/zh/game-development/unreal-engine/unreal-world-builder.md +274 -0
- package/dist/vendor/marketplace/zh/hr/hr-performance-reviewer.md +248 -0
- package/dist/vendor/marketplace/zh/hr/hr-recruiter.md +232 -0
- package/dist/vendor/marketplace/zh/legal/legal-contract-reviewer.md +240 -0
- package/dist/vendor/marketplace/zh/legal/legal-policy-writer.md +308 -0
- package/dist/vendor/marketplace/zh/manifest.json +2181 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-agentic-search-optimizer.md +312 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-ai-citation-strategist.md +169 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-app-store-optimizer.md +319 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-baidu-seo-specialist.md +220 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-bilibili-strategist.md +194 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-book-co-author.md +109 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-carousel-growth-engine.md +215 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-china-ecommerce-operator.md +277 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-china-market-localization-strategist.md +282 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-content-creator.md +145 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-cross-border-ecommerce.md +260 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-daily-news-briefing.md +303 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-douyin-strategist.md +150 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-ecommerce-operator.md +216 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-growth-hacker.md +121 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-instagram-curator.md +179 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-knowledge-commerce-strategist.md +384 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-kuaishou-strategist.md +182 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-linkedin-content-creator.md +232 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-livestream-commerce-coach.md +303 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-podcast-strategist.md +278 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-private-domain-operator.md +309 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-reddit-community-builder.md +127 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-seo-specialist.md +298 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-short-video-editing-coach.md +413 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-social-media-strategist.md +118 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-tiktok-strategist.md +124 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-twitter-engager.md +132 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-video-optimization-specialist.md +128 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-wechat-official-account.md +158 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-wechat-operator.md +156 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-weibo-strategist.md +241 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-weixin-channels-strategist.md +297 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-xiaohongshu-operator.md +139 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-xiaohongshu-specialist.md +151 -0
- package/dist/vendor/marketplace/zh/marketing/marketing-zhihu-strategist.md +175 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-auditor.md +170 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-creative-strategist.md +173 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-paid-social-strategist.md +180 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-ppc-strategist.md +180 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-programmatic-buyer.md +177 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-search-query-analyst.md +182 -0
- package/dist/vendor/marketplace/zh/paid-media/paid-media-tracking-specialist.md +199 -0
- package/dist/vendor/marketplace/zh/product/product-behavioral-nudge-engine.md +246 -0
- package/dist/vendor/marketplace/zh/product/product-feedback-synthesizer.md +175 -0
- package/dist/vendor/marketplace/zh/product/product-manager.md +474 -0
- package/dist/vendor/marketplace/zh/product/product-sprint-prioritizer.md +133 -0
- package/dist/vendor/marketplace/zh/product/product-trend-researcher.md +143 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-experiment-tracker.md +206 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-jira-workflow-steward.md +249 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-project-shepherd.md +202 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-studio-operations.md +208 -0
- package/dist/vendor/marketplace/zh/project-management/project-management-studio-producer.md +211 -0
- package/dist/vendor/marketplace/zh/project-management/project-manager-senior.md +135 -0
- package/dist/vendor/marketplace/zh/sales/sales-account-strategist.md +243 -0
- package/dist/vendor/marketplace/zh/sales/sales-coach.md +291 -0
- package/dist/vendor/marketplace/zh/sales/sales-deal-strategist.md +204 -0
- package/dist/vendor/marketplace/zh/sales/sales-discovery-coach.md +230 -0
- package/dist/vendor/marketplace/zh/sales/sales-engineer.md +200 -0
- package/dist/vendor/marketplace/zh/sales/sales-outbound-strategist.md +208 -0
- package/dist/vendor/marketplace/zh/sales/sales-pipeline-analyst.md +284 -0
- package/dist/vendor/marketplace/zh/sales/sales-proposal-strategist.md +233 -0
- package/dist/vendor/marketplace/zh/spatial-computing/macos-spatial-metal-engineer.md +337 -0
- package/dist/vendor/marketplace/zh/spatial-computing/terminal-integration-specialist.md +236 -0
- package/dist/vendor/marketplace/zh/spatial-computing/visionos-spatial-engineer.md +282 -0
- package/dist/vendor/marketplace/zh/spatial-computing/xr-cockpit-interaction-specialist.md +220 -0
- package/dist/vendor/marketplace/zh/spatial-computing/xr-immersive-developer.md +229 -0
- package/dist/vendor/marketplace/zh/spatial-computing/xr-interface-architect.md +253 -0
- package/dist/vendor/marketplace/zh/specialized/accounts-payable-agent.md +212 -0
- package/dist/vendor/marketplace/zh/specialized/agentic-identity-trust.md +388 -0
- package/dist/vendor/marketplace/zh/specialized/agents-orchestrator.md +366 -0
- package/dist/vendor/marketplace/zh/specialized/automation-governance-architect.md +215 -0
- package/dist/vendor/marketplace/zh/specialized/blockchain-security-auditor.md +484 -0
- package/dist/vendor/marketplace/zh/specialized/compliance-auditor.md +172 -0
- package/dist/vendor/marketplace/zh/specialized/corporate-training-designer.md +191 -0
- package/dist/vendor/marketplace/zh/specialized/data-consolidation-agent.md +327 -0
- package/dist/vendor/marketplace/zh/specialized/gaokao-college-advisor.md +333 -0
- package/dist/vendor/marketplace/zh/specialized/government-digital-presales-consultant.md +362 -0
- package/dist/vendor/marketplace/zh/specialized/healthcare-customer-service.md +388 -0
- package/dist/vendor/marketplace/zh/specialized/healthcare-marketing-compliance.md +394 -0
- package/dist/vendor/marketplace/zh/specialized/hospitality-guest-services.md +597 -0
- package/dist/vendor/marketplace/zh/specialized/hr-onboarding.md +450 -0
- package/dist/vendor/marketplace/zh/specialized/identity-graph-operator.md +270 -0
- package/dist/vendor/marketplace/zh/specialized/language-translator.md +275 -0
- package/dist/vendor/marketplace/zh/specialized/legal-billing-time-tracking.md +566 -0
- package/dist/vendor/marketplace/zh/specialized/legal-client-intake.md +487 -0
- package/dist/vendor/marketplace/zh/specialized/legal-document-review.md +452 -0
- package/dist/vendor/marketplace/zh/specialized/livestock-archive-auditor.md +135 -0
- package/dist/vendor/marketplace/zh/specialized/loan-officer-assistant.md +549 -0
- package/dist/vendor/marketplace/zh/specialized/lsp-index-engineer.md +334 -0
- package/dist/vendor/marketplace/zh/specialized/prompt-engineer.md +176 -0
- package/dist/vendor/marketplace/zh/specialized/real-estate-buyer-seller.md +594 -0
- package/dist/vendor/marketplace/zh/specialized/recruitment-specialist.md +508 -0
- package/dist/vendor/marketplace/zh/specialized/report-distribution-agent.md +354 -0
- package/dist/vendor/marketplace/zh/specialized/retail-customer-returns.md +564 -0
- package/dist/vendor/marketplace/zh/specialized/sales-data-extraction-agent.md +159 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-ai-policy-writer.md +217 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-chief-of-staff.md +278 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-civil-engineer.md +355 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-cultural-intelligence-strategist.md +168 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-developer-advocate.md +334 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-document-generator.md +346 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-french-consulting-market.md +191 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-korean-business-navigator.md +215 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-mcp-builder.md +351 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-meeting-assistant.md +236 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-model-qa.md +507 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-pricing-optimizer.md +254 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-risk-assessor.md +240 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-salesforce-architect.md +179 -0
- package/dist/vendor/marketplace/zh/specialized/specialized-workflow-architect.md +596 -0
- package/dist/vendor/marketplace/zh/specialized/study-abroad-advisor.md +281 -0
- package/dist/vendor/marketplace/zh/specialized/technical-translator-agent.md +167 -0
- package/dist/vendor/marketplace/zh/specialized/zk-steward.md +228 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-inventory-forecaster.md +212 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-route-optimizer.md +224 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-strategist.md +581 -0
- package/dist/vendor/marketplace/zh/supply-chain/supply-chain-vendor-evaluator.md +232 -0
- package/dist/vendor/marketplace/zh/support/support-analytics-reporter.md +364 -0
- package/dist/vendor/marketplace/zh/support/support-executive-summary-generator.md +217 -0
- package/dist/vendor/marketplace/zh/support/support-finance-tracker.md +447 -0
- package/dist/vendor/marketplace/zh/support/support-infrastructure-maintainer.md +623 -0
- package/dist/vendor/marketplace/zh/support/support-legal-compliance-checker.md +587 -0
- package/dist/vendor/marketplace/zh/support/support-recruitment-specialist.md +508 -0
- package/dist/vendor/marketplace/zh/support/support-support-responder.md +584 -0
- package/dist/vendor/marketplace/zh/testing/testing-accessibility-auditor.md +329 -0
- package/dist/vendor/marketplace/zh/testing/testing-api-tester.md +305 -0
- package/dist/vendor/marketplace/zh/testing/testing-embedded-qa-engineer.md +258 -0
- package/dist/vendor/marketplace/zh/testing/testing-evidence-collector.md +153 -0
- package/dist/vendor/marketplace/zh/testing/testing-performance-benchmarker.md +196 -0
- package/dist/vendor/marketplace/zh/testing/testing-reality-checker.md +235 -0
- package/dist/vendor/marketplace/zh/testing/testing-test-results-analyzer.md +313 -0
- package/dist/vendor/marketplace/zh/testing/testing-tool-evaluator.md +402 -0
- package/dist/vendor/marketplace/zh/testing/testing-workflow-optimizer.md +458 -0
- package/package.json +131 -0
- package/scripts/postinstall-native-artifacts.mjs +113 -0
- package/web/dist/assets/AddWorkerDialog-BU2Fn-Mx.js +2 -0
- package/web/dist/assets/AddWorkspaceFlow-BV04MkRt.js +1 -0
- package/web/dist/assets/FirstRunWizard-DS4IYOrd.js +1 -0
- package/web/dist/assets/MarketplaceDrawer-CIQ2B6Fx.js +76 -0
- package/web/dist/assets/TaskGraphDrawer-BPMcRocd.js +1 -0
- package/web/dist/assets/WhatsNewDialog-DEgVY_LD.js +1 -0
- package/web/dist/assets/WorkerModal-DiCcTPpc.js +1 -0
- package/web/dist/assets/WorkflowsDrawer-M2CgAJWK.js +1 -0
- package/web/dist/assets/WorkspaceMemoryDrawer-ClJIqWck.js +1 -0
- package/web/dist/assets/WorkspaceTaskDrawer-gjvXuZ2K.js +1 -0
- package/web/dist/assets/addon-clipboard-wHJhZAA4.js +1 -0
- package/web/dist/assets/addon-fit-DX4qG4td.js +1 -0
- package/web/dist/assets/addon-unicode11-Bt8F3D7-.js +7 -0
- package/web/dist/assets/addon-web-links-DIbG5aQx.js +1 -0
- package/web/dist/assets/addon-webgl-DCtw1yLn.js +64 -0
- package/web/dist/assets/finder-C4Jmsb0B.png +0 -0
- package/web/dist/assets/ghostty-D-Js4rdm.png +0 -0
- package/web/dist/assets/index-bOMtwrkA.js +73 -0
- package/web/dist/assets/index-i9YgsMdD.css +1 -0
- package/web/dist/assets/path-join-7MR1s7b1.js +1 -0
- package/web/dist/assets/search-CmzeVhy0.js +1 -0
- package/web/dist/assets/xterm-B-qIQCd3.js +16 -0
- package/web/dist/assets/zed-C5BQT8X3.png +0 -0
- package/web/dist/bilibili.ico +0 -0
- package/web/dist/cli-icons/claude.png +0 -0
- package/web/dist/cli-icons/codex.png +0 -0
- package/web/dist/cli-icons/gemini.png +0 -0
- package/web/dist/cli-icons/hermes.png +0 -0
- package/web/dist/cli-icons/opencode.svg +18 -0
- package/web/dist/icons/apple-touch-icon-180.png +0 -0
- package/web/dist/icons/icon-192.png +0 -0
- package/web/dist/icons/icon-32.png +0 -0
- package/web/dist/icons/icon-512-maskable.png +0 -0
- package/web/dist/icons/icon-512.png +0 -0
- package/web/dist/index.html +39 -0
- package/web/dist/logo.png +0 -0
- package/web/dist/manifest.webmanifest +60 -0
- package/web/dist/screenshots/wide-overview.png +0 -0
- package/web/dist/sounds/LICENSE-KENNEY.txt +22 -0
- package/web/dist/sounds/hive-beacon.ogg +0 -0
- package/web/dist/sounds/hive-cascade.ogg +0 -0
- package/web/dist/sounds/hive-chime.ogg +0 -0
- package/web/dist/sounds/hive-ping.ogg +0 -0
- package/web/dist/sounds/hive-resolve.ogg +0 -0
- package/web/dist/sounds/hive-soft.ogg +0 -0
- package/web/dist/sw.js +99 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { createAppStateStore } from '../server/app-state-store.js';
|
|
2
|
+
import { getMachineName } from '../server/machine-name.js';
|
|
3
|
+
import { DEFAULT_GATEWAY_URL, REMOTE_DAEMON_ID_KEY, REMOTE_DAEMON_TOKEN_KEY, REMOTE_ENABLED_KEY, REMOTE_GATEWAY_URL_KEY, } from '../server/remote-config-keys.js';
|
|
4
|
+
import { createRemoteDeviceStore } from '../server/remote-device-store.js';
|
|
5
|
+
import { openRuntimeDatabase } from '../server/runtime-database.js';
|
|
6
|
+
import { resolveDataDir } from './hive.js';
|
|
7
|
+
// Re-export so existing callers (and the CLI tests) can keep importing the keys
|
|
8
|
+
// from here; the canonical definitions live in remote-config-keys.ts, shared
|
|
9
|
+
// with the daemon-side tunnel so the on-disk contract can't drift between sides.
|
|
10
|
+
export { DEFAULT_GATEWAY_URL, REMOTE_DAEMON_ID_KEY, REMOTE_DAEMON_TOKEN_KEY, REMOTE_ENABLED_KEY, REMOTE_GATEWAY_URL_KEY, };
|
|
11
|
+
// `hive remote` — manage the daemon's connection to the remote-access gateway.
|
|
12
|
+
//
|
|
13
|
+
// hive remote login [--gateway <url>] bind this machine to a Hive account
|
|
14
|
+
// hive remote status show connection + enabled state
|
|
15
|
+
// hive remote logout forget the gateway token, disable remote
|
|
16
|
+
// hive remote devices list paired phones/devices
|
|
17
|
+
// hive remote revoke <deviceId> revoke a paired device
|
|
18
|
+
//
|
|
19
|
+
// login drives the gateway's daemon-binding flow (gateway/src/daemon.ts):
|
|
20
|
+
// POST /daemon/code -> { code, expiresAt, pollIntervalMs } (print URL + code)
|
|
21
|
+
// ... human approves in their logged-in browser at /daemon/approve?code=... ...
|
|
22
|
+
// POST /daemon/token -> 401 not_approved (keep polling) | 200 { daemonId, daemonToken }
|
|
23
|
+
//
|
|
24
|
+
// The token is account-scoped and is local RCE on this machine, so it lands in
|
|
25
|
+
// app_state (the same SQLite the daemon reads) and is NEVER printed back.
|
|
26
|
+
// `enabled` defaults OFF for the whole subsystem; a successful login flips it on.
|
|
27
|
+
// Off == zero behavior change: no token, no outbound tunnel (see remote-tunnel).
|
|
28
|
+
export const HIVE_REMOTE_USAGE = [
|
|
29
|
+
'Usage:',
|
|
30
|
+
' hive remote login [--gateway <url>] Link this machine to your Hive account.',
|
|
31
|
+
' hive remote status Show remote-access connection state.',
|
|
32
|
+
' hive remote logout Forget the gateway token and disable remote.',
|
|
33
|
+
' hive remote devices List paired devices.',
|
|
34
|
+
' hive remote revoke <deviceId> Revoke a paired device.',
|
|
35
|
+
'',
|
|
36
|
+
'Remote access lets you reach this Hive from a phone through the gateway over',
|
|
37
|
+
'an end-to-end encrypted tunnel. It is OFF until you log in, and `logout`',
|
|
38
|
+
'turns it off again. The gateway only relays ciphertext — it never sees your',
|
|
39
|
+
'data or terminals.',
|
|
40
|
+
'',
|
|
41
|
+
'Options:',
|
|
42
|
+
` --gateway <url> Gateway base URL (default: ${DEFAULT_GATEWAY_URL}).`,
|
|
43
|
+
' -h, --help Print this help.',
|
|
44
|
+
].join('\n');
|
|
45
|
+
const openConfigStore = () => {
|
|
46
|
+
const db = openRuntimeDatabase(resolveDataDir());
|
|
47
|
+
return { store: createAppStateStore(db), close: () => db.close() };
|
|
48
|
+
};
|
|
49
|
+
const readConfig = (store, key) => store.get(key)?.value ?? null;
|
|
50
|
+
const openDeviceStore = () => {
|
|
51
|
+
const db = openRuntimeDatabase(resolveDataDir());
|
|
52
|
+
return { store: createRemoteDeviceStore(db), close: () => db.close() };
|
|
53
|
+
};
|
|
54
|
+
const trimSlash = (url) => url.replace(/\/+$/, '');
|
|
55
|
+
const postJson = async (url, body, token) => {
|
|
56
|
+
const headers = { 'content-type': 'application/json' };
|
|
57
|
+
if (token)
|
|
58
|
+
headers.authorization = `Bearer ${token}`;
|
|
59
|
+
return fetch(url, { method: 'POST', headers, body: JSON.stringify(body) });
|
|
60
|
+
};
|
|
61
|
+
// Default client: real fetch against the gateway. The contracts mirror
|
|
62
|
+
// gateway/src/daemon.ts exactly (field names, the 401 not_approved poll signal).
|
|
63
|
+
export const defaultGatewayClient = {
|
|
64
|
+
async requestCode(gatewayUrl) {
|
|
65
|
+
const res = await postJson(`${trimSlash(gatewayUrl)}/daemon/code`, {});
|
|
66
|
+
if (!res.ok)
|
|
67
|
+
throw new Error(`gateway /daemon/code failed: ${res.status}`);
|
|
68
|
+
const body = (await res.json());
|
|
69
|
+
if (typeof body.code !== 'string' || typeof body.expiresAt !== 'number') {
|
|
70
|
+
throw new Error('gateway /daemon/code returned an unexpected response');
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
code: body.code,
|
|
74
|
+
expiresAt: body.expiresAt,
|
|
75
|
+
pollIntervalMs: typeof body.pollIntervalMs === 'number' ? body.pollIntervalMs : 2000,
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
async exchangeToken(gatewayUrl, code, name) {
|
|
79
|
+
const payload = { code };
|
|
80
|
+
if (name)
|
|
81
|
+
payload.name = name;
|
|
82
|
+
const res = await postJson(`${trimSlash(gatewayUrl)}/daemon/token`, payload);
|
|
83
|
+
// 401 == not yet approved (or expired). 429 == the gateway throttled this poll. Both mean "keep
|
|
84
|
+
// polling until the code's expiresAt" — a transient 429 mid-wait must NOT kill the login (the
|
|
85
|
+
// gateway sizes the /daemon/token budget for the poll cadence, but we stay robust if it ever
|
|
86
|
+
// trips). Any other non-2xx is a hard failure.
|
|
87
|
+
if (res.status === 401 || res.status === 429)
|
|
88
|
+
return null;
|
|
89
|
+
if (!res.ok)
|
|
90
|
+
throw new Error(`gateway /daemon/token failed: ${res.status}`);
|
|
91
|
+
const body = (await res.json());
|
|
92
|
+
if (typeof body.daemonId !== 'string' || typeof body.daemonToken !== 'string') {
|
|
93
|
+
throw new Error('gateway /daemon/token returned an unexpected response');
|
|
94
|
+
}
|
|
95
|
+
return { daemonId: body.daemonId, daemonToken: body.daemonToken };
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
99
|
+
const readGatewayFlag = (argv) => {
|
|
100
|
+
const index = argv.indexOf('--gateway');
|
|
101
|
+
if (index === -1)
|
|
102
|
+
return undefined;
|
|
103
|
+
const value = argv[index + 1];
|
|
104
|
+
if (!value || value.startsWith('-')) {
|
|
105
|
+
throw new Error('Usage: hive remote login [--gateway <url>]');
|
|
106
|
+
}
|
|
107
|
+
return value;
|
|
108
|
+
};
|
|
109
|
+
const approveUrl = (gatewayUrl, code) => `${trimSlash(gatewayUrl)}/daemon/approve?code=${encodeURIComponent(code)}`;
|
|
110
|
+
const runLogin = async (argv, store, client, now, sleep, log) => {
|
|
111
|
+
const gatewayUrl = readGatewayFlag(argv) ?? readConfig(store, REMOTE_GATEWAY_URL_KEY) ?? DEFAULT_GATEWAY_URL;
|
|
112
|
+
const { code, expiresAt, pollIntervalMs } = await client.requestCode(gatewayUrl);
|
|
113
|
+
log('To link this machine, open the approval page in a browser where you are');
|
|
114
|
+
log('logged in to your Hive account, and confirm the code matches:');
|
|
115
|
+
log('');
|
|
116
|
+
log(` ${approveUrl(gatewayUrl, code)}`);
|
|
117
|
+
log('');
|
|
118
|
+
log(` Code: ${code}`);
|
|
119
|
+
log('');
|
|
120
|
+
log('Waiting for approval…');
|
|
121
|
+
const machineName = getMachineName() ?? undefined;
|
|
122
|
+
// Poll until the human approves or the code expires. The gateway hands back
|
|
123
|
+
// null (HTTP 401) until approval flips the code; we never bail early.
|
|
124
|
+
for (;;) {
|
|
125
|
+
const token = await client.exchangeToken(gatewayUrl, code, machineName);
|
|
126
|
+
if (token) {
|
|
127
|
+
store.set(REMOTE_GATEWAY_URL_KEY, gatewayUrl);
|
|
128
|
+
store.set(REMOTE_DAEMON_ID_KEY, token.daemonId);
|
|
129
|
+
store.set(REMOTE_DAEMON_TOKEN_KEY, token.daemonToken);
|
|
130
|
+
store.set(REMOTE_ENABLED_KEY, 'true');
|
|
131
|
+
log('');
|
|
132
|
+
log('This machine is linked. Remote access is now enabled.');
|
|
133
|
+
log('Restart the Hive runtime (or it will connect on next start) to bring');
|
|
134
|
+
log('the tunnel online. Pair a phone from Settings → Remote access.');
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
if (now() >= expiresAt) {
|
|
138
|
+
log('');
|
|
139
|
+
log('The login code expired before it was approved. Run `hive remote login` again.');
|
|
140
|
+
return 1;
|
|
141
|
+
}
|
|
142
|
+
await sleep(pollIntervalMs);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const runStatus = (store, log) => {
|
|
146
|
+
const enabled = readConfig(store, REMOTE_ENABLED_KEY) === 'true';
|
|
147
|
+
const gatewayUrl = readConfig(store, REMOTE_GATEWAY_URL_KEY);
|
|
148
|
+
const daemonId = readConfig(store, REMOTE_DAEMON_ID_KEY);
|
|
149
|
+
const loggedIn = readConfig(store, REMOTE_DAEMON_TOKEN_KEY) !== null;
|
|
150
|
+
log(`Remote access: ${enabled ? 'enabled' : 'disabled'}`);
|
|
151
|
+
log(`Logged in: ${loggedIn ? 'yes' : 'no'}`);
|
|
152
|
+
// The token is secret and is intentionally never printed.
|
|
153
|
+
if (gatewayUrl)
|
|
154
|
+
log(`Gateway: ${gatewayUrl}`);
|
|
155
|
+
if (daemonId)
|
|
156
|
+
log(`Machine id: ${daemonId}`);
|
|
157
|
+
if (!loggedIn)
|
|
158
|
+
log('Run `hive remote login` to link this machine.');
|
|
159
|
+
return 0;
|
|
160
|
+
};
|
|
161
|
+
const runLogout = (store, log) => {
|
|
162
|
+
const wasLoggedIn = readConfig(store, REMOTE_DAEMON_TOKEN_KEY) !== null;
|
|
163
|
+
store.set(REMOTE_DAEMON_TOKEN_KEY, null);
|
|
164
|
+
store.set(REMOTE_DAEMON_ID_KEY, null);
|
|
165
|
+
store.set(REMOTE_ENABLED_KEY, 'false');
|
|
166
|
+
log(wasLoggedIn
|
|
167
|
+
? 'Logged out. Remote access is disabled and the gateway token has been forgotten.'
|
|
168
|
+
: 'Not logged in. Remote access is disabled.');
|
|
169
|
+
return 0;
|
|
170
|
+
};
|
|
171
|
+
const runDevices = (store, log) => {
|
|
172
|
+
const devices = store.list(true); // include revoked so the operator sees the full roster
|
|
173
|
+
if (devices.length === 0) {
|
|
174
|
+
log('No paired devices. Pair a phone from Settings → Remote access.');
|
|
175
|
+
return 0;
|
|
176
|
+
}
|
|
177
|
+
for (const device of devices) {
|
|
178
|
+
const lastSeen = device.lastActive ? new Date(device.lastActive).toISOString() : 'never';
|
|
179
|
+
const status = device.revokedAt ? ' (revoked)' : '';
|
|
180
|
+
log(`${device.id} ${device.name} last active ${lastSeen}${status}`);
|
|
181
|
+
}
|
|
182
|
+
return 0;
|
|
183
|
+
};
|
|
184
|
+
const runRevoke = (deviceId, store, log, error) => {
|
|
185
|
+
if (!deviceId) {
|
|
186
|
+
error('Usage: hive remote revoke <deviceId>');
|
|
187
|
+
return 1;
|
|
188
|
+
}
|
|
189
|
+
const revoked = store.revoke(deviceId);
|
|
190
|
+
if (!revoked) {
|
|
191
|
+
error(`Unknown or already-revoked device: ${deviceId}`);
|
|
192
|
+
return 1;
|
|
193
|
+
}
|
|
194
|
+
// The daemon's provider reads live sessions fresh, so the device is refused on its
|
|
195
|
+
// next frame. To tear down an IN-PROGRESS session immediately, revoke from
|
|
196
|
+
// Settings → Remote access (which fires the live closed-loop disconnect).
|
|
197
|
+
log(`Revoked device ${deviceId}. It is refused on its next connection.`);
|
|
198
|
+
return 0;
|
|
199
|
+
};
|
|
200
|
+
export const runHiveRemoteCommand = async (argv, options = {}) => {
|
|
201
|
+
if (argv.length === 0 || argv.includes('--help') || argv.includes('-h')) {
|
|
202
|
+
const log = options.log ?? console.log;
|
|
203
|
+
log(HIVE_REMOTE_USAGE);
|
|
204
|
+
return argv.length === 0 ? 1 : 0;
|
|
205
|
+
}
|
|
206
|
+
const [subcommand, ...rest] = argv;
|
|
207
|
+
const client = options.client ?? defaultGatewayClient;
|
|
208
|
+
const now = options.now ?? Date.now;
|
|
209
|
+
const sleep = options.sleep ?? defaultSleep;
|
|
210
|
+
const log = options.log ?? console.log;
|
|
211
|
+
const error = options.error ?? console.error;
|
|
212
|
+
// Open the config store lazily so --help / unknown subcommands don't touch
|
|
213
|
+
// the DB, and always close an owned handle.
|
|
214
|
+
// Annotated as a possibly-undefined holder so TS doesn't narrow it to `never`
|
|
215
|
+
// in the finally block (the assignment happens inside resolveStore's closure,
|
|
216
|
+
// which control-flow analysis can't see executing).
|
|
217
|
+
const owned = {};
|
|
218
|
+
const resolveStore = () => {
|
|
219
|
+
if (options.config)
|
|
220
|
+
return options.config;
|
|
221
|
+
const opened = openConfigStore();
|
|
222
|
+
owned.close = opened.close;
|
|
223
|
+
return opened.store;
|
|
224
|
+
};
|
|
225
|
+
const resolveDeviceStore = () => {
|
|
226
|
+
if (options.deviceStore)
|
|
227
|
+
return options.deviceStore;
|
|
228
|
+
const opened = openDeviceStore();
|
|
229
|
+
owned.close = opened.close;
|
|
230
|
+
return opened.store;
|
|
231
|
+
};
|
|
232
|
+
try {
|
|
233
|
+
switch (subcommand) {
|
|
234
|
+
case 'login':
|
|
235
|
+
return await runLogin(rest, resolveStore(), client, now, sleep, log);
|
|
236
|
+
case 'status':
|
|
237
|
+
return runStatus(resolveStore(), log);
|
|
238
|
+
case 'logout':
|
|
239
|
+
return runLogout(resolveStore(), log);
|
|
240
|
+
case 'devices':
|
|
241
|
+
return runDevices(resolveDeviceStore(), log);
|
|
242
|
+
case 'revoke':
|
|
243
|
+
return runRevoke(rest[0], resolveDeviceStore(), log, error);
|
|
244
|
+
default:
|
|
245
|
+
error(`Unknown remote subcommand: ${subcommand}`);
|
|
246
|
+
error(HIVE_REMOTE_USAGE);
|
|
247
|
+
return 1;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
error(err instanceof Error ? err.message : String(err));
|
|
252
|
+
return 1;
|
|
253
|
+
}
|
|
254
|
+
finally {
|
|
255
|
+
owned.close?.();
|
|
256
|
+
}
|
|
257
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export declare const HIVE_UPDATE_USAGE: string;
|
|
2
|
+
export interface RunUpdateResult {
|
|
3
|
+
exitCode: number;
|
|
4
|
+
spawnError?: Error;
|
|
5
|
+
}
|
|
6
|
+
export type RunUpdate = (command: string, args: readonly string[]) => Promise<RunUpdateResult>;
|
|
7
|
+
export interface SpawnInvocationPlan {
|
|
8
|
+
command: string;
|
|
9
|
+
args: string[];
|
|
10
|
+
options: {
|
|
11
|
+
stdio: 'inherit';
|
|
12
|
+
windowsHide?: boolean;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Plan how `defaultRunUpdate` should hand the npm invocation to
|
|
17
|
+
* `child_process.spawn`. Two non-obvious cases collapse here.
|
|
18
|
+
*
|
|
19
|
+
* 1. Node 22+ refuses to spawn `.cmd` / `.bat` files directly after
|
|
20
|
+
* CVE-2024-27980 unless `shell: true` is passed. We do not want
|
|
21
|
+
* `shell: true` though — its arg-stringification path joins argv
|
|
22
|
+
* without quoting, so an install prefix containing spaces (the
|
|
23
|
+
* common Windows case `C:\Program Files\nodejs`) gets word-split
|
|
24
|
+
* by cmd.exe and `--prefix` only sees the first token, so npm
|
|
25
|
+
* silently installs hive to the wrong directory.
|
|
26
|
+
* 2. Wrapping with `cmd.exe /d /s /c <npm.cmd> <args>` solves both:
|
|
27
|
+
* spawning `cmd.exe` (a native exe) avoids the .cmd refusal, and
|
|
28
|
+
* Node's own argv-quoting builds an lpCommandLine where each
|
|
29
|
+
* space-containing arg is wrapped in double quotes that cmd.exe
|
|
30
|
+
* then re-parses correctly. `/d` skips AutoRun, `/s` keeps the
|
|
31
|
+
* quote-handling consistent with `/c`.
|
|
32
|
+
*
|
|
33
|
+
* Detect by filename suffix instead of `process.platform` so unit
|
|
34
|
+
* tests can inject `platform: 'win32'` and exercise the wrap.
|
|
35
|
+
*/
|
|
36
|
+
export declare const planSpawnInvocation: (command: string, args: readonly string[], platform?: NodeJS.Platform) => SpawnInvocationPlan;
|
|
37
|
+
/**
|
|
38
|
+
* Signals the upgrade child should receive when the parent runtime is
|
|
39
|
+
* interrupted. Beyond the POSIX-only SIGTERM/SIGINT, SIGHUP is what
|
|
40
|
+
* libuv synthesises from Windows CTRL_CLOSE_EVENT (window X close),
|
|
41
|
+
* and SIGBREAK comes from Windows Ctrl+Break. Without forwarding
|
|
42
|
+
* those two the npm child outlives the runtime on the most common
|
|
43
|
+
* Windows exit paths.
|
|
44
|
+
*/
|
|
45
|
+
export declare const FORWARDED_UPDATE_SIGNALS: readonly NodeJS.Signals[];
|
|
46
|
+
/**
|
|
47
|
+
* Forward a parent-process signal to the spawned npm child. On POSIX
|
|
48
|
+
* we hand the signal straight to the child; on Windows there are no
|
|
49
|
+
* real signals, so `child.kill(SIGTERM)` resolves to TerminateProcess
|
|
50
|
+
* against cmd.exe (our wrapper) only — npm itself, plus any install
|
|
51
|
+
* scripts it spawned, become orphans. `taskkill /pid <pid> /t /f`
|
|
52
|
+
* walks the wrapper's process tree so the whole branch dies together.
|
|
53
|
+
* If taskkill is unavailable (restricted PATH, locked-down policy)
|
|
54
|
+
* we fall back to `child.kill` so the wrapper at least exits.
|
|
55
|
+
*
|
|
56
|
+
* Exported so the win32 path can be unit-tested by injecting a stub
|
|
57
|
+
* `killTree` runner — the real `taskkillProcessTree` shells out, and
|
|
58
|
+
* we don't want that running during the test suite.
|
|
59
|
+
*/
|
|
60
|
+
export declare const killUpdateChild: (child: {
|
|
61
|
+
pid?: number | undefined;
|
|
62
|
+
kill: (signal: NodeJS.Signals) => boolean;
|
|
63
|
+
}, signal: NodeJS.Signals, platform?: NodeJS.Platform, killTree?: (pid: number, onFailure?: () => void) => boolean) => void;
|
|
64
|
+
export declare const defaultRunUpdate: RunUpdate;
|
|
65
|
+
export declare const resolveHiveUpdateInstallArgs: (moduleUrl?: string) => string[];
|
|
66
|
+
interface RunHiveUpdateOptions {
|
|
67
|
+
/** Inject a fake spawn for tests. */
|
|
68
|
+
runUpdate?: RunUpdate;
|
|
69
|
+
/** Override platform detection for tests. */
|
|
70
|
+
platform?: NodeJS.Platform;
|
|
71
|
+
/** Override the current module URL for install-prefix detection in tests. */
|
|
72
|
+
moduleUrl?: string;
|
|
73
|
+
}
|
|
74
|
+
export declare const runHiveUpdateCommand: (argv: string[], options?: RunHiveUpdateOptions) => Promise<number>;
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { taskkillProcessTree } from '../server/agent-manager-support.js';
|
|
6
|
+
import { getNpmCommand, INSTALL_COMMAND_ARGS, INSTALL_COMMAND_DISPLAY, PACKAGE_NAME, } from '../server/package-version.js';
|
|
7
|
+
import { buildCmdCallCommand } from '../server/windows-command-line.js';
|
|
8
|
+
export const HIVE_UPDATE_USAGE = [
|
|
9
|
+
'Usage:',
|
|
10
|
+
' hive update',
|
|
11
|
+
'',
|
|
12
|
+
`Runs \`${INSTALL_COMMAND_DISPLAY}\` to upgrade Hive in place.`,
|
|
13
|
+
'When Hive was installed under a custom npm prefix, the update is applied',
|
|
14
|
+
'to that same prefix so the `hive` on your PATH actually changes.',
|
|
15
|
+
'Restart any running Hive process afterwards to pick up the new version.',
|
|
16
|
+
'',
|
|
17
|
+
'Note: only npm-installed Hive can be upgraded this way. If you installed',
|
|
18
|
+
'Hive via pnpm or yarn, upgrade through the same package manager instead;',
|
|
19
|
+
'otherwise the npm copy will shadow your existing install.',
|
|
20
|
+
'',
|
|
21
|
+
'Options:',
|
|
22
|
+
' -h, --help Print this help.',
|
|
23
|
+
].join('\n');
|
|
24
|
+
/**
|
|
25
|
+
* Plan how `defaultRunUpdate` should hand the npm invocation to
|
|
26
|
+
* `child_process.spawn`. Two non-obvious cases collapse here.
|
|
27
|
+
*
|
|
28
|
+
* 1. Node 22+ refuses to spawn `.cmd` / `.bat` files directly after
|
|
29
|
+
* CVE-2024-27980 unless `shell: true` is passed. We do not want
|
|
30
|
+
* `shell: true` though — its arg-stringification path joins argv
|
|
31
|
+
* without quoting, so an install prefix containing spaces (the
|
|
32
|
+
* common Windows case `C:\Program Files\nodejs`) gets word-split
|
|
33
|
+
* by cmd.exe and `--prefix` only sees the first token, so npm
|
|
34
|
+
* silently installs hive to the wrong directory.
|
|
35
|
+
* 2. Wrapping with `cmd.exe /d /s /c <npm.cmd> <args>` solves both:
|
|
36
|
+
* spawning `cmd.exe` (a native exe) avoids the .cmd refusal, and
|
|
37
|
+
* Node's own argv-quoting builds an lpCommandLine where each
|
|
38
|
+
* space-containing arg is wrapped in double quotes that cmd.exe
|
|
39
|
+
* then re-parses correctly. `/d` skips AutoRun, `/s` keeps the
|
|
40
|
+
* quote-handling consistent with `/c`.
|
|
41
|
+
*
|
|
42
|
+
* Detect by filename suffix instead of `process.platform` so unit
|
|
43
|
+
* tests can inject `platform: 'win32'` and exercise the wrap.
|
|
44
|
+
*/
|
|
45
|
+
export const planSpawnInvocation = (command, args, platform = process.platform) => {
|
|
46
|
+
if (platform === 'win32' && /\.(cmd|bat)$/i.test(command)) {
|
|
47
|
+
return {
|
|
48
|
+
command: 'cmd.exe',
|
|
49
|
+
args: ['/d', '/s', '/c', buildCmdCallCommand(command, args)],
|
|
50
|
+
options: { stdio: 'inherit', windowsHide: false },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return { command, args: [...args], options: { stdio: 'inherit' } };
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Signals the upgrade child should receive when the parent runtime is
|
|
57
|
+
* interrupted. Beyond the POSIX-only SIGTERM/SIGINT, SIGHUP is what
|
|
58
|
+
* libuv synthesises from Windows CTRL_CLOSE_EVENT (window X close),
|
|
59
|
+
* and SIGBREAK comes from Windows Ctrl+Break. Without forwarding
|
|
60
|
+
* those two the npm child outlives the runtime on the most common
|
|
61
|
+
* Windows exit paths.
|
|
62
|
+
*/
|
|
63
|
+
export const FORWARDED_UPDATE_SIGNALS = [
|
|
64
|
+
'SIGINT',
|
|
65
|
+
'SIGTERM',
|
|
66
|
+
'SIGHUP',
|
|
67
|
+
'SIGBREAK',
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Forward a parent-process signal to the spawned npm child. On POSIX
|
|
71
|
+
* we hand the signal straight to the child; on Windows there are no
|
|
72
|
+
* real signals, so `child.kill(SIGTERM)` resolves to TerminateProcess
|
|
73
|
+
* against cmd.exe (our wrapper) only — npm itself, plus any install
|
|
74
|
+
* scripts it spawned, become orphans. `taskkill /pid <pid> /t /f`
|
|
75
|
+
* walks the wrapper's process tree so the whole branch dies together.
|
|
76
|
+
* If taskkill is unavailable (restricted PATH, locked-down policy)
|
|
77
|
+
* we fall back to `child.kill` so the wrapper at least exits.
|
|
78
|
+
*
|
|
79
|
+
* Exported so the win32 path can be unit-tested by injecting a stub
|
|
80
|
+
* `killTree` runner — the real `taskkillProcessTree` shells out, and
|
|
81
|
+
* we don't want that running during the test suite.
|
|
82
|
+
*/
|
|
83
|
+
export const killUpdateChild = (child, signal, platform = process.platform, killTree = (pid, onFailure) => taskkillProcessTree(pid, platform, undefined, onFailure)) => {
|
|
84
|
+
const fallback = () => {
|
|
85
|
+
try {
|
|
86
|
+
child.kill(signal);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// child.kill on Windows throws if the signal name isn't
|
|
90
|
+
// implemented; we forward what we can and ignore the rest.
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
if (platform === 'win32' && typeof child.pid === 'number' && child.pid > 0) {
|
|
94
|
+
if (killTree(child.pid, fallback))
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
fallback();
|
|
98
|
+
};
|
|
99
|
+
export const defaultRunUpdate = (command, args) => new Promise((resolve) => {
|
|
100
|
+
const plan = planSpawnInvocation(command, args);
|
|
101
|
+
const child = spawn(plan.command, plan.args, plan.options);
|
|
102
|
+
let resolved = false;
|
|
103
|
+
// Handlers are registered with `once` so they don't accumulate
|
|
104
|
+
// across invocations and explicitly removed at finalize().
|
|
105
|
+
const handlers = new Map();
|
|
106
|
+
for (const signal of FORWARDED_UPDATE_SIGNALS) {
|
|
107
|
+
const handler = () => {
|
|
108
|
+
killUpdateChild(child, signal);
|
|
109
|
+
};
|
|
110
|
+
handlers.set(signal, handler);
|
|
111
|
+
process.once(signal, handler);
|
|
112
|
+
}
|
|
113
|
+
const finalize = (result) => {
|
|
114
|
+
if (resolved)
|
|
115
|
+
return;
|
|
116
|
+
resolved = true;
|
|
117
|
+
for (const [signal, handler] of handlers) {
|
|
118
|
+
process.off(signal, handler);
|
|
119
|
+
}
|
|
120
|
+
resolve(result);
|
|
121
|
+
};
|
|
122
|
+
child.on('error', (error) => {
|
|
123
|
+
finalize({ exitCode: 1, spawnError: error });
|
|
124
|
+
});
|
|
125
|
+
child.on('close', (code) => {
|
|
126
|
+
finalize({ exitCode: typeof code === 'number' ? code : 1 });
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
const shellQuote = (value) => {
|
|
130
|
+
if (/^[A-Za-z0-9_/:=.,@+-]+$/.test(value))
|
|
131
|
+
return value;
|
|
132
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
133
|
+
};
|
|
134
|
+
const findPackageRoot = (moduleUrl) => {
|
|
135
|
+
let dir = dirname(fileURLToPath(moduleUrl));
|
|
136
|
+
for (let depth = 0; depth < 12; depth += 1) {
|
|
137
|
+
const candidate = join(dir, 'package.json');
|
|
138
|
+
if (existsSync(candidate)) {
|
|
139
|
+
try {
|
|
140
|
+
const parsed = JSON.parse(readFileSync(candidate, 'utf8'));
|
|
141
|
+
if (parsed.name === PACKAGE_NAME)
|
|
142
|
+
return dir;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Keep walking. A malformed unrelated package.json should not break update.
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const parent = dirname(dir);
|
|
149
|
+
if (parent === dir)
|
|
150
|
+
return undefined;
|
|
151
|
+
dir = parent;
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
};
|
|
155
|
+
const findPrefixFromPackageRoot = (packageRoot) => {
|
|
156
|
+
let dir = packageRoot;
|
|
157
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
158
|
+
if (basename(dir) === 'node_modules') {
|
|
159
|
+
const parent = dirname(dir);
|
|
160
|
+
return basename(parent) === 'lib' ? dirname(parent) : parent;
|
|
161
|
+
}
|
|
162
|
+
const parent = dirname(dir);
|
|
163
|
+
if (parent === dir)
|
|
164
|
+
return undefined;
|
|
165
|
+
dir = parent;
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
};
|
|
169
|
+
export const resolveHiveUpdateInstallArgs = (moduleUrl = import.meta.url) => {
|
|
170
|
+
const packageRoot = findPackageRoot(moduleUrl);
|
|
171
|
+
const prefix = packageRoot ? findPrefixFromPackageRoot(packageRoot) : undefined;
|
|
172
|
+
if (!prefix)
|
|
173
|
+
return [...INSTALL_COMMAND_ARGS];
|
|
174
|
+
return [...INSTALL_COMMAND_ARGS, '--prefix', prefix];
|
|
175
|
+
};
|
|
176
|
+
const windowsQuote = (value) => {
|
|
177
|
+
if (/^[-A-Za-z0-9_/:=.,@+\\]+$/.test(value))
|
|
178
|
+
return value;
|
|
179
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
180
|
+
};
|
|
181
|
+
const formatInstallCommand = (args, platform = process.platform) => `npm ${args.map(platform === 'win32' ? windowsQuote : shellQuote).join(' ')}`;
|
|
182
|
+
export const runHiveUpdateCommand = async (argv, options = {}) => {
|
|
183
|
+
if (argv.includes('--help') || argv.includes('-h')) {
|
|
184
|
+
console.log(HIVE_UPDATE_USAGE);
|
|
185
|
+
return 0;
|
|
186
|
+
}
|
|
187
|
+
// Reject unknown flags rather than silently ignoring them — keeps behavior
|
|
188
|
+
// consistent with how `parsePort` validates `hive` itself.
|
|
189
|
+
const extra = argv.find((arg) => arg !== '--help' && arg !== '-h');
|
|
190
|
+
if (extra !== undefined) {
|
|
191
|
+
console.error(`Unknown argument: ${extra}`);
|
|
192
|
+
console.error(HIVE_UPDATE_USAGE);
|
|
193
|
+
return 1;
|
|
194
|
+
}
|
|
195
|
+
const run = options.runUpdate ?? defaultRunUpdate;
|
|
196
|
+
const command = getNpmCommand(options.platform);
|
|
197
|
+
const args = resolveHiveUpdateInstallArgs(options.moduleUrl);
|
|
198
|
+
const displayCommand = formatInstallCommand(args, options.platform);
|
|
199
|
+
console.log(`Running: ${displayCommand}`);
|
|
200
|
+
const result = await run(command, args);
|
|
201
|
+
if (result.spawnError) {
|
|
202
|
+
console.error(`Failed to spawn npm: ${result.spawnError.message}`);
|
|
203
|
+
console.error(`You can run the upgrade manually: ${displayCommand}`);
|
|
204
|
+
return 1;
|
|
205
|
+
}
|
|
206
|
+
if (result.exitCode === 0) {
|
|
207
|
+
console.log('Hive updated. Restart any running Hive process to pick up the new version.');
|
|
208
|
+
return 0;
|
|
209
|
+
}
|
|
210
|
+
console.error(`npm install exited with code ${result.exitCode}.`);
|
|
211
|
+
// Permission failures (EACCES on root-owned /usr/bin/npm) and other
|
|
212
|
+
// non-spawn errors leave the user with copy-paste recovery either way.
|
|
213
|
+
console.error(`You can run the upgrade manually: ${displayCommand}`);
|
|
214
|
+
return result.exitCode;
|
|
215
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { type RemoteTunnel, type RemoteTunnelDeps } from '../server/remote-tunnel.js';
|
|
3
|
+
import { type RuntimeStore } from '../server/runtime-store.js';
|
|
4
|
+
import { type VersionService } from '../server/version-service.js';
|
|
5
|
+
interface RunHiveCommandResult {
|
|
6
|
+
port: number;
|
|
7
|
+
close: () => Promise<void>;
|
|
8
|
+
store: RuntimeStore;
|
|
9
|
+
/** The remote-access tunnel. Gated by remote_enabled (default OFF); off => no outbound socket. */
|
|
10
|
+
tunnel: RemoteTunnel;
|
|
11
|
+
}
|
|
12
|
+
type RunHiveCommandOptions = {
|
|
13
|
+
versionService?: VersionService;
|
|
14
|
+
/** Seam: override the tunnel factory in tests. Defaults to the real createRemoteTunnel. */
|
|
15
|
+
createRemoteTunnel?: (deps: RemoteTunnelDeps) => RemoteTunnel;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Signals that should drive a graceful shutdown. The interesting ones:
|
|
19
|
+
*
|
|
20
|
+
* SIGINT — Ctrl+C in the runtime terminal (all platforms).
|
|
21
|
+
* SIGTERM — `kill <pid>` on POSIX. Never delivered on Windows.
|
|
22
|
+
* SIGHUP — POSIX: parent shell exits. On Windows libuv synthesises
|
|
23
|
+
* SIGHUP from `CTRL_CLOSE_EVENT`, i.e. the user clicking
|
|
24
|
+
* the X on the runtime's cmd / Terminal window. Without
|
|
25
|
+
* this listener that close path skips the graceful path
|
|
26
|
+
* entirely on Windows.
|
|
27
|
+
* SIGBREAK — Windows: Ctrl+Break. Less common than Ctrl+C but kit
|
|
28
|
+
* scripts and CI hosts still send it.
|
|
29
|
+
*
|
|
30
|
+
* Stale agent_runs from a non-graceful exit are reconciled at next
|
|
31
|
+
* startup via `agentRunStore.markUnfinishedRunsStale()`
|
|
32
|
+
* (runtime-store-helpers.ts), so a dropped signal does not leave the
|
|
33
|
+
* database in an inconsistent state — only the PTY children miss the
|
|
34
|
+
* forwarded SIGTERM. On Windows there's no graceful equivalent for
|
|
35
|
+
* those children anyway (pty.kill is TerminateProcess), so this
|
|
36
|
+
* registration is mostly about giving SQLite a chance to checkpoint.
|
|
37
|
+
*/
|
|
38
|
+
export declare const SHUTDOWN_SIGNALS: readonly ["SIGINT", "SIGTERM", "SIGHUP", "SIGBREAK"];
|
|
39
|
+
export declare const HIVE_USAGE: string;
|
|
40
|
+
export declare const handleHiveInfoCommand: (argv: string[]) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Resolve the directory where Hive persists its SQLite DB and supporting
|
|
43
|
+
* state. Platform-aware because `~/.config/hive` is a hidden dot-directory
|
|
44
|
+
* convention that Windows Explorer treats as second-class — Windows users
|
|
45
|
+
* can't navigate there from the address bar without typing the full path,
|
|
46
|
+
* and the standard roaming-profile location is `%APPDATA%\<app>` instead.
|
|
47
|
+
*
|
|
48
|
+
* Resolution order:
|
|
49
|
+
* 1. HIVE_DATA_DIR override (any platform, for tests / opinionated users).
|
|
50
|
+
* 2. Windows: %APPDATA%\hive — roaming user state, follows the user
|
|
51
|
+
* across machines on a domain profile. APPDATA, not LOCALAPPDATA,
|
|
52
|
+
* because Hive's DB is user data, not a machine-local cache.
|
|
53
|
+
* Falls back to homedir()\AppData\Roaming\hive when APPDATA is
|
|
54
|
+
* stripped from the env (some Windows Task Scheduler configs do this).
|
|
55
|
+
* 3. POSIX: $XDG_CONFIG_HOME/hive, falling back to ~/.config/hive.
|
|
56
|
+
*
|
|
57
|
+
* Migration: pre-fix Windows installs wrote to ~/.config/hive. When that
|
|
58
|
+
* legacy directory exists but the new %APPDATA%\hive does not, prefer the
|
|
59
|
+
* legacy path so an upgrade does not surface as an empty workspace list.
|
|
60
|
+
* This is a one-way ratchet — once the new location is populated, it wins.
|
|
61
|
+
*
|
|
62
|
+
* Exported so the resolution rules are unit-testable without touching env
|
|
63
|
+
* or the real filesystem.
|
|
64
|
+
*/
|
|
65
|
+
export declare const resolveDataDir: (platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv, pathExists?: (path: string) => boolean) => string;
|
|
66
|
+
/**
|
|
67
|
+
* Recovery hint formatter for the "port already in use" error. Platform-aware
|
|
68
|
+
* because the lsof / xargs / kill pipeline is POSIX-only; on Windows a user
|
|
69
|
+
* pasting that command into cmd or PowerShell gets nothing useful. The
|
|
70
|
+
* Windows path swaps in `netstat -ano | findstr` + `taskkill /F /PID` which
|
|
71
|
+
* is the documented Microsoft workflow for the same problem.
|
|
72
|
+
*
|
|
73
|
+
* Exported for unit testing.
|
|
74
|
+
*/
|
|
75
|
+
export declare const formatPortInUseMessage: (port: number, platform?: NodeJS.Platform) => string;
|
|
76
|
+
export declare const formatPortAccessDeniedMessage: (port: number, platform?: NodeJS.Platform) => string;
|
|
77
|
+
export declare const runHiveCommand: (argv: string[], options?: RunHiveCommandOptions) => Promise<RunHiveCommandResult>;
|
|
78
|
+
export type { RunHiveCommandResult };
|