@web-auto/webauto 0.1.1 → 0.1.3
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/apps/desktop-console/default-settings.json +1 -0
- package/apps/desktop-console/dist/main/index.mjs +1618 -0
- package/apps/desktop-console/{src → dist}/main/preload.mjs +10 -0
- package/apps/desktop-console/dist/renderer/index.js +3063 -0
- package/apps/desktop-console/entry/ui-console.mjs +299 -0
- package/apps/webauto/entry/account.mjs +356 -0
- package/apps/webauto/entry/lib/account-detect.mjs +160 -0
- package/apps/webauto/entry/lib/account-store.mjs +587 -0
- package/apps/webauto/entry/lib/profilepool.mjs +1 -1
- package/apps/webauto/entry/xhs-install.mjs +27 -3
- package/apps/webauto/entry/xhs-status.mjs +152 -0
- package/apps/webauto/entry/xhs-unified.mjs +595 -17
- package/bin/webauto.mjs +263 -15
- package/dist/apps/webauto/server.js +66 -0
- package/dist/modules/camo-backend/src/index.js +575 -0
- package/dist/modules/camo-backend/src/internal/BrowserSession.js +817 -0
- package/dist/modules/camo-backend/src/internal/ElementRegistry.js +61 -0
- package/dist/modules/camo-backend/src/internal/ProfileLock.js +85 -0
- package/dist/modules/camo-backend/src/internal/SessionManager.js +172 -0
- package/dist/modules/camo-backend/src/internal/container-matcher.js +852 -0
- package/dist/modules/camo-backend/src/internal/engine-manager.js +258 -0
- package/dist/modules/camo-backend/src/internal/fingerprint.js +203 -0
- package/dist/modules/camo-backend/src/internal/pageRuntime.js +29 -0
- package/dist/modules/camo-backend/src/internal/runtimeInjector.js +30 -0
- package/dist/modules/camo-backend/src/internal/state-bus.js +46 -0
- package/dist/modules/camo-backend/src/internal/storage-paths.js +36 -0
- package/dist/modules/camo-backend/src/internal/ws-server.js +1202 -0
- package/dist/modules/camo-runtime/src/utils/browser-service.mjs +423 -0
- package/dist/modules/camo-runtime/src/utils/config.mjs +77 -0
- package/dist/modules/container-registry/src/index.js +184 -0
- package/dist/modules/logging/src/index.js +92 -0
- package/dist/modules/operations/src/builtin.js +27 -0
- package/dist/modules/operations/src/container-binding.js +75 -0
- package/dist/modules/operations/src/executor.js +146 -0
- package/dist/modules/operations/src/operations/click.js +167 -0
- package/dist/modules/operations/src/operations/extract.js +204 -0
- package/dist/modules/operations/src/operations/find-child.js +17 -0
- package/dist/modules/operations/src/operations/highlight.js +138 -0
- package/dist/modules/operations/src/operations/key.js +61 -0
- package/dist/modules/operations/src/operations/navigate.js +148 -0
- package/dist/modules/operations/src/operations/scroll.js +126 -0
- package/dist/modules/operations/src/operations/type.js +190 -0
- package/dist/modules/operations/src/queue.js +100 -0
- package/dist/modules/operations/src/registry.js +11 -0
- package/dist/modules/operations/src/system/mouse.js +33 -0
- package/dist/modules/state/src/atomic-json.js +33 -0
- package/dist/modules/workflow/blocks/AnchorVerificationBlock.js +71 -0
- package/dist/modules/workflow/blocks/BehaviorRandomizer.js +26 -0
- package/dist/modules/workflow/blocks/CallWorkflowBlock.js +38 -0
- package/dist/modules/workflow/blocks/CloseDetailBlock.js +209 -0
- package/dist/modules/workflow/blocks/CollectBatch.js +137 -0
- package/dist/modules/workflow/blocks/CollectCommentsBlock.js +415 -0
- package/dist/modules/workflow/blocks/CollectSearchListBlock.js +599 -0
- package/dist/modules/workflow/blocks/CollectWeiboPosts.js +229 -0
- package/dist/modules/workflow/blocks/DetectPageStateBlock.js +259 -0
- package/dist/modules/workflow/blocks/EnsureLoginBlock.js +162 -0
- package/dist/modules/workflow/blocks/EnsureSession.js +426 -0
- package/dist/modules/workflow/blocks/ErrorClassifier.js +164 -0
- package/dist/modules/workflow/blocks/ErrorRecoveryBlock.js +319 -0
- package/dist/modules/workflow/blocks/ExpandCommentsBlock.js +1032 -0
- package/dist/modules/workflow/blocks/ExtractDetailBlock.js +310 -0
- package/dist/modules/workflow/blocks/ExtractPostFields.js +88 -0
- package/dist/modules/workflow/blocks/GenerateSmartReplyBlock.js +68 -0
- package/dist/modules/workflow/blocks/GoToSearchBlock.js +497 -0
- package/dist/modules/workflow/blocks/GracefulFallbackBlock.js +104 -0
- package/dist/modules/workflow/blocks/HighlightBlock.js +66 -0
- package/dist/modules/workflow/blocks/InitAutoScroll.js +65 -0
- package/dist/modules/workflow/blocks/LoadContainerDefinition.js +50 -0
- package/dist/modules/workflow/blocks/LoadContainerIndex.js +43 -0
- package/dist/modules/workflow/blocks/LocateAndGuardBlock.js +176 -0
- package/dist/modules/workflow/blocks/LoginRecoveryBlock.js +242 -0
- package/dist/modules/workflow/blocks/MatchContainers.js +64 -0
- package/dist/modules/workflow/blocks/MonitoringBlock.js +190 -0
- package/dist/modules/workflow/blocks/OpenDetailBlock.js +1240 -0
- package/dist/modules/workflow/blocks/OrganizeXhsNotesBlock.js +117 -0
- package/dist/modules/workflow/blocks/PersistXhsNoteBlock.js +270 -0
- package/dist/modules/workflow/blocks/PickSinglePost.js +69 -0
- package/dist/modules/workflow/blocks/ProgressTracker.js +125 -0
- package/dist/modules/workflow/blocks/RecordFixtureBlock.js +44 -0
- package/dist/modules/workflow/blocks/RenderMarkdown.js +48 -0
- package/dist/modules/workflow/blocks/SaveFile.js +54 -0
- package/dist/modules/workflow/blocks/ScrollNextBatch.js +72 -0
- package/dist/modules/workflow/blocks/SessionHealthBlock.js +73 -0
- package/dist/modules/workflow/blocks/StartBrowserService.js +45 -0
- package/dist/modules/workflow/blocks/ValidateContainerDefinition.js +67 -0
- package/dist/modules/workflow/blocks/ValidateExtract.js +35 -0
- package/dist/modules/workflow/blocks/WaitSearchPermitBlock.js +162 -0
- package/dist/modules/workflow/blocks/WaitStable.js +74 -0
- package/dist/modules/workflow/blocks/WarmupCommentsBlock.js +120 -0
- package/dist/modules/workflow/blocks/WorkflowExecutor.js +156 -0
- package/dist/modules/workflow/blocks/XiaohongshuCollectFromLinksBlock.js +1004 -0
- package/dist/modules/workflow/blocks/XiaohongshuCollectLinksBlock.js +1049 -0
- package/dist/modules/workflow/blocks/XiaohongshuFullCollectBlock.js +782 -0
- package/dist/modules/workflow/blocks/helpers/anchorVerify.js +198 -0
- package/dist/modules/workflow/blocks/helpers/asyncWorkQueue.js +53 -0
- package/dist/modules/workflow/blocks/helpers/commentScroller.js +334 -0
- package/dist/modules/workflow/blocks/helpers/commentSectionLocator.js +126 -0
- package/dist/modules/workflow/blocks/helpers/containerAnchors.js +301 -0
- package/dist/modules/workflow/blocks/helpers/debugArtifacts.js +6 -0
- package/dist/modules/workflow/blocks/helpers/downloadPaths.js +29 -0
- package/dist/modules/workflow/blocks/helpers/expandCommentsController.js +53 -0
- package/dist/modules/workflow/blocks/helpers/expandCommentsExtractor.js +129 -0
- package/dist/modules/workflow/blocks/helpers/macosVisionOcrPlugin.js +116 -0
- package/dist/modules/workflow/blocks/helpers/mergeXhsMarkdown.js +109 -0
- package/dist/modules/workflow/blocks/helpers/openDetailController.js +56 -0
- package/dist/modules/workflow/blocks/helpers/openDetailTypes.js +7 -0
- package/dist/modules/workflow/blocks/helpers/openDetailViewport.js +474 -0
- package/dist/modules/workflow/blocks/helpers/openDetailWaiter.js +104 -0
- package/dist/modules/workflow/blocks/helpers/operationLogger.js +195 -0
- package/dist/modules/workflow/blocks/helpers/persistedNotes.js +107 -0
- package/dist/modules/workflow/blocks/helpers/replyExpander.js +260 -0
- package/dist/modules/workflow/blocks/helpers/scrollIntoView.js +138 -0
- package/dist/modules/workflow/blocks/helpers/searchExecutor.js +328 -0
- package/dist/modules/workflow/blocks/helpers/searchGate.js +46 -0
- package/dist/modules/workflow/blocks/helpers/searchPageState.js +164 -0
- package/dist/modules/workflow/blocks/helpers/searchResultWaiter.js +64 -0
- package/dist/modules/workflow/blocks/helpers/simpleAnchor.js +134 -0
- package/dist/modules/workflow/blocks/helpers/smartReply.js +40 -0
- package/dist/modules/workflow/blocks/helpers/systemInput.js +635 -0
- package/dist/modules/workflow/blocks/helpers/targetCountMode.js +9 -0
- package/dist/modules/workflow/blocks/helpers/xhsCliArgs.js +80 -0
- package/dist/modules/workflow/blocks/helpers/xhsCommentDom.js +805 -0
- package/dist/modules/workflow/blocks/helpers/xhsNoteOrganizer.js +140 -0
- package/dist/modules/workflow/blocks/restore/RestorePhaseBlock.js +204 -0
- package/dist/modules/workflow/config/workflowRegistry.js +32 -0
- package/dist/modules/workflow/definitions/batch-collect-workflow.js +63 -0
- package/dist/modules/workflow/definitions/scroll-extract-workflow.js +74 -0
- package/dist/modules/workflow/definitions/xiaohongshu-collect-workflow-v2.js +81 -0
- package/dist/modules/workflow/definitions/xiaohongshu-collect-workflow.js +57 -0
- package/dist/modules/workflow/definitions/xiaohongshu-full-collect-workflow-v3.js +68 -0
- package/dist/modules/workflow/definitions/xiaohongshu-note-collect.js +49 -0
- package/dist/modules/workflow/definitions/xiaohongshu-phase1-workflow-v3.js +30 -0
- package/dist/modules/workflow/definitions/xiaohongshu-phase2-links-workflow-v3.js +40 -0
- package/dist/modules/workflow/definitions/xiaohongshu-phase3-collect-workflow-v1.js +54 -0
- package/dist/modules/workflow/definitions/xiaohongshu-phase34-from-links-workflow-v3.js +25 -0
- package/dist/modules/workflow/src/WeiboEventDrivenWorkflowRunner.js +308 -0
- package/dist/modules/workflow/src/context.js +70 -0
- package/dist/modules/workflow/src/index.js +5 -0
- package/dist/modules/workflow/src/orchestrator.js +230 -0
- package/dist/modules/workflow/src/runner.js +55 -0
- package/dist/modules/workflow/src/runtime.js +70 -0
- package/dist/modules/workflow/workflows/WeiboFeedExtractionWorkflow.js +359 -0
- package/dist/modules/workflow/workflows/XiaohongshuLoginWorkflow.js +110 -0
- package/dist/modules/xiaohongshu/app/src/blocks/MatchCommentsBlock.js +139 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase1EnsureServicesBlock.js +36 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase1MonitorCookieBlock.js +213 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase1StartProfileBlock.js +121 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase2CollectLinksBlock.js +1249 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase2SearchBlock.js +703 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34CloseDetailBlock.js +41 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34CloseTabsBlock.js +44 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34CollectCommentsBlock.js +150 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34ExtractDetailBlock.js +117 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34OpenDetailBlock.js +102 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34OpenTabsBlock.js +109 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34PersistDetailBlock.js +117 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34ProcessSingleNoteBlock.js +114 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase34ValidateLinksBlock.js +90 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase3InteractBlock.js +1009 -0
- package/dist/modules/xiaohongshu/app/src/blocks/Phase4MultiTabHarvestBlock.js +233 -0
- package/dist/modules/xiaohongshu/app/src/blocks/ReplyInteractBlock.js +291 -0
- package/dist/modules/xiaohongshu/app/src/blocks/XhsDiscoverFallbackBlock.js +240 -0
- package/dist/modules/xiaohongshu/app/src/blocks/helpers/commentMatchDsl.js +126 -0
- package/dist/modules/xiaohongshu/app/src/blocks/helpers/commentMatcher.js +99 -0
- package/dist/modules/xiaohongshu/app/src/blocks/helpers/evidence.js +27 -0
- package/dist/modules/xiaohongshu/app/src/blocks/helpers/sharding.js +42 -0
- package/dist/modules/xiaohongshu/app/src/blocks/helpers/xhsComments.js +270 -0
- package/dist/modules/xiaohongshu/app/src/index.js +9 -0
- package/dist/modules/xiaohongshu/app/src/utils/checkpoints.js +222 -0
- package/dist/modules/xiaohongshu/app/src/utils/controllerAction.js +43 -0
- package/dist/services/controller/src/controller.js +1476 -0
- package/dist/services/controller/src/index.js +2 -0
- package/dist/services/controller/src/payload-normalizer.js +129 -0
- package/dist/services/shared/heartbeat.js +120 -0
- package/dist/services/shared/lib/errorHandler.js +2 -0
- package/dist/services/shared/serviceProcessLogger.js +139 -0
- package/dist/services/unified-api/RemoteBrowserSession.js +176 -0
- package/dist/services/unified-api/RemoteSessionManager.js +148 -0
- package/dist/services/unified-api/container-operations-handler.js +115 -0
- package/dist/services/unified-api/server.js +652 -0
- package/dist/services/unified-api/state-registry.js +274 -0
- package/dist/services/unified-api/task-persistence.js +66 -0
- package/dist/services/unified-api/task-state.js +130 -0
- package/modules/camo-runtime/src/autoscript/action-providers/xhs/search.mjs +12 -5
- package/modules/xiaohongshu/app/pnpm-lock.yaml +24 -0
- package/package.json +38 -10
- package/.beads/README.md +0 -81
- package/.beads/config.yaml +0 -67
- package/.beads/interactions.jsonl +0 -0
- package/.beads/issues.jsonl +0 -180
- package/.beads/metadata.json +0 -4
- package/.claude/settings.local.json +0 -10
- package/.github/workflows/ci.yml +0 -55
- package/AGENTS.md +0 -253
- package/apps/desktop-console/README.md +0 -27
- package/apps/desktop-console/package-lock.json +0 -897
- package/apps/desktop-console/package.json +0 -20
- package/apps/desktop-console/scripts/build-and-install.mjs +0 -19
- package/apps/desktop-console/scripts/build.mjs +0 -45
- package/apps/desktop-console/scripts/test-preload.mjs +0 -13
- package/apps/desktop-console/src/main/config.mts +0 -26
- package/apps/desktop-console/src/main/core-daemon-manager.mts +0 -131
- package/apps/desktop-console/src/main/desktop-settings.mts +0 -267
- package/apps/desktop-console/src/main/heartbeat-watchdog.mts +0 -50
- package/apps/desktop-console/src/main/heartbeat-watchdog.test.mts +0 -68
- package/apps/desktop-console/src/main/index-streaming.test.mts +0 -20
- package/apps/desktop-console/src/main/index.mts +0 -980
- package/apps/desktop-console/src/main/profile-store.mts +0 -239
- package/apps/desktop-console/src/main/profile-store.test.mts +0 -54
- package/apps/desktop-console/src/main/state-bridge.mts +0 -114
- package/apps/desktop-console/src/main/task-state-types.ts +0 -32
- package/apps/desktop-console/src/renderer/hooks/use-task-state.mts +0 -120
- package/apps/desktop-console/src/renderer/index.mts +0 -133
- package/apps/desktop-console/src/renderer/index.test.mts +0 -34
- package/apps/desktop-console/src/renderer/path-helpers.mts +0 -46
- package/apps/desktop-console/src/renderer/path-helpers.test.mts +0 -14
- package/apps/desktop-console/src/renderer/tabs/debug.mts +0 -48
- package/apps/desktop-console/src/renderer/tabs/debug.test.mts +0 -22
- package/apps/desktop-console/src/renderer/tabs/logs.mts +0 -421
- package/apps/desktop-console/src/renderer/tabs/logs.test.mts +0 -27
- package/apps/desktop-console/src/renderer/tabs/preflight.mts +0 -486
- package/apps/desktop-console/src/renderer/tabs/preflight.test.mts +0 -33
- package/apps/desktop-console/src/renderer/tabs/profile-pool.mts +0 -213
- package/apps/desktop-console/src/renderer/tabs/results.mts +0 -171
- package/apps/desktop-console/src/renderer/tabs/run.test.mts +0 -63
- package/apps/desktop-console/src/renderer/tabs/runtime.mts +0 -151
- package/apps/desktop-console/src/renderer/tabs/settings.mts +0 -146
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu/account-flow.mts +0 -486
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu/guide-browser-check.mts +0 -56
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu/helpers.mts +0 -262
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu/layout-block.mts +0 -430
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu/live-stats.mts +0 -847
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu/run-flow.mts +0 -443
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu-state.mts +0 -425
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu.mts +0 -497
- package/apps/desktop-console/src/renderer/tabs/xiaohongshu.test.mts +0 -291
- package/apps/desktop-console/src/renderer/ui-components.mts +0 -31
- package/docs/README_camoufox_chinese.md +0 -141
- package/docs/USAGE_V3.md +0 -163
- package/docs/arch/OCR_MACOS_PLUGIN.md +0 -39
- package/docs/arch/PORTS.md +0 -40
- package/docs/arch/REGRESSION_CHECKLIST.md +0 -121
- package/docs/arch/SEARCH_GATE.md +0 -224
- package/docs/arch/VIEWPORT_SAFETY.md +0 -182
- package/docs/arch/XIAOHONGSHU_OFFLINE_MOCK_DESIGN.md +0 -267
- package/docs/xiaohongshu-container-driven-summary.md +0 -221
- package/docs/xiaohongshu-full-collect-runbook.md +0 -134
- package/docs/xiaohongshu-next-steps.md +0 -228
- package/docs/xiaohongshu-quickstart.md +0 -73
- package/docs/xiaohongshu-workflow-summary.md +0 -227
- package/modules/container-registry/tests/container-registry.test.ts +0 -16
- package/modules/logging/tests/logging.test.ts +0 -38
- package/modules/operations/tests/operations.test.ts +0 -22
- package/modules/operations/tests/viewport-filter.test.ts +0 -161
- package/modules/operations/tests/visible-only.test.ts +0 -250
- package/modules/session-manager/tests/session-manager.test.ts +0 -23
- package/modules/state/src/atomic-json.test.ts +0 -30
- package/modules/state/src/paths.test.ts +0 -59
- package/modules/state/src/xiaohongshu-collect-state.test.ts +0 -259
- package/modules/workflow/blocks/AnchorVerificationBlock.d.ts.map +0 -1
- package/modules/workflow/blocks/AnchorVerificationBlock.js.map +0 -1
- package/modules/workflow/blocks/DetectPageStateBlock.d.ts.map +0 -1
- package/modules/workflow/blocks/DetectPageStateBlock.js.map +0 -1
- package/modules/workflow/blocks/ErrorRecoveryBlock.d.ts.map +0 -1
- package/modules/workflow/blocks/ErrorRecoveryBlock.js.map +0 -1
- package/modules/workflow/blocks/WaitSearchPermitBlock.d.ts.map +0 -1
- package/modules/workflow/blocks/WaitSearchPermitBlock.js.map +0 -1
- package/modules/workflow/blocks/helpers/containerAnchors.d.ts.map +0 -1
- package/modules/workflow/blocks/helpers/containerAnchors.js.map +0 -1
- package/modules/workflow/blocks/helpers/downloadPaths.test.ts +0 -62
- package/modules/workflow/blocks/helpers/mergeXhsMarkdown.test.ts +0 -121
- package/modules/workflow/blocks/helpers/operationLogger.d.ts.map +0 -1
- package/modules/workflow/blocks/helpers/operationLogger.js.map +0 -1
- package/modules/workflow/blocks/helpers/persistedNotes.test.ts +0 -268
- package/modules/workflow/blocks/helpers/searchPageState.d.ts.map +0 -1
- package/modules/workflow/blocks/helpers/searchPageState.js.map +0 -1
- package/modules/workflow/blocks/helpers/targetCountMode.test.ts +0 -29
- package/modules/workflow/blocks/helpers/xhsCliArgs.test.ts +0 -75
- package/modules/workflow/tests/smartReply.test.ts +0 -32
- package/modules/xiaohongshu/app/src/blocks/Phase3Interact.matcher.test.ts +0 -33
- package/modules/xiaohongshu/app/src/utils/__tests__/checkpoints.test.ts +0 -141
- package/modules/xiaohongshu/app/tests/commentMatchDsl.test.ts +0 -50
- package/modules/xiaohongshu/app/tests/commentMatcher.test.ts +0 -46
- package/modules/xiaohongshu/app/tests/sharding.test.ts +0 -31
- package/package-scripts.json +0 -8
- package/runtime/infra/utils/README.md +0 -13
- package/runtime/infra/utils/scripts/README.md +0 -0
- package/runtime/infra/utils/scripts/development/eval-in-session.mjs +0 -40
- package/runtime/infra/utils/scripts/development/highlight-search-containers.mjs +0 -35
- package/runtime/infra/utils/scripts/service/kill-port.mjs +0 -24
- package/runtime/infra/utils/scripts/service/start-api.mjs +0 -39
- package/runtime/infra/utils/scripts/service/start-browser-service.mjs +0 -106
- package/runtime/infra/utils/scripts/service/stop-api.mjs +0 -18
- package/runtime/infra/utils/scripts/service/stop-browser-service.mjs +0 -104
- package/runtime/infra/utils/scripts/test-services.mjs +0 -94
- package/services/shared/heartbeat.test.ts +0 -102
- package/services/unified-api/__tests__/task-state.test.ts +0 -95
- package/sitecustomize.py +0 -19
- package/tests/README.md +0 -194
- package/tests/e2e/workflows/weibo-feed-extraction.test.ts +0 -171
- package/tests/fixtures/data/container-definitions.json +0 -67
- package/tests/fixtures/pages/simple-page.html +0 -69
- package/tests/integration/01-test-container-match.mjs +0 -188
- package/tests/integration/02-test-dom-branch.mjs +0 -161
- package/tests/integration/03-test-container-operation-system.mjs +0 -91
- package/tests/integration/05-test-container-lifecycle-events.mjs +0 -224
- package/tests/integration/05-test-container-lifecycle-with-events.mjs +0 -250
- package/tests/integration/06-test-container-dom-tree-drawing.mjs +0 -256
- package/tests/integration/07-test-weibo-container-lifecycle.mjs +0 -355
- package/tests/integration/08-test-weibo-feed-workflow.test.mjs +0 -164
- package/tests/integration/10-test-visual-analyzer.mjs +0 -312
- package/tests/integration/11-test-visual-loop.mjs +0 -284
- package/tests/integration/12-test-simple-visual-loop.mjs +0 -242
- package/tests/integration/13-test-visual-robust.mjs +0 -185
- package/tests/integration/14-test-visual-highlight-loop.mjs +0 -271
- package/tests/integration/inspect-page.mjs +0 -50
- package/tests/integration/run-all-tests.mjs +0 -95
- package/tests/patch_verification/CODEX_PATCH_TEST.md +0 -103
- package/tests/patch_verification/PHASE2_ANALYSIS.md +0 -179
- package/tests/patch_verification/PHASE2_OPTIMIZATION_REPORT.md +0 -55
- package/tests/patch_verification/PHASE2_TO_PHASE4_SUMMARY.md +0 -126
- package/tests/patch_verification/QUICK_TEST_SEQUENCE.md +0 -262
- package/tests/patch_verification/README.md +0 -143
- package/tests/patch_verification/RUN_TESTS.md +0 -60
- package/tests/patch_verification/TEST_EXECUTION.md +0 -99
- package/tests/patch_verification/TEST_PLAN.md +0 -328
- package/tests/patch_verification/TEST_RESULTS.md +0 -34
- package/tests/patch_verification/TOOL_TEST_PLAN.md +0 -48
- package/tests/patch_verification/run-tool-test.mjs +0 -121
- package/tests/patch_verification/temp_test_files/test01.txt +0 -1
- package/tests/patch_verification/temp_test_files/test02.txt +0 -3
- package/tests/patch_verification/temp_test_files/test02_gnu.txt +0 -3
- package/tests/patch_verification/temp_test_files/test03.txt +0 -1
- package/tests/patch_verification/temp_test_files/test03_multiline.txt +0 -5
- package/tests/patch_verification/temp_test_files/test04_function.ts +0 -5
- package/tests/patch_verification/temp_test_files/test05_import.ts +0 -4
- package/tests/patch_verification/temp_test_files/test06_special_chars.txt +0 -4
- package/tests/patch_verification/temp_test_files/test07_indentation.ts +0 -5
- package/tests/patch_verification/temp_test_files/test08_mismatch.txt +0 -1
- package/tests/patch_verification/temp_test_files/test_add_02.txt +0 -3
- package/tests/patch_verification/temp_test_files/test_simple.txt +0 -1
- package/tests/runner/TestReporter.mjs +0 -57
- package/tests/runner/TestRunner.mjs +0 -244
- package/tests/unit/commands/profile.test.mjs +0 -10
- package/tests/unit/container/change-notifier.test.mjs +0 -181
- package/tests/unit/lifecycle/session-registry.test.mjs +0 -135
- package/tests/unit/operations/registry.test.ts +0 -73
- package/tests/unit/utils/browser-service.test.mjs +0 -153
- package/tests/unit/utils/config.test.mjs +0 -166
- package/tests/unit/utils/fingerprint.test.mjs +0 -166
- package/tsconfig.json +0 -31
- package/tsconfig.services.json +0 -26
- /package/apps/desktop-console/{src → dist}/renderer/index.html +0 -0
- /package/apps/desktop-console/{src/renderer/tabs → dist/renderer}/run.mts +0 -0
package/bin/webauto.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import minimist from 'minimist';
|
|
3
3
|
import { spawn } from 'node:child_process';
|
|
4
|
-
import { existsSync, writeFileSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { existsSync, writeFileSync, readFileSync, mkdirSync } from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
|
|
@@ -20,7 +20,7 @@ function saveState(state) {
|
|
|
20
20
|
try {
|
|
21
21
|
const dir = path.dirname(STATE_FILE);
|
|
22
22
|
if (!existsSync(dir)) {
|
|
23
|
-
|
|
23
|
+
mkdirSync(dir, { recursive: true });
|
|
24
24
|
}
|
|
25
25
|
writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
|
|
26
26
|
} catch {}
|
|
@@ -29,10 +29,11 @@ function saveState(state) {
|
|
|
29
29
|
function isGlobalInstall() {
|
|
30
30
|
// Check if running from global node_modules
|
|
31
31
|
const execPath = process.argv[1] || '';
|
|
32
|
+
const npmPrefix = String(process.env.NPM_CONFIG_PREFIX || '').trim();
|
|
32
33
|
return execPath.includes('node_modules/@web-auto/webauto') ||
|
|
33
34
|
execPath.includes('/opt/homebrew/lib/node_modules') ||
|
|
34
35
|
execPath.includes('/usr/local/lib/node_modules') ||
|
|
35
|
-
execPath.includes(
|
|
36
|
+
(npmPrefix ? execPath.includes(npmPrefix) : false) ||
|
|
36
37
|
!existsSync(path.join(ROOT, '.git'));
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -40,20 +41,189 @@ function npmBin() {
|
|
|
40
41
|
return process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
function
|
|
44
|
-
console.log(`webauto
|
|
44
|
+
function printMainHelp() {
|
|
45
|
+
console.log(`webauto CLI
|
|
45
46
|
|
|
46
47
|
Usage:
|
|
48
|
+
webauto --help
|
|
49
|
+
webauto account --help
|
|
50
|
+
webauto ui console --help
|
|
51
|
+
webauto xhs --help
|
|
52
|
+
|
|
53
|
+
Core Commands:
|
|
54
|
+
webauto account <list|sync|add|get|update|delete|login|sync-alias> [options]
|
|
47
55
|
webauto ui console [--build] [--install] [--check]
|
|
48
|
-
webauto
|
|
56
|
+
webauto ui test <scenario> [options]
|
|
57
|
+
webauto xhs install [--download-browser] [--download-geoip] [--ensure-backend]
|
|
58
|
+
webauto xhs unified [xhs options...]
|
|
59
|
+
webauto xhs status [--run-id <id>] [--json]
|
|
60
|
+
webauto xhs orchestrate [xhs options...]
|
|
61
|
+
|
|
62
|
+
Build & Release:
|
|
49
63
|
webauto build:dev # Local link mode
|
|
50
64
|
webauto build:release # Prepare npm release
|
|
51
65
|
|
|
66
|
+
Examples (standard):
|
|
67
|
+
webauto account add --platform xiaohongshu --alias 主号
|
|
68
|
+
webauto account list
|
|
69
|
+
webauto account login xhs-0001 --url https://www.xiaohongshu.com
|
|
70
|
+
webauto account sync-alias xhs-0001
|
|
71
|
+
webauto ui console --check
|
|
72
|
+
webauto ui console --build
|
|
73
|
+
webauto ui console --install
|
|
74
|
+
webauto ui test env-check
|
|
75
|
+
webauto ui test account-flow --profile test-001
|
|
76
|
+
webauto ui test config-save --output ./report.json
|
|
77
|
+
webauto ui test crawl-run --keyword "测试" --target 10
|
|
78
|
+
webauto xhs install --ensure-backend
|
|
79
|
+
webauto xhs unified --profile xiaohongshu-batch-1 --keyword "seedance2.0" --max-notes 100 --do-comments true --persist-comments true --do-likes true --like-keywords "真牛逼" --env debug --tab-count 4
|
|
80
|
+
|
|
81
|
+
Tips:
|
|
82
|
+
- xhs 命令会转发到 apps/webauto/entry/xhs-*.mjs
|
|
83
|
+
- account 命令会转发到 apps/webauto/entry/account.mjs
|
|
84
|
+
- 全量参数请看: webauto xhs --help
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function printUiConsoleHelp() {
|
|
89
|
+
console.log(`webauto ui console
|
|
90
|
+
|
|
91
|
+
Usage:
|
|
92
|
+
webauto ui console [--build] [--install] [--check] [--no-daemon]
|
|
93
|
+
webauto ui test <scenario> [options]
|
|
94
|
+
|
|
95
|
+
Options:
|
|
96
|
+
--check 只检查构建/依赖状态,不启动 UI
|
|
97
|
+
--build 缺少构建产物时自动构建
|
|
98
|
+
--install 缺少依赖时自动安装
|
|
99
|
+
--no-daemon 前台模式运行(不后台守护)
|
|
100
|
+
|
|
101
|
+
Test Scenarios:
|
|
102
|
+
env-check 环境检查(camo CLI + 服务健康)
|
|
103
|
+
account-flow 账户创建/登录流程测试
|
|
104
|
+
config-save 配置导入/导出测试
|
|
105
|
+
crawl-run 完整爬取流程测试(dry-run 模式)
|
|
106
|
+
|
|
107
|
+
Test Options:
|
|
108
|
+
--profile <id> 测试用 profile ID
|
|
109
|
+
--keyword <kw> 测试关键词
|
|
110
|
+
--target <n> 目标数量
|
|
111
|
+
--headless 无头模式
|
|
112
|
+
--output <path> 输出 JSON 报告路径
|
|
113
|
+
|
|
52
114
|
Examples:
|
|
53
115
|
webauto ui console --check
|
|
54
116
|
webauto ui console --build
|
|
55
117
|
webauto ui console --install
|
|
56
|
-
webauto
|
|
118
|
+
webauto ui test env-check
|
|
119
|
+
webauto ui test account-flow --profile test-001
|
|
120
|
+
webauto ui test config-save --output ./report.json
|
|
121
|
+
webauto ui test crawl-run --keyword "测试" --target 10 --headless
|
|
122
|
+
`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function printXhsHelp() {
|
|
126
|
+
console.log(`webauto xhs
|
|
127
|
+
|
|
128
|
+
Usage:
|
|
129
|
+
webauto xhs install [--download-browser] [--download-geoip] [--ensure-backend]
|
|
130
|
+
webauto xhs unified --profile <id> --keyword <kw> [options...]
|
|
131
|
+
webauto xhs status [--run-id <id>] [--json]
|
|
132
|
+
webauto xhs orchestrate --profile <id> --keyword <kw> [options...]
|
|
133
|
+
|
|
134
|
+
Subcommands:
|
|
135
|
+
install 运行 xhs-install,检查/安装 camoufox、geoip,按需拉起 backend
|
|
136
|
+
unified 运行统一脚本(搜索 + 打开详情 + 评论抓取 + 点赞)
|
|
137
|
+
status 查询当前任务状态与错误摘要(支持 runId 详情)
|
|
138
|
+
orchestrate 运行编排入口(默认调用 unified 模式)
|
|
139
|
+
|
|
140
|
+
Unified Required:
|
|
141
|
+
--profile <id> 配置好的 camo profile(示例: xiaohongshu-batch-1)
|
|
142
|
+
--keyword <kw> 搜索关键词
|
|
143
|
+
|
|
144
|
+
Unified Common Options:
|
|
145
|
+
--max-notes <n> 目标帖子数,默认 30
|
|
146
|
+
--total-notes <n> 多账号总目标数(按账号自动分片)
|
|
147
|
+
--total-target <n> total-notes 别名
|
|
148
|
+
--parallel 启用多账号并行执行
|
|
149
|
+
--concurrency <n> 并行度(默认=账号数)
|
|
150
|
+
--plan-only 仅生成分片计划,不执行
|
|
151
|
+
--tab-count <n> 轮询 tab 数,默认 4
|
|
152
|
+
--throttle <ms> 操作节流,默认 500
|
|
153
|
+
--note-interval <ms> 帖子间等待,默认 900
|
|
154
|
+
--env <name> 输出环境目录,默认 debug
|
|
155
|
+
--output-root <path> 自定义输出根目录
|
|
156
|
+
--dry-run 干跑(禁用点赞/回复)
|
|
157
|
+
--no-dry-run 强制非干跑
|
|
158
|
+
|
|
159
|
+
Comment Crawl Options:
|
|
160
|
+
--do-comments <bool> 是否抓评论,默认 true
|
|
161
|
+
--persist-comments <bool> 是否落盘评论,默认 true(dry-run 下默认 false)
|
|
162
|
+
|
|
163
|
+
Like Options:
|
|
164
|
+
--do-likes <bool> 是否启用点赞,默认 false
|
|
165
|
+
--like-keywords "<k1,k2>" 点赞关键词(命中评论触发)
|
|
166
|
+
--max-likes <n> 每轮最多点赞数,默认 2
|
|
167
|
+
--match-mode any|all 关键词匹配模式,默认 any
|
|
168
|
+
--match-min-hits <n> 最低命中词数,默认 1
|
|
169
|
+
--match-keywords "<...>" 匹配关键词集合(默认回落到 keyword)
|
|
170
|
+
|
|
171
|
+
Optional Advanced:
|
|
172
|
+
--do-reply <bool> 是否回复(默认 false)
|
|
173
|
+
--reply-text "<text>" 回复文案(默认: 感谢分享,已关注)
|
|
174
|
+
--do-ocr <bool> 是否启用 OCR(默认 false)
|
|
175
|
+
--ocr-command "<cmd>" OCR 命令路径
|
|
176
|
+
--input-mode protocol|... 输入模式(默认 protocol)
|
|
177
|
+
|
|
178
|
+
Standard Workflows:
|
|
179
|
+
1) 初始化与后端检查
|
|
180
|
+
webauto xhs install --download-geoip --ensure-backend
|
|
181
|
+
|
|
182
|
+
2) 全功能采集(搜索 + 评论 + 点赞)
|
|
183
|
+
webauto xhs unified --profile xiaohongshu-batch-1 --keyword "seedance2.0" --max-notes 100 --do-comments true --persist-comments true --do-likes true --like-keywords "真牛逼" --env debug --tab-count 4
|
|
184
|
+
|
|
185
|
+
3) 只做搜索 + 评论抓取(不点赞)
|
|
186
|
+
webauto xhs unified --profile xiaohongshu-batch-1 --keyword "seedance2.0" --max-notes 50 --do-comments true --persist-comments true --do-likes false --env debug
|
|
187
|
+
|
|
188
|
+
4) 点赞策略增强(多关键词 + 命中阈值)
|
|
189
|
+
webauto xhs unified --profile xiaohongshu-batch-1 --keyword "deepseek新模型" --max-notes 100 --do-comments true --persist-comments true --do-likes true --like-keywords "真牛逼,真敬业,太强了" --match-mode any --match-min-hits 1 --max-likes 3 --env debug --tab-count 4
|
|
190
|
+
|
|
191
|
+
5) 多账号并行分片(总量100,3账号并发)
|
|
192
|
+
webauto xhs unified --profiles xiaohongshu-batch-1,xiaohongshu-batch-2,xiaohongshu-batch-3 --keyword "seedance2.0" --total-notes 100 --parallel --concurrency 3 --do-comments true --persist-comments true --do-likes true --like-keywords "真牛逼" --env debug --tab-count 4
|
|
193
|
+
|
|
194
|
+
6) 查看运行状态与错误
|
|
195
|
+
webauto xhs status
|
|
196
|
+
webauto xhs status --run-id <runId> --json
|
|
197
|
+
|
|
198
|
+
Output:
|
|
199
|
+
默认目录: ~/.webauto/download/xiaohongshu/<env>/<keyword>/
|
|
200
|
+
典型产物:
|
|
201
|
+
- <noteId>/comments.jsonl
|
|
202
|
+
- like-evidence/<noteId>/summary-*.json
|
|
203
|
+
- .like-state.jsonl
|
|
204
|
+
`);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function printAccountHelp() {
|
|
208
|
+
console.log(`webauto account
|
|
209
|
+
|
|
210
|
+
Usage:
|
|
211
|
+
webauto account --help
|
|
212
|
+
webauto account list [--json]
|
|
213
|
+
webauto account list --records [--json]
|
|
214
|
+
webauto account add [--platform <name>] [--alias <alias>] [--name <name>] [--username <username>] [--profile <id>] [--fingerprint <id>] [--json]
|
|
215
|
+
webauto account get <id|alias> [--json]
|
|
216
|
+
webauto account update <id|alias> [--alias <alias>|--clear-alias] [--name <name>] [--username <name>] [--profile <id>] [--fingerprint <id>] [--status active|disabled|archived] [--json]
|
|
217
|
+
webauto account delete <id|alias> [--delete-profile] [--delete-fingerprint] [--json]
|
|
218
|
+
webauto account login <id|alias> [--url <url>] [--sync-alias] [--json]
|
|
219
|
+
webauto account sync-alias <id|alias> [--selector <css>] [--alias <value>] [--json]
|
|
220
|
+
webauto account sync <profileId|all> [--json]
|
|
221
|
+
|
|
222
|
+
Examples:
|
|
223
|
+
webauto account list
|
|
224
|
+
webauto account sync all
|
|
225
|
+
webauto account list --records
|
|
226
|
+
webauto account login xiaohongshu-batch-1 --url https://www.xiaohongshu.com
|
|
57
227
|
`);
|
|
58
228
|
}
|
|
59
229
|
|
|
@@ -91,7 +261,16 @@ async function runInDir(dir, cmd, args) {
|
|
|
91
261
|
}
|
|
92
262
|
|
|
93
263
|
function checkDesktopConsoleDeps() {
|
|
94
|
-
|
|
264
|
+
// Check for electron in various locations:
|
|
265
|
+
// 1. Global npm root (when installed globally alongside webauto)
|
|
266
|
+
// 2. Package's own node_modules
|
|
267
|
+
// 3. apps/desktop-console/node_modules (local dev)
|
|
268
|
+
const globalRoot = path.resolve(ROOT, '..', '..');
|
|
269
|
+
return (
|
|
270
|
+
exists(path.join(globalRoot, 'electron')) ||
|
|
271
|
+
exists(path.join(ROOT, 'node_modules', 'electron')) ||
|
|
272
|
+
exists(path.join(ROOT, 'apps', 'desktop-console', 'node_modules', 'electron'))
|
|
273
|
+
);
|
|
95
274
|
}
|
|
96
275
|
|
|
97
276
|
function checkDesktopConsoleBuilt() {
|
|
@@ -163,11 +342,15 @@ async function uiConsole({ build, install, checkOnly }) {
|
|
|
163
342
|
}
|
|
164
343
|
|
|
165
344
|
if (!okDeps) {
|
|
166
|
-
|
|
345
|
+
// For global install, okDeps is always true since we check global electron
|
|
346
|
+
// For local dev, require explicit --install or --build
|
|
347
|
+
if (!isGlobalInstall() && !install && !build) {
|
|
167
348
|
console.error('❌ missing apps/desktop-console/node_modules. Run: npm --prefix apps/desktop-console install');
|
|
168
349
|
process.exit(2);
|
|
169
350
|
}
|
|
170
|
-
|
|
351
|
+
if (!isGlobalInstall()) {
|
|
352
|
+
await runInDir(path.join(ROOT, 'apps', 'desktop-console'), npmBin(), ['install']);
|
|
353
|
+
}
|
|
171
354
|
}
|
|
172
355
|
|
|
173
356
|
if (!okUiBuilt) {
|
|
@@ -182,19 +365,36 @@ async function uiConsole({ build, install, checkOnly }) {
|
|
|
182
365
|
}
|
|
183
366
|
|
|
184
367
|
async function main() {
|
|
368
|
+
const rawArgv = process.argv.slice(2);
|
|
185
369
|
const args = minimist(process.argv.slice(2), {
|
|
186
370
|
boolean: ['help', 'build', 'install', 'check', 'full', 'link'],
|
|
187
371
|
alias: { h: 'help' },
|
|
188
372
|
});
|
|
189
373
|
|
|
374
|
+
const cmd = String(args._[0] || '').trim();
|
|
375
|
+
const sub = String(args._[1] || '').trim();
|
|
376
|
+
|
|
190
377
|
if (args.help) {
|
|
191
|
-
|
|
378
|
+
if (cmd === 'account') {
|
|
379
|
+
printAccountHelp();
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
if (cmd === 'ui' && sub === 'console') {
|
|
383
|
+
printUiConsoleHelp();
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
if (cmd === 'xhs') {
|
|
387
|
+
printXhsHelp();
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
printMainHelp();
|
|
192
391
|
return;
|
|
193
392
|
}
|
|
194
393
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
394
|
+
if (!cmd) {
|
|
395
|
+
printMainHelp();
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
198
398
|
|
|
199
399
|
// build:dev - local development mode
|
|
200
400
|
if (cmd === 'build:dev') {
|
|
@@ -226,12 +426,60 @@ async function main() {
|
|
|
226
426
|
return;
|
|
227
427
|
}
|
|
228
428
|
|
|
429
|
+
|
|
430
|
+
// Delegate to ui-console.mjs for test scenarios
|
|
431
|
+
if (cmd === 'ui' && sub === 'test') {
|
|
432
|
+
const uiConsoleScript = path.join(ROOT, 'apps', 'desktop-console', 'entry', 'ui-console.mjs');
|
|
433
|
+
await run(process.execPath, [uiConsoleScript, ...rawArgv.slice(1)]);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (cmd === 'account') {
|
|
437
|
+
const script = path.join(ROOT, 'apps', 'webauto', 'entry', 'account.mjs');
|
|
438
|
+
await run(process.execPath, [script, ...rawArgv.slice(1)]);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (cmd === 'xhs') {
|
|
443
|
+
if (!sub || sub === 'help') {
|
|
444
|
+
printXhsHelp();
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (sub === 'install') {
|
|
449
|
+
const script = path.join(ROOT, 'apps', 'webauto', 'entry', 'xhs-install.mjs');
|
|
450
|
+
await run(process.execPath, [script, ...rawArgv.slice(2)]);
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
if (sub === 'unified' || sub === 'run') {
|
|
455
|
+
const script = path.join(ROOT, 'apps', 'webauto', 'entry', 'xhs-unified.mjs');
|
|
456
|
+
await run(process.execPath, [script, ...rawArgv.slice(2)]);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (sub === 'status') {
|
|
461
|
+
const script = path.join(ROOT, 'apps', 'webauto', 'entry', 'xhs-status.mjs');
|
|
462
|
+
await run(process.execPath, [script, ...rawArgv.slice(2)]);
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if (sub === 'orchestrate') {
|
|
467
|
+
const script = path.join(ROOT, 'apps', 'webauto', 'entry', 'xhs-orchestrate.mjs');
|
|
468
|
+
await run(process.execPath, [script, ...rawArgv.slice(2)]);
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
console.error(`❌ 未知 xhs 子命令: ${sub}`);
|
|
473
|
+
printXhsHelp();
|
|
474
|
+
process.exit(2);
|
|
475
|
+
}
|
|
476
|
+
|
|
229
477
|
if (cmd === 'dev' && sub === 'install-global') {
|
|
230
478
|
console.error('❌ `webauto dev install-global` 已迁移,请使用新的 app 入口与 npm 发布流程。');
|
|
231
479
|
process.exit(2);
|
|
232
480
|
}
|
|
233
481
|
|
|
234
|
-
|
|
482
|
+
printMainHelp();
|
|
235
483
|
process.exit(1);
|
|
236
484
|
}
|
|
237
485
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const runtimeMode = String(process.env.WEBAUTO_RUNTIME_MODE || 'autoscript')
|
|
2
|
+
.trim()
|
|
3
|
+
.toLowerCase();
|
|
4
|
+
const autoscriptProvider = String(process.env.WEBAUTO_BROWSER_PROVIDER || 'camo')
|
|
5
|
+
.trim()
|
|
6
|
+
.toLowerCase();
|
|
7
|
+
const autoscriptKeepalive = process.env.WEBAUTO_AUTOSCRIPT_KEEPALIVE !== '0';
|
|
8
|
+
const autoscriptStopOnExit = process.env.WEBAUTO_AUTOSCRIPT_STOP_ON_EXIT === '1';
|
|
9
|
+
const autoscriptExitOnUnhealthy = process.env.WEBAUTO_AUTOSCRIPT_EXIT_ON_UNHEALTHY === '1';
|
|
10
|
+
function sleep(ms) {
|
|
11
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
12
|
+
}
|
|
13
|
+
function stopBrowserBackendIfRequested() {
|
|
14
|
+
if (!autoscriptStopOnExit)
|
|
15
|
+
return;
|
|
16
|
+
console.log('[webauto] skip backend shutdown (managed by @web-auto/camo)');
|
|
17
|
+
}
|
|
18
|
+
async function runAutoscriptRuntime() {
|
|
19
|
+
process.env.WEBAUTO_BROWSER_PROVIDER = autoscriptProvider;
|
|
20
|
+
const { ensureBrowserService, checkBrowserService } = await import('../../modules/camo-runtime/src/utils/browser-service.mjs');
|
|
21
|
+
console.log(`[webauto] runtime mode=autoscript provider=${autoscriptProvider}`);
|
|
22
|
+
await ensureBrowserService();
|
|
23
|
+
if (!autoscriptKeepalive)
|
|
24
|
+
return;
|
|
25
|
+
let shuttingDown = false;
|
|
26
|
+
const onSignal = (signal) => {
|
|
27
|
+
if (shuttingDown)
|
|
28
|
+
return;
|
|
29
|
+
shuttingDown = true;
|
|
30
|
+
console.log(`[webauto] received ${signal}, shutting down autoscript runtime`);
|
|
31
|
+
stopBrowserBackendIfRequested();
|
|
32
|
+
process.exit(0);
|
|
33
|
+
};
|
|
34
|
+
process.on('SIGINT', () => onSignal('SIGINT'));
|
|
35
|
+
process.on('SIGTERM', () => onSignal('SIGTERM'));
|
|
36
|
+
console.log('[webauto] autoscript backend ready');
|
|
37
|
+
while (!shuttingDown) {
|
|
38
|
+
await sleep(5000);
|
|
39
|
+
const healthy = await checkBrowserService();
|
|
40
|
+
if (!healthy) {
|
|
41
|
+
console.warn('[webauto] autoscript backend health check failed');
|
|
42
|
+
if (autoscriptExitOnUnhealthy) {
|
|
43
|
+
stopBrowserBackendIfRequested();
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function startRuntime() {
|
|
50
|
+
if (runtimeMode === 'unified') {
|
|
51
|
+
console.log('[webauto] runtime mode=unified');
|
|
52
|
+
await import('../../services/unified-api/server.js');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (runtimeMode === 'autoscript') {
|
|
56
|
+
await runAutoscriptRuntime();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`Unsupported WEBAUTO_RUNTIME_MODE: ${runtimeMode}. Allowed: autoscript|unified`);
|
|
60
|
+
}
|
|
61
|
+
void startRuntime().catch((error) => {
|
|
62
|
+
console.error('[webauto] runtime start failed:', error?.message || String(error));
|
|
63
|
+
process.exit(1);
|
|
64
|
+
});
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=server.js.map
|