@intentcomputing/koko-agent-sdk 1.0.1
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 +10 -0
- package/CODE_OF_CONDUCT.md +3 -0
- package/CONTRIBUTING.md +9 -0
- package/LICENSE +21 -0
- package/README.md +65 -0
- package/README.zh-CN.md +50 -0
- package/SECURITY.md +5 -0
- package/android/build.gradle +40 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/cn/intentcomputing/kokoagentsdk/KokoAgentSdkModule.java +1356 -0
- package/android/src/main/java/cn/intentcomputing/kokoagentsdk/KokoAgentSdkPackage.java +23 -0
- package/docs/INTEGRATION.md +168 -0
- package/docs/INTEGRATION.zh-CN.md +140 -0
- package/docs/PRIVACY.md +11 -0
- package/docs/PRIVACY.zh-CN.md +11 -0
- package/docs/PUBLISH.md +11 -0
- package/docs/PUBLISH.zh-CN.md +11 -0
- package/ios/KokoAgentSdk/KokoAgentSdk.h +5 -0
- package/ios/KokoAgentSdk/KokoAgentSdk.m +2464 -0
- package/ios/KokoAgentSdk/KokoOcrBounds.h +20 -0
- package/ios/KokoAgentSdk/KokoScrollBounds.h +21 -0
- package/koko-agent-sdk.podspec +23 -0
- package/lib/commonjs/KokoAgent.js +1427 -0
- package/lib/commonjs/KokoAgent.js.map +1 -0
- package/lib/commonjs/assist/OnDeviceAssist.js +94 -0
- package/lib/commonjs/assist/OnDeviceAssist.js.map +1 -0
- package/lib/commonjs/assist/intentClassify.js +100 -0
- package/lib/commonjs/assist/intentClassify.js.map +1 -0
- package/lib/commonjs/assist/nodeRank.js +120 -0
- package/lib/commonjs/assist/nodeRank.js.map +1 -0
- package/lib/commonjs/assist/ocrTarget.js +135 -0
- package/lib/commonjs/assist/ocrTarget.js.map +1 -0
- package/lib/commonjs/assist/webVisualChange.js +29 -0
- package/lib/commonjs/assist/webVisualChange.js.map +1 -0
- package/lib/commonjs/client/ActionOutcomeUnknownError.js +28 -0
- package/lib/commonjs/client/ActionOutcomeUnknownError.js.map +1 -0
- package/lib/commonjs/client/AgentSession.js +858 -0
- package/lib/commonjs/client/AgentSession.js.map +1 -0
- package/lib/commonjs/client/GatewayClient.js +302 -0
- package/lib/commonjs/client/GatewayClient.js.map +1 -0
- package/lib/commonjs/client/OperationReplayGuard.js +62 -0
- package/lib/commonjs/client/OperationReplayGuard.js.map +1 -0
- package/lib/commonjs/client/RunCheckpoint.js +139 -0
- package/lib/commonjs/client/RunCheckpoint.js.map +1 -0
- package/lib/commonjs/client/loopDetect.js +184 -0
- package/lib/commonjs/client/loopDetect.js.map +1 -0
- package/lib/commonjs/client/recentSearch.js +50 -0
- package/lib/commonjs/client/recentSearch.js.map +1 -0
- package/lib/commonjs/client/walletChoiceGuard.js +18 -0
- package/lib/commonjs/client/walletChoiceGuard.js.map +1 -0
- package/lib/commonjs/client/webResultCategory.js +38 -0
- package/lib/commonjs/client/webResultCategory.js.map +1 -0
- package/lib/commonjs/commercial/AccountStore.js +78 -0
- package/lib/commonjs/commercial/AccountStore.js.map +1 -0
- package/lib/commonjs/commercial/AgentDebug.js +104 -0
- package/lib/commonjs/commercial/AgentDebug.js.map +1 -0
- package/lib/commonjs/commercial/ExecutionGuard.js +53 -0
- package/lib/commonjs/commercial/ExecutionGuard.js.map +1 -0
- package/lib/commonjs/commercial/UsageBus.js +42 -0
- package/lib/commonjs/commercial/UsageBus.js.map +1 -0
- package/lib/commonjs/commercial/branding.js +69 -0
- package/lib/commonjs/commercial/branding.js.map +1 -0
- package/lib/commonjs/commercial/devMode.js +52 -0
- package/lib/commonjs/commercial/devMode.js.map +1 -0
- package/lib/commonjs/commercial/trust.js +69 -0
- package/lib/commonjs/commercial/trust.js.map +1 -0
- package/lib/commonjs/confirmation/gate.js +62 -0
- package/lib/commonjs/confirmation/gate.js.map +1 -0
- package/lib/commonjs/cursor/CursorOverlay.js +141 -0
- package/lib/commonjs/cursor/CursorOverlay.js.map +1 -0
- package/lib/commonjs/cursor/PointerHand.js +51 -0
- package/lib/commonjs/cursor/PointerHand.js.map +1 -0
- package/lib/commonjs/cursor/controller.js +91 -0
- package/lib/commonjs/cursor/controller.js.map +1 -0
- package/lib/commonjs/cursor/pointer.js +49 -0
- package/lib/commonjs/cursor/pointer.js.map +1 -0
- package/lib/commonjs/debug/KokoRemoteSmoke.js +611 -0
- package/lib/commonjs/debug/KokoRemoteSmoke.js.map +1 -0
- package/lib/commonjs/explore/ExplorationGraph.js +418 -0
- package/lib/commonjs/explore/ExplorationGraph.js.map +1 -0
- package/lib/commonjs/explore/bootstrapExplore.js +59 -0
- package/lib/commonjs/explore/bootstrapExplore.js.map +1 -0
- package/lib/commonjs/host/HostActions.js +266 -0
- package/lib/commonjs/host/HostActions.js.map +1 -0
- package/lib/commonjs/i18n/index.js +169 -0
- package/lib/commonjs/i18n/index.js.map +1 -0
- package/lib/commonjs/i18n/runtimeMessages.js +184 -0
- package/lib/commonjs/i18n/runtimeMessages.js.map +1 -0
- package/lib/commonjs/index.js +640 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/native/NativeBridge.js +132 -0
- package/lib/commonjs/native/NativeBridge.js.map +1 -0
- package/lib/commonjs/native/navigationLabel.js +16 -0
- package/lib/commonjs/native/navigationLabel.js.map +1 -0
- package/lib/commonjs/native/normalizeViewTree.js +28 -0
- package/lib/commonjs/native/normalizeViewTree.js.map +1 -0
- package/lib/commonjs/native/pruneOffscreen.js +76 -0
- package/lib/commonjs/native/pruneOffscreen.js.map +1 -0
- package/lib/commonjs/native/scrollViewport.js +69 -0
- package/lib/commonjs/native/scrollViewport.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/privacy/redact.js +108 -0
- package/lib/commonjs/privacy/redact.js.map +1 -0
- package/lib/commonjs/privacy/screenEvidence.js +59 -0
- package/lib/commonjs/privacy/screenEvidence.js.map +1 -0
- package/lib/commonjs/privacy/screenModel.js +404 -0
- package/lib/commonjs/privacy/screenModel.js.map +1 -0
- package/lib/commonjs/privacy/sensitiveScreen.js +58 -0
- package/lib/commonjs/privacy/sensitiveScreen.js.map +1 -0
- package/lib/commonjs/privacy/userGate.js +213 -0
- package/lib/commonjs/privacy/userGate.js.map +1 -0
- package/lib/commonjs/protocol/actions.js +112 -0
- package/lib/commonjs/protocol/actions.js.map +1 -0
- package/lib/commonjs/provider/HostAppearanceStore.js +111 -0
- package/lib/commonjs/provider/HostAppearanceStore.js.map +1 -0
- package/lib/commonjs/provider/KokoProvider.js +81 -0
- package/lib/commonjs/provider/KokoProvider.js.map +1 -0
- package/lib/commonjs/provider/KokoUiContext.js +102 -0
- package/lib/commonjs/provider/KokoUiContext.js.map +1 -0
- package/lib/commonjs/selector/match.js +378 -0
- package/lib/commonjs/selector/match.js.map +1 -0
- package/lib/commonjs/task/TaskStore.js +361 -0
- package/lib/commonjs/task/TaskStore.js.map +1 -0
- package/lib/commonjs/task/types.js +2 -0
- package/lib/commonjs/task/types.js.map +1 -0
- package/lib/commonjs/task/useTaskStore.js +14 -0
- package/lib/commonjs/task/useTaskStore.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/ui/KokoChatSheet.js +885 -0
- package/lib/commonjs/ui/KokoChatSheet.js.map +1 -0
- package/lib/commonjs/ui/KokoComposer.js +161 -0
- package/lib/commonjs/ui/KokoComposer.js.map +1 -0
- package/lib/commonjs/ui/KokoDialogHost.js +254 -0
- package/lib/commonjs/ui/KokoDialogHost.js.map +1 -0
- package/lib/commonjs/ui/KokoEntryButton.js +81 -0
- package/lib/commonjs/ui/KokoEntryButton.js.map +1 -0
- package/lib/commonjs/ui/KokoObserver.js +522 -0
- package/lib/commonjs/ui/KokoObserver.js.map +1 -0
- package/lib/commonjs/ui/KokoOverlayLayer.js +45 -0
- package/lib/commonjs/ui/KokoOverlayLayer.js.map +1 -0
- package/lib/commonjs/ui/KokoSubtitle.js +95 -0
- package/lib/commonjs/ui/KokoSubtitle.js.map +1 -0
- package/lib/commonjs/ui/KokoTaskPanel.js +322 -0
- package/lib/commonjs/ui/KokoTaskPanel.js.map +1 -0
- package/lib/commonjs/ui/hostOverlay.js +126 -0
- package/lib/commonjs/ui/hostOverlay.js.map +1 -0
- package/lib/commonjs/ui/icons.js +132 -0
- package/lib/commonjs/ui/icons.js.map +1 -0
- package/lib/commonjs/ui/progressChrome.js +66 -0
- package/lib/commonjs/ui/progressChrome.js.map +1 -0
- package/lib/commonjs/ui/safeArea.js +96 -0
- package/lib/commonjs/ui/safeArea.js.map +1 -0
- package/lib/commonjs/ui/useOverlayOrigin.js +40 -0
- package/lib/commonjs/ui/useOverlayOrigin.js.map +1 -0
- package/lib/module/KokoAgent.js +1418 -0
- package/lib/module/KokoAgent.js.map +1 -0
- package/lib/module/assist/OnDeviceAssist.js +89 -0
- package/lib/module/assist/OnDeviceAssist.js.map +1 -0
- package/lib/module/assist/intentClassify.js +95 -0
- package/lib/module/assist/intentClassify.js.map +1 -0
- package/lib/module/assist/nodeRank.js +115 -0
- package/lib/module/assist/nodeRank.js.map +1 -0
- package/lib/module/assist/ocrTarget.js +123 -0
- package/lib/module/assist/ocrTarget.js.map +1 -0
- package/lib/module/assist/webVisualChange.js +24 -0
- package/lib/module/assist/webVisualChange.js.map +1 -0
- package/lib/module/client/ActionOutcomeUnknownError.js +23 -0
- package/lib/module/client/ActionOutcomeUnknownError.js.map +1 -0
- package/lib/module/client/AgentSession.js +854 -0
- package/lib/module/client/AgentSession.js.map +1 -0
- package/lib/module/client/GatewayClient.js +293 -0
- package/lib/module/client/GatewayClient.js.map +1 -0
- package/lib/module/client/OperationReplayGuard.js +58 -0
- package/lib/module/client/OperationReplayGuard.js.map +1 -0
- package/lib/module/client/RunCheckpoint.js +135 -0
- package/lib/module/client/RunCheckpoint.js.map +1 -0
- package/lib/module/client/loopDetect.js +177 -0
- package/lib/module/client/loopDetect.js.map +1 -0
- package/lib/module/client/recentSearch.js +46 -0
- package/lib/module/client/recentSearch.js.map +1 -0
- package/lib/module/client/walletChoiceGuard.js +14 -0
- package/lib/module/client/walletChoiceGuard.js.map +1 -0
- package/lib/module/client/webResultCategory.js +34 -0
- package/lib/module/client/webResultCategory.js.map +1 -0
- package/lib/module/commercial/AccountStore.js +75 -0
- package/lib/module/commercial/AccountStore.js.map +1 -0
- package/lib/module/commercial/AgentDebug.js +99 -0
- package/lib/module/commercial/AgentDebug.js.map +1 -0
- package/lib/module/commercial/ExecutionGuard.js +49 -0
- package/lib/module/commercial/ExecutionGuard.js.map +1 -0
- package/lib/module/commercial/UsageBus.js +38 -0
- package/lib/module/commercial/UsageBus.js.map +1 -0
- package/lib/module/commercial/branding.js +63 -0
- package/lib/module/commercial/branding.js.map +1 -0
- package/lib/module/commercial/devMode.js +45 -0
- package/lib/module/commercial/devMode.js.map +1 -0
- package/lib/module/commercial/trust.js +62 -0
- package/lib/module/commercial/trust.js.map +1 -0
- package/lib/module/confirmation/gate.js +54 -0
- package/lib/module/confirmation/gate.js.map +1 -0
- package/lib/module/cursor/CursorOverlay.js +136 -0
- package/lib/module/cursor/CursorOverlay.js.map +1 -0
- package/lib/module/cursor/PointerHand.js +47 -0
- package/lib/module/cursor/PointerHand.js.map +1 -0
- package/lib/module/cursor/controller.js +87 -0
- package/lib/module/cursor/controller.js.map +1 -0
- package/lib/module/cursor/pointer.js +45 -0
- package/lib/module/cursor/pointer.js.map +1 -0
- package/lib/module/debug/KokoRemoteSmoke.js +608 -0
- package/lib/module/debug/KokoRemoteSmoke.js.map +1 -0
- package/lib/module/explore/ExplorationGraph.js +406 -0
- package/lib/module/explore/ExplorationGraph.js.map +1 -0
- package/lib/module/explore/bootstrapExplore.js +55 -0
- package/lib/module/explore/bootstrapExplore.js.map +1 -0
- package/lib/module/host/HostActions.js +255 -0
- package/lib/module/host/HostActions.js.map +1 -0
- package/lib/module/i18n/index.js +159 -0
- package/lib/module/i18n/index.js.map +1 -0
- package/lib/module/i18n/runtimeMessages.js +180 -0
- package/lib/module/i18n/runtimeMessages.js.map +1 -0
- package/lib/module/index.js +44 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/native/NativeBridge.js +128 -0
- package/lib/module/native/NativeBridge.js.map +1 -0
- package/lib/module/native/navigationLabel.js +12 -0
- package/lib/module/native/navigationLabel.js.map +1 -0
- package/lib/module/native/normalizeViewTree.js +25 -0
- package/lib/module/native/normalizeViewTree.js.map +1 -0
- package/lib/module/native/pruneOffscreen.js +72 -0
- package/lib/module/native/pruneOffscreen.js.map +1 -0
- package/lib/module/native/scrollViewport.js +63 -0
- package/lib/module/native/scrollViewport.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/privacy/redact.js +103 -0
- package/lib/module/privacy/redact.js.map +1 -0
- package/lib/module/privacy/screenEvidence.js +50 -0
- package/lib/module/privacy/screenEvidence.js.map +1 -0
- package/lib/module/privacy/screenModel.js +397 -0
- package/lib/module/privacy/screenModel.js.map +1 -0
- package/lib/module/privacy/sensitiveScreen.js +52 -0
- package/lib/module/privacy/sensitiveScreen.js.map +1 -0
- package/lib/module/privacy/userGate.js +202 -0
- package/lib/module/privacy/userGate.js.map +1 -0
- package/lib/module/protocol/actions.js +108 -0
- package/lib/module/protocol/actions.js.map +1 -0
- package/lib/module/provider/HostAppearanceStore.js +101 -0
- package/lib/module/provider/HostAppearanceStore.js.map +1 -0
- package/lib/module/provider/KokoProvider.js +74 -0
- package/lib/module/provider/KokoProvider.js.map +1 -0
- package/lib/module/provider/KokoUiContext.js +96 -0
- package/lib/module/provider/KokoUiContext.js.map +1 -0
- package/lib/module/selector/match.js +366 -0
- package/lib/module/selector/match.js.map +1 -0
- package/lib/module/task/TaskStore.js +356 -0
- package/lib/module/task/TaskStore.js.map +1 -0
- package/lib/module/task/types.js +2 -0
- package/lib/module/task/types.js.map +1 -0
- package/lib/module/task/useTaskStore.js +10 -0
- package/lib/module/task/useTaskStore.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/ui/KokoChatSheet.js +879 -0
- package/lib/module/ui/KokoChatSheet.js.map +1 -0
- package/lib/module/ui/KokoComposer.js +155 -0
- package/lib/module/ui/KokoComposer.js.map +1 -0
- package/lib/module/ui/KokoDialogHost.js +247 -0
- package/lib/module/ui/KokoDialogHost.js.map +1 -0
- package/lib/module/ui/KokoEntryButton.js +74 -0
- package/lib/module/ui/KokoEntryButton.js.map +1 -0
- package/lib/module/ui/KokoObserver.js +516 -0
- package/lib/module/ui/KokoObserver.js.map +1 -0
- package/lib/module/ui/KokoOverlayLayer.js +39 -0
- package/lib/module/ui/KokoOverlayLayer.js.map +1 -0
- package/lib/module/ui/KokoSubtitle.js +90 -0
- package/lib/module/ui/KokoSubtitle.js.map +1 -0
- package/lib/module/ui/KokoTaskPanel.js +316 -0
- package/lib/module/ui/KokoTaskPanel.js.map +1 -0
- package/lib/module/ui/hostOverlay.js +120 -0
- package/lib/module/ui/hostOverlay.js.map +1 -0
- package/lib/module/ui/icons.js +124 -0
- package/lib/module/ui/icons.js.map +1 -0
- package/lib/module/ui/progressChrome.js +58 -0
- package/lib/module/ui/progressChrome.js.map +1 -0
- package/lib/module/ui/safeArea.js +92 -0
- package/lib/module/ui/safeArea.js.map +1 -0
- package/lib/module/ui/useOverlayOrigin.js +36 -0
- package/lib/module/ui/useOverlayOrigin.js.map +1 -0
- package/lib/typescript/commonjs/KokoAgent.d.ts +167 -0
- package/lib/typescript/commonjs/KokoAgent.d.ts.map +1 -0
- package/lib/typescript/commonjs/assist/OnDeviceAssist.d.ts +31 -0
- package/lib/typescript/commonjs/assist/OnDeviceAssist.d.ts.map +1 -0
- package/lib/typescript/commonjs/assist/intentClassify.d.ts +18 -0
- package/lib/typescript/commonjs/assist/intentClassify.d.ts.map +1 -0
- package/lib/typescript/commonjs/assist/nodeRank.d.ts +32 -0
- package/lib/typescript/commonjs/assist/nodeRank.d.ts.map +1 -0
- package/lib/typescript/commonjs/assist/ocrTarget.d.ts +25 -0
- package/lib/typescript/commonjs/assist/ocrTarget.d.ts.map +1 -0
- package/lib/typescript/commonjs/assist/webVisualChange.d.ts +6 -0
- package/lib/typescript/commonjs/assist/webVisualChange.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/ActionOutcomeUnknownError.d.ts +13 -0
- package/lib/typescript/commonjs/client/ActionOutcomeUnknownError.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/AgentSession.d.ts +56 -0
- package/lib/typescript/commonjs/client/AgentSession.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/GatewayClient.d.ts +149 -0
- package/lib/typescript/commonjs/client/GatewayClient.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/OperationReplayGuard.d.ts +13 -0
- package/lib/typescript/commonjs/client/OperationReplayGuard.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/RunCheckpoint.d.ts +57 -0
- package/lib/typescript/commonjs/client/RunCheckpoint.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/loopDetect.d.ts +15 -0
- package/lib/typescript/commonjs/client/loopDetect.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/recentSearch.d.ts +5 -0
- package/lib/typescript/commonjs/client/recentSearch.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/walletChoiceGuard.d.ts +4 -0
- package/lib/typescript/commonjs/client/walletChoiceGuard.d.ts.map +1 -0
- package/lib/typescript/commonjs/client/webResultCategory.d.ts +5 -0
- package/lib/typescript/commonjs/client/webResultCategory.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/AccountStore.d.ts +17 -0
- package/lib/typescript/commonjs/commercial/AccountStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/AgentDebug.d.ts +25 -0
- package/lib/typescript/commonjs/commercial/AgentDebug.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/ExecutionGuard.d.ts +18 -0
- package/lib/typescript/commonjs/commercial/ExecutionGuard.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/UsageBus.d.ts +18 -0
- package/lib/typescript/commonjs/commercial/UsageBus.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/branding.d.ts +25 -0
- package/lib/typescript/commonjs/commercial/branding.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/devMode.d.ts +26 -0
- package/lib/typescript/commonjs/commercial/devMode.d.ts.map +1 -0
- package/lib/typescript/commonjs/commercial/trust.d.ts +21 -0
- package/lib/typescript/commonjs/commercial/trust.d.ts.map +1 -0
- package/lib/typescript/commonjs/confirmation/gate.d.ts +18 -0
- package/lib/typescript/commonjs/confirmation/gate.d.ts.map +1 -0
- package/lib/typescript/commonjs/cursor/CursorOverlay.d.ts +13 -0
- package/lib/typescript/commonjs/cursor/CursorOverlay.d.ts.map +1 -0
- package/lib/typescript/commonjs/cursor/PointerHand.d.ts +16 -0
- package/lib/typescript/commonjs/cursor/PointerHand.d.ts.map +1 -0
- package/lib/typescript/commonjs/cursor/controller.d.ts +30 -0
- package/lib/typescript/commonjs/cursor/controller.d.ts.map +1 -0
- package/lib/typescript/commonjs/cursor/pointer.d.ts +23 -0
- package/lib/typescript/commonjs/cursor/pointer.d.ts.map +1 -0
- package/lib/typescript/commonjs/debug/KokoRemoteSmoke.d.ts +96 -0
- package/lib/typescript/commonjs/debug/KokoRemoteSmoke.d.ts.map +1 -0
- package/lib/typescript/commonjs/explore/ExplorationGraph.d.ts +96 -0
- package/lib/typescript/commonjs/explore/ExplorationGraph.d.ts.map +1 -0
- package/lib/typescript/commonjs/explore/bootstrapExplore.d.ts +40 -0
- package/lib/typescript/commonjs/explore/bootstrapExplore.d.ts.map +1 -0
- package/lib/typescript/commonjs/host/HostActions.d.ts +101 -0
- package/lib/typescript/commonjs/host/HostActions.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/index.d.ts +20 -0
- package/lib/typescript/commonjs/i18n/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/runtimeMessages.d.ts +178 -0
- package/lib/typescript/commonjs/i18n/runtimeMessages.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +66 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/NativeBridge.d.ts +70 -0
- package/lib/typescript/commonjs/native/NativeBridge.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/navigationLabel.d.ts +4 -0
- package/lib/typescript/commonjs/native/navigationLabel.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/normalizeViewTree.d.ts +4 -0
- package/lib/typescript/commonjs/native/normalizeViewTree.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/pruneOffscreen.d.ts +3 -0
- package/lib/typescript/commonjs/native/pruneOffscreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/scrollViewport.d.ts +13 -0
- package/lib/typescript/commonjs/native/scrollViewport.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/privacy/redact.d.ts +9 -0
- package/lib/typescript/commonjs/privacy/redact.d.ts.map +1 -0
- package/lib/typescript/commonjs/privacy/screenEvidence.d.ts +14 -0
- package/lib/typescript/commonjs/privacy/screenEvidence.d.ts.map +1 -0
- package/lib/typescript/commonjs/privacy/screenModel.d.ts +26 -0
- package/lib/typescript/commonjs/privacy/screenModel.d.ts.map +1 -0
- package/lib/typescript/commonjs/privacy/sensitiveScreen.d.ts +8 -0
- package/lib/typescript/commonjs/privacy/sensitiveScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/privacy/userGate.d.ts +58 -0
- package/lib/typescript/commonjs/privacy/userGate.d.ts.map +1 -0
- package/lib/typescript/commonjs/protocol/actions.d.ts +7 -0
- package/lib/typescript/commonjs/protocol/actions.d.ts.map +1 -0
- package/lib/typescript/commonjs/provider/HostAppearanceStore.d.ts +64 -0
- package/lib/typescript/commonjs/provider/HostAppearanceStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/provider/KokoProvider.d.ts +39 -0
- package/lib/typescript/commonjs/provider/KokoProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/provider/KokoUiContext.d.ts +22 -0
- package/lib/typescript/commonjs/provider/KokoUiContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/selector/match.d.ts +27 -0
- package/lib/typescript/commonjs/selector/match.d.ts.map +1 -0
- package/lib/typescript/commonjs/task/TaskStore.d.ts +65 -0
- package/lib/typescript/commonjs/task/TaskStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/task/types.d.ts +66 -0
- package/lib/typescript/commonjs/task/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/task/useTaskStore.d.ts +3 -0
- package/lib/typescript/commonjs/task/useTaskStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/types.d.ts +372 -0
- package/lib/typescript/commonjs/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoChatSheet.d.ts +8 -0
- package/lib/typescript/commonjs/ui/KokoChatSheet.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoComposer.d.ts +13 -0
- package/lib/typescript/commonjs/ui/KokoComposer.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoDialogHost.d.ts +32 -0
- package/lib/typescript/commonjs/ui/KokoDialogHost.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoEntryButton.d.ts +18 -0
- package/lib/typescript/commonjs/ui/KokoEntryButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoObserver.d.ts +13 -0
- package/lib/typescript/commonjs/ui/KokoObserver.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoOverlayLayer.d.ts +35 -0
- package/lib/typescript/commonjs/ui/KokoOverlayLayer.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoSubtitle.d.ts +7 -0
- package/lib/typescript/commonjs/ui/KokoSubtitle.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/KokoTaskPanel.d.ts +7 -0
- package/lib/typescript/commonjs/ui/KokoTaskPanel.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hostOverlay.d.ts +28 -0
- package/lib/typescript/commonjs/ui/hostOverlay.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/icons.d.ts +26 -0
- package/lib/typescript/commonjs/ui/icons.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/progressChrome.d.ts +21 -0
- package/lib/typescript/commonjs/ui/progressChrome.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/safeArea.d.ts +12 -0
- package/lib/typescript/commonjs/ui/safeArea.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/useOverlayOrigin.d.ts +22 -0
- package/lib/typescript/commonjs/ui/useOverlayOrigin.d.ts.map +1 -0
- package/lib/typescript/module/KokoAgent.d.ts +167 -0
- package/lib/typescript/module/KokoAgent.d.ts.map +1 -0
- package/lib/typescript/module/assist/OnDeviceAssist.d.ts +31 -0
- package/lib/typescript/module/assist/OnDeviceAssist.d.ts.map +1 -0
- package/lib/typescript/module/assist/intentClassify.d.ts +18 -0
- package/lib/typescript/module/assist/intentClassify.d.ts.map +1 -0
- package/lib/typescript/module/assist/nodeRank.d.ts +32 -0
- package/lib/typescript/module/assist/nodeRank.d.ts.map +1 -0
- package/lib/typescript/module/assist/ocrTarget.d.ts +25 -0
- package/lib/typescript/module/assist/ocrTarget.d.ts.map +1 -0
- package/lib/typescript/module/assist/webVisualChange.d.ts +6 -0
- package/lib/typescript/module/assist/webVisualChange.d.ts.map +1 -0
- package/lib/typescript/module/client/ActionOutcomeUnknownError.d.ts +13 -0
- package/lib/typescript/module/client/ActionOutcomeUnknownError.d.ts.map +1 -0
- package/lib/typescript/module/client/AgentSession.d.ts +56 -0
- package/lib/typescript/module/client/AgentSession.d.ts.map +1 -0
- package/lib/typescript/module/client/GatewayClient.d.ts +149 -0
- package/lib/typescript/module/client/GatewayClient.d.ts.map +1 -0
- package/lib/typescript/module/client/OperationReplayGuard.d.ts +13 -0
- package/lib/typescript/module/client/OperationReplayGuard.d.ts.map +1 -0
- package/lib/typescript/module/client/RunCheckpoint.d.ts +57 -0
- package/lib/typescript/module/client/RunCheckpoint.d.ts.map +1 -0
- package/lib/typescript/module/client/loopDetect.d.ts +15 -0
- package/lib/typescript/module/client/loopDetect.d.ts.map +1 -0
- package/lib/typescript/module/client/recentSearch.d.ts +5 -0
- package/lib/typescript/module/client/recentSearch.d.ts.map +1 -0
- package/lib/typescript/module/client/walletChoiceGuard.d.ts +4 -0
- package/lib/typescript/module/client/walletChoiceGuard.d.ts.map +1 -0
- package/lib/typescript/module/client/webResultCategory.d.ts +5 -0
- package/lib/typescript/module/client/webResultCategory.d.ts.map +1 -0
- package/lib/typescript/module/commercial/AccountStore.d.ts +17 -0
- package/lib/typescript/module/commercial/AccountStore.d.ts.map +1 -0
- package/lib/typescript/module/commercial/AgentDebug.d.ts +25 -0
- package/lib/typescript/module/commercial/AgentDebug.d.ts.map +1 -0
- package/lib/typescript/module/commercial/ExecutionGuard.d.ts +18 -0
- package/lib/typescript/module/commercial/ExecutionGuard.d.ts.map +1 -0
- package/lib/typescript/module/commercial/UsageBus.d.ts +18 -0
- package/lib/typescript/module/commercial/UsageBus.d.ts.map +1 -0
- package/lib/typescript/module/commercial/branding.d.ts +25 -0
- package/lib/typescript/module/commercial/branding.d.ts.map +1 -0
- package/lib/typescript/module/commercial/devMode.d.ts +26 -0
- package/lib/typescript/module/commercial/devMode.d.ts.map +1 -0
- package/lib/typescript/module/commercial/trust.d.ts +21 -0
- package/lib/typescript/module/commercial/trust.d.ts.map +1 -0
- package/lib/typescript/module/confirmation/gate.d.ts +18 -0
- package/lib/typescript/module/confirmation/gate.d.ts.map +1 -0
- package/lib/typescript/module/cursor/CursorOverlay.d.ts +13 -0
- package/lib/typescript/module/cursor/CursorOverlay.d.ts.map +1 -0
- package/lib/typescript/module/cursor/PointerHand.d.ts +16 -0
- package/lib/typescript/module/cursor/PointerHand.d.ts.map +1 -0
- package/lib/typescript/module/cursor/controller.d.ts +30 -0
- package/lib/typescript/module/cursor/controller.d.ts.map +1 -0
- package/lib/typescript/module/cursor/pointer.d.ts +23 -0
- package/lib/typescript/module/cursor/pointer.d.ts.map +1 -0
- package/lib/typescript/module/debug/KokoRemoteSmoke.d.ts +96 -0
- package/lib/typescript/module/debug/KokoRemoteSmoke.d.ts.map +1 -0
- package/lib/typescript/module/explore/ExplorationGraph.d.ts +96 -0
- package/lib/typescript/module/explore/ExplorationGraph.d.ts.map +1 -0
- package/lib/typescript/module/explore/bootstrapExplore.d.ts +40 -0
- package/lib/typescript/module/explore/bootstrapExplore.d.ts.map +1 -0
- package/lib/typescript/module/host/HostActions.d.ts +101 -0
- package/lib/typescript/module/host/HostActions.d.ts.map +1 -0
- package/lib/typescript/module/i18n/index.d.ts +20 -0
- package/lib/typescript/module/i18n/index.d.ts.map +1 -0
- package/lib/typescript/module/i18n/runtimeMessages.d.ts +178 -0
- package/lib/typescript/module/i18n/runtimeMessages.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +66 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/native/NativeBridge.d.ts +70 -0
- package/lib/typescript/module/native/NativeBridge.d.ts.map +1 -0
- package/lib/typescript/module/native/navigationLabel.d.ts +4 -0
- package/lib/typescript/module/native/navigationLabel.d.ts.map +1 -0
- package/lib/typescript/module/native/normalizeViewTree.d.ts +4 -0
- package/lib/typescript/module/native/normalizeViewTree.d.ts.map +1 -0
- package/lib/typescript/module/native/pruneOffscreen.d.ts +3 -0
- package/lib/typescript/module/native/pruneOffscreen.d.ts.map +1 -0
- package/lib/typescript/module/native/scrollViewport.d.ts +13 -0
- package/lib/typescript/module/native/scrollViewport.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/privacy/redact.d.ts +9 -0
- package/lib/typescript/module/privacy/redact.d.ts.map +1 -0
- package/lib/typescript/module/privacy/screenEvidence.d.ts +14 -0
- package/lib/typescript/module/privacy/screenEvidence.d.ts.map +1 -0
- package/lib/typescript/module/privacy/screenModel.d.ts +26 -0
- package/lib/typescript/module/privacy/screenModel.d.ts.map +1 -0
- package/lib/typescript/module/privacy/sensitiveScreen.d.ts +8 -0
- package/lib/typescript/module/privacy/sensitiveScreen.d.ts.map +1 -0
- package/lib/typescript/module/privacy/userGate.d.ts +58 -0
- package/lib/typescript/module/privacy/userGate.d.ts.map +1 -0
- package/lib/typescript/module/protocol/actions.d.ts +7 -0
- package/lib/typescript/module/protocol/actions.d.ts.map +1 -0
- package/lib/typescript/module/provider/HostAppearanceStore.d.ts +64 -0
- package/lib/typescript/module/provider/HostAppearanceStore.d.ts.map +1 -0
- package/lib/typescript/module/provider/KokoProvider.d.ts +39 -0
- package/lib/typescript/module/provider/KokoProvider.d.ts.map +1 -0
- package/lib/typescript/module/provider/KokoUiContext.d.ts +22 -0
- package/lib/typescript/module/provider/KokoUiContext.d.ts.map +1 -0
- package/lib/typescript/module/selector/match.d.ts +27 -0
- package/lib/typescript/module/selector/match.d.ts.map +1 -0
- package/lib/typescript/module/task/TaskStore.d.ts +65 -0
- package/lib/typescript/module/task/TaskStore.d.ts.map +1 -0
- package/lib/typescript/module/task/types.d.ts +66 -0
- package/lib/typescript/module/task/types.d.ts.map +1 -0
- package/lib/typescript/module/task/useTaskStore.d.ts +3 -0
- package/lib/typescript/module/task/useTaskStore.d.ts.map +1 -0
- package/lib/typescript/module/types.d.ts +372 -0
- package/lib/typescript/module/types.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoChatSheet.d.ts +8 -0
- package/lib/typescript/module/ui/KokoChatSheet.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoComposer.d.ts +13 -0
- package/lib/typescript/module/ui/KokoComposer.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoDialogHost.d.ts +32 -0
- package/lib/typescript/module/ui/KokoDialogHost.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoEntryButton.d.ts +18 -0
- package/lib/typescript/module/ui/KokoEntryButton.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoObserver.d.ts +13 -0
- package/lib/typescript/module/ui/KokoObserver.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoOverlayLayer.d.ts +35 -0
- package/lib/typescript/module/ui/KokoOverlayLayer.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoSubtitle.d.ts +7 -0
- package/lib/typescript/module/ui/KokoSubtitle.d.ts.map +1 -0
- package/lib/typescript/module/ui/KokoTaskPanel.d.ts +7 -0
- package/lib/typescript/module/ui/KokoTaskPanel.d.ts.map +1 -0
- package/lib/typescript/module/ui/hostOverlay.d.ts +28 -0
- package/lib/typescript/module/ui/hostOverlay.d.ts.map +1 -0
- package/lib/typescript/module/ui/icons.d.ts +26 -0
- package/lib/typescript/module/ui/icons.d.ts.map +1 -0
- package/lib/typescript/module/ui/progressChrome.d.ts +21 -0
- package/lib/typescript/module/ui/progressChrome.d.ts.map +1 -0
- package/lib/typescript/module/ui/safeArea.d.ts +12 -0
- package/lib/typescript/module/ui/safeArea.d.ts.map +1 -0
- package/lib/typescript/module/ui/useOverlayOrigin.d.ts +22 -0
- package/lib/typescript/module/ui/useOverlayOrigin.d.ts.map +1 -0
- package/package.json +153 -0
- package/react-native.config.js +12 -0
- package/src/KokoAgent.ts +1415 -0
- package/src/assist/OnDeviceAssist.ts +133 -0
- package/src/assist/intentClassify.ts +122 -0
- package/src/assist/nodeRank.ts +167 -0
- package/src/assist/ocrTarget.ts +146 -0
- package/src/assist/webVisualChange.ts +24 -0
- package/src/client/ActionOutcomeUnknownError.ts +18 -0
- package/src/client/AgentSession.ts +952 -0
- package/src/client/GatewayClient.ts +439 -0
- package/src/client/OperationReplayGuard.ts +61 -0
- package/src/client/RunCheckpoint.ts +154 -0
- package/src/client/loopDetect.ts +213 -0
- package/src/client/recentSearch.ts +47 -0
- package/src/client/walletChoiceGuard.ts +15 -0
- package/src/client/webResultCategory.ts +28 -0
- package/src/commercial/AccountStore.ts +85 -0
- package/src/commercial/AgentDebug.ts +142 -0
- package/src/commercial/ExecutionGuard.ts +67 -0
- package/src/commercial/UsageBus.ts +44 -0
- package/src/commercial/branding.ts +97 -0
- package/src/commercial/devMode.ts +48 -0
- package/src/commercial/trust.ts +67 -0
- package/src/confirmation/gate.ts +82 -0
- package/src/cursor/CursorOverlay.tsx +138 -0
- package/src/cursor/PointerHand.tsx +49 -0
- package/src/cursor/controller.ts +98 -0
- package/src/cursor/pointer.ts +40 -0
- package/src/debug/KokoRemoteSmoke.tsx +561 -0
- package/src/explore/ExplorationGraph.ts +518 -0
- package/src/explore/bootstrapExplore.ts +89 -0
- package/src/host/HostActions.ts +349 -0
- package/src/i18n/index.ts +229 -0
- package/src/i18n/runtimeMessages.ts +180 -0
- package/src/index.ts +203 -0
- package/src/native/NativeBridge.ts +207 -0
- package/src/native/navigationLabel.ts +11 -0
- package/src/native/normalizeViewTree.ts +16 -0
- package/src/native/pruneOffscreen.ts +72 -0
- package/src/native/scrollViewport.ts +51 -0
- package/src/privacy/redact.ts +115 -0
- package/src/privacy/screenEvidence.ts +55 -0
- package/src/privacy/screenModel.ts +504 -0
- package/src/privacy/sensitiveScreen.ts +55 -0
- package/src/privacy/userGate.ts +233 -0
- package/src/protocol/actions.ts +66 -0
- package/src/provider/HostAppearanceStore.ts +148 -0
- package/src/provider/KokoProvider.tsx +118 -0
- package/src/provider/KokoUiContext.tsx +162 -0
- package/src/selector/match.ts +417 -0
- package/src/task/TaskStore.ts +387 -0
- package/src/task/types.ts +82 -0
- package/src/task/useTaskStore.ts +9 -0
- package/src/types.ts +318 -0
- package/src/ui/KokoChatSheet.tsx +930 -0
- package/src/ui/KokoComposer.tsx +174 -0
- package/src/ui/KokoDialogHost.tsx +249 -0
- package/src/ui/KokoEntryButton.tsx +74 -0
- package/src/ui/KokoObserver.tsx +587 -0
- package/src/ui/KokoOverlayLayer.tsx +53 -0
- package/src/ui/KokoSubtitle.tsx +80 -0
- package/src/ui/KokoTaskPanel.tsx +299 -0
- package/src/ui/hostOverlay.tsx +148 -0
- package/src/ui/icons.tsx +145 -0
- package/src/ui/progressChrome.ts +73 -0
- package/src/ui/safeArea.ts +95 -0
- package/src/ui/useOverlayOrigin.ts +29 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.NativeBridge = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _pruneOffscreen = require("./pruneOffscreen.js");
|
|
9
|
+
var _normalizeViewTree = require("./normalizeViewTree.js");
|
|
10
|
+
const LINKING_ERROR = `KokoAgentSdk native module is not linked. ` + `Rebuild the host app after adding @intentcomputing/koko-agent-sdk ` + `(iOS: pod install; Android: gradle sync). Platform=${_reactNative.Platform.OS}`;
|
|
11
|
+
const Native = _reactNative.NativeModules.KokoAgentSdk;
|
|
12
|
+
function getNative() {
|
|
13
|
+
if (!Native) {
|
|
14
|
+
throw new Error(LINKING_ERROR);
|
|
15
|
+
}
|
|
16
|
+
return Native;
|
|
17
|
+
}
|
|
18
|
+
const NativeBridge = exports.NativeBridge = {
|
|
19
|
+
isAvailable() {
|
|
20
|
+
return !!Native;
|
|
21
|
+
},
|
|
22
|
+
/** iOS bundle identifier / Android applicationId. Empty when native module is missing. */
|
|
23
|
+
hostAppId() {
|
|
24
|
+
const raw = Native?.hostAppId;
|
|
25
|
+
return typeof raw === "string" ? raw.trim() : "";
|
|
26
|
+
},
|
|
27
|
+
async dump(options = {}) {
|
|
28
|
+
const raw = await getNative().dumpViewTree({
|
|
29
|
+
maxDepth: options.maxDepth ?? 60,
|
|
30
|
+
skipInvisible: options.skipInvisible ?? true
|
|
31
|
+
});
|
|
32
|
+
const root = (0, _normalizeViewTree.normalizeViewTree)(raw);
|
|
33
|
+
// Every consumer — ranking, selectors, the user gate — reads the tree from
|
|
34
|
+
// here, so offscreen nodes have to go before any of them see it.
|
|
35
|
+
return options.skipInvisible === false ? root : (0, _pruneOffscreen.pruneOffscreen)(root);
|
|
36
|
+
},
|
|
37
|
+
tap(point) {
|
|
38
|
+
return getNative().dispatchTap(point.x, point.y);
|
|
39
|
+
},
|
|
40
|
+
/** Public capability flags only; never requests account data. */
|
|
41
|
+
async inspectWebWalletProvider(point) {
|
|
42
|
+
const native = getNative();
|
|
43
|
+
if (typeof native.inspectWebWalletProvider !== 'function') return null;
|
|
44
|
+
return native.inspectWebWalletProvider(point.x, point.y);
|
|
45
|
+
},
|
|
46
|
+
swipe(from, to, durationMs) {
|
|
47
|
+
return getNative().dispatchSwipe(from.x, from.y, to.x, to.y, durationMs);
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* Two-finger pinch at center. scale>1 zoom in, scale<1 zoom out.
|
|
51
|
+
* Falls back to error if native build lacks dispatchPinch.
|
|
52
|
+
*/
|
|
53
|
+
pinch(center, scale, durationMs) {
|
|
54
|
+
const n = getNative();
|
|
55
|
+
if (typeof n.dispatchPinch !== 'function') {
|
|
56
|
+
throw new Error('KokoAgentSdk: dispatchPinch unavailable — rebuild the host app with the latest native module');
|
|
57
|
+
}
|
|
58
|
+
return n.dispatchPinch(center.x, center.y, scale, durationMs);
|
|
59
|
+
},
|
|
60
|
+
/** Invoke a presented system alert action by button title. */
|
|
61
|
+
async invokeAlertAction(title) {
|
|
62
|
+
const n = getNative();
|
|
63
|
+
if (typeof n.invokeAlertAction !== 'function') return false;
|
|
64
|
+
await n.invokeAlertAction(title);
|
|
65
|
+
return true;
|
|
66
|
+
},
|
|
67
|
+
typeText(text, clear) {
|
|
68
|
+
return getNative().typeText(text, clear);
|
|
69
|
+
},
|
|
70
|
+
focusNode(nodeId) {
|
|
71
|
+
return getNative().focusNode(nodeId);
|
|
72
|
+
},
|
|
73
|
+
/** Ensure software keyboard / first responder at a screen point (TextInput). */
|
|
74
|
+
focusAt(point) {
|
|
75
|
+
return getNative().focusAt(point.x, point.y);
|
|
76
|
+
},
|
|
77
|
+
async dismissKeyboard() {
|
|
78
|
+
const n = getNative();
|
|
79
|
+
if (typeof n.dismissKeyboard === 'function') {
|
|
80
|
+
await n.dismissKeyboard();
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
async scrollIntoView(_point) {
|
|
84
|
+
// No-op: auto scroll-into-view before tap scrolled page-level ScrollViews
|
|
85
|
+
// (home / onboarding) and looked like a secret swipe. Callers that need
|
|
86
|
+
// scrolling must use an explicit swipe gesture instead.
|
|
87
|
+
return;
|
|
88
|
+
},
|
|
89
|
+
screenshot(options = {}) {
|
|
90
|
+
return getNative().captureScreenshot({
|
|
91
|
+
hideOverlays: options.hideOverlays ?? true
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* On-device screen OCR via Vision (iOS) or an opted-in ML Kit host (Android).
|
|
96
|
+
* Soft-fails to empty tokens when the native method is missing.
|
|
97
|
+
*/
|
|
98
|
+
async recognizeScreenText(options = {}) {
|
|
99
|
+
const n = getNative();
|
|
100
|
+
if (typeof n.recognizeScreenText !== 'function') {
|
|
101
|
+
return {
|
|
102
|
+
tokens: [],
|
|
103
|
+
texts: [],
|
|
104
|
+
backend: 'unavailable'
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const raw = await n.recognizeScreenText({
|
|
108
|
+
hideOverlays: options.hideOverlays ?? true,
|
|
109
|
+
maxTokens: options.maxTokens ?? 24,
|
|
110
|
+
languages: options.languages
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
tokens: Array.isArray(raw?.tokens) ? raw.tokens.map(String) : [],
|
|
114
|
+
texts: Array.isArray(raw?.texts) ? raw.texts.map(t => {
|
|
115
|
+
const f = t?.frame;
|
|
116
|
+
const frame = f && [f.x, f.y, f.width, f.height].every(v => Number.isFinite(Number(v))) ? {
|
|
117
|
+
x: Number(f.x),
|
|
118
|
+
y: Number(f.y),
|
|
119
|
+
width: Number(f.width),
|
|
120
|
+
height: Number(f.height)
|
|
121
|
+
} : undefined;
|
|
122
|
+
return {
|
|
123
|
+
text: String(t?.text ?? ''),
|
|
124
|
+
confidence: Number(t?.confidence ?? 0),
|
|
125
|
+
frame
|
|
126
|
+
};
|
|
127
|
+
}) : [],
|
|
128
|
+
backend: String(raw?.backend || 'vision')
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=NativeBridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_pruneOffscreen","_normalizeViewTree","LINKING_ERROR","Platform","OS","Native","NativeModules","KokoAgentSdk","getNative","Error","NativeBridge","exports","isAvailable","hostAppId","raw","trim","dump","options","dumpViewTree","maxDepth","skipInvisible","root","normalizeViewTree","pruneOffscreen","tap","point","dispatchTap","x","y","inspectWebWalletProvider","native","swipe","from","to","durationMs","dispatchSwipe","pinch","center","scale","n","dispatchPinch","invokeAlertAction","title","typeText","text","clear","focusNode","nodeId","focusAt","dismissKeyboard","scrollIntoView","_point","screenshot","captureScreenshot","hideOverlays","recognizeScreenText","tokens","texts","backend","maxTokens","languages","Array","isArray","map","String","t","f","frame","width","height","every","v","Number","isFinite","undefined","confidence"],"sourceRoot":"../../../src","sources":["native/NativeBridge.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.navigationLabel = navigationLabel;
|
|
7
|
+
/** Explicit semantic navigation IDs, never inferred from icon position alone. */
|
|
8
|
+
function navigationLabel(node) {
|
|
9
|
+
if ((node.text || '').trim() || (node.accessibilityLabel || '').trim()) return undefined;
|
|
10
|
+
if (!node.clickable || node.visible === false || node.enabled === false) return undefined;
|
|
11
|
+
const id = (node.testID || '').replace(/[^a-z]/gi, '').toLowerCase();
|
|
12
|
+
if (/^(?:nav(?:igation)?(?:header)?|header|toolbar)?(?:go)?back(?:button)?$|^buttonback$/.test(id)) return 'Back';
|
|
13
|
+
if (/^(?:nav(?:igation)?(?:header)?|header|toolbar)?close(?:button)?$|^buttonclose$/.test(id)) return 'Close';
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=navigationLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["navigationLabel","node","text","trim","accessibilityLabel","undefined","clickable","visible","enabled","id","testID","replace","toLowerCase","test"],"sourceRoot":"../../../src","sources":["native/navigationLabel.ts"],"mappings":";;;;;;AAEA;AACO,SAASA,eAAeA,CAACC,IAAc,EAAsB;EAClE,IAAI,CAACA,IAAI,CAACC,IAAI,IAAI,EAAE,EAAEC,IAAI,CAAC,CAAC,IAAI,CAACF,IAAI,CAACG,kBAAkB,IAAI,EAAE,EAAED,IAAI,CAAC,CAAC,EAAE,OAAOE,SAAS;EACxF,IAAI,CAACJ,IAAI,CAACK,SAAS,IAAIL,IAAI,CAACM,OAAO,KAAK,KAAK,IAAIN,IAAI,CAACO,OAAO,KAAK,KAAK,EAAE,OAAOH,SAAS;EACzF,MAAMI,EAAE,GAAG,CAACR,IAAI,CAACS,MAAM,IAAI,EAAE,EAAEC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAACC,WAAW,CAAC,CAAC;EACpE,IAAI,qFAAqF,CAACC,IAAI,CAACJ,EAAE,CAAC,EAAE,OAAO,MAAM;EACjH,IAAI,gFAAgF,CAACI,IAAI,CAACJ,EAAE,CAAC,EAAE,OAAO,OAAO;EAC7G,OAAOJ,SAAS;AAClB","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.normalizeViewTree = normalizeViewTree;
|
|
7
|
+
var _navigationLabel = require("./navigationLabel.js");
|
|
8
|
+
/** NSNumber boolean expressions can arrive as 0/1 through the RN bridge. */
|
|
9
|
+
function normalizeViewTree(node) {
|
|
10
|
+
const children = node.children.map(normalizeViewTree);
|
|
11
|
+
const flags = {};
|
|
12
|
+
for (const key of ['scrollable', 'clipsChildren', 'visible', 'enabled', 'clickable', 'secure']) {
|
|
13
|
+
const value = node[key];
|
|
14
|
+
if (value === 0 || value === 1) flags[key] = value === 1;
|
|
15
|
+
}
|
|
16
|
+
const label = (0, _navigationLabel.navigationLabel)({
|
|
17
|
+
...node,
|
|
18
|
+
...flags
|
|
19
|
+
});
|
|
20
|
+
if (label) flags.accessibilityLabel = label;
|
|
21
|
+
if (!Object.keys(flags).length && children.every((child, i) => child === node.children[i])) return node;
|
|
22
|
+
return {
|
|
23
|
+
...node,
|
|
24
|
+
...flags,
|
|
25
|
+
children
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=normalizeViewTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_navigationLabel","require","normalizeViewTree","node","children","map","flags","key","value","label","navigationLabel","accessibilityLabel","Object","keys","length","every","child","i"],"sourceRoot":"../../../src","sources":["native/normalizeViewTree.ts"],"mappings":";;;;;;AACA,IAAAA,gBAAA,GAAAC,OAAA;AAEA;AACO,SAASC,iBAAiBA,CAACC,IAAc,EAAY;EAC1D,MAAMC,QAAQ,GAAGD,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACH,iBAAiB,CAAC;EACrD,MAAMI,KAAwB,GAAG,CAAC,CAAC;EACnC,KAAK,MAAMC,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAW;IACvG,MAAMC,KAAc,GAAGL,IAAI,CAACI,GAAG,CAAC;IAChC,IAAIC,KAAK,KAAK,CAAC,IAAIA,KAAK,KAAK,CAAC,EAAEF,KAAK,CAACC,GAAG,CAAC,GAAGC,KAAK,KAAK,CAAC;EAC1D;EACA,MAAMC,KAAK,GAAG,IAAAC,gCAAe,EAAC;IAAE,GAAGP,IAAI;IAAE,GAAGG;EAAM,CAAC,CAAC;EACpD,IAAIG,KAAK,EAAEH,KAAK,CAACK,kBAAkB,GAAGF,KAAK;EAC3C,IAAI,CAACG,MAAM,CAACC,IAAI,CAACP,KAAK,CAAC,CAACQ,MAAM,IAAIV,QAAQ,CAACW,KAAK,CAAC,CAACC,KAAK,EAAEC,CAAC,KAAKD,KAAK,KAAKb,IAAI,CAACC,QAAQ,CAACa,CAAC,CAAC,CAAC,EAAE,OAAOd,IAAI;EACvG,OAAO;IAAE,GAAGA,IAAI;IAAE,GAAGG,KAAK;IAAEF;EAAS,CAAC;AACxC","ignoreList":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pruneOffscreen = pruneOffscreen;
|
|
7
|
+
/**
|
|
8
|
+
* Drop nodes that are mounted but nowhere on screen.
|
|
9
|
+
*
|
|
10
|
+
* Both platforms report a node as visible from its own flags alone — Android
|
|
11
|
+
* `VISIBLE && isShown()`, iOS `!hidden && alpha > 0`. Neither asks whether the
|
|
12
|
+
* node is inside the window, so a navigator screen that is still mounted but
|
|
13
|
+
* pushed aside keeps showing up in every dump. The agent then plans against a
|
|
14
|
+
* screen the user cannot see, and the user gate can stall a run on a prompt
|
|
15
|
+
* that is not there.
|
|
16
|
+
*
|
|
17
|
+
* Intersect against the window and every clipping/scroll ancestor. A mounted
|
|
18
|
+
* list row outside its scroll viewport must not become a clickable target.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/** Rounding slack, in points: a node flush with the edge must survive. */
|
|
22
|
+
const EPSILON = 0.5;
|
|
23
|
+
function intersects(a, b) {
|
|
24
|
+
return a.x < b.x + b.width - EPSILON && a.x + a.width > b.x + EPSILON && a.y < b.y + b.height - EPSILON && a.y + a.height > b.y + EPSILON;
|
|
25
|
+
}
|
|
26
|
+
function clippedFrame(a, b) {
|
|
27
|
+
if (!intersects(a, b)) return null;
|
|
28
|
+
const x = Math.max(a.x, b.x);
|
|
29
|
+
const y = Math.max(a.y, b.y);
|
|
30
|
+
return {
|
|
31
|
+
x,
|
|
32
|
+
y,
|
|
33
|
+
width: Math.min(a.x + a.width, b.x + b.width) - x,
|
|
34
|
+
height: Math.min(a.y + a.height, b.y + b.height) - y
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function prune(node, window) {
|
|
38
|
+
if (node.visible === false) return null;
|
|
39
|
+
const clip = node.clipsChildren === true || /scrollview|recyclerview|listview/i.test(node.type);
|
|
40
|
+
const childWindow = clip ? clippedFrame(node.frame, window) : window;
|
|
41
|
+
const children = [];
|
|
42
|
+
for (const child of childWindow ? node.children : []) {
|
|
43
|
+
const kept = prune(child, childWindow);
|
|
44
|
+
if (kept) children.push(kept);
|
|
45
|
+
}
|
|
46
|
+
// A container can sit outside the window while laying children back inside
|
|
47
|
+
// it (carousels, drawers), so keep any ancestor that still leads somewhere
|
|
48
|
+
// on screen.
|
|
49
|
+
if (children.length === 0 && !intersects(node.frame, window)) return null;
|
|
50
|
+
const onScreen = intersects(node.frame, window);
|
|
51
|
+
const centerVisible = onScreen && node.frame.x + node.frame.width / 2 >= window.x && node.frame.x + node.frame.width / 2 <= window.x + window.width && node.frame.y + node.frame.height / 2 >= window.y && node.frame.y + node.frame.height / 2 <= window.y + window.height;
|
|
52
|
+
if (!children.length && !centerVisible) return null;
|
|
53
|
+
const changed = children.length !== node.children.length || children.some((c, i) => c !== node.children[i]);
|
|
54
|
+
if (!changed && centerVisible) return node;
|
|
55
|
+
// Native containers aggregate all descendant labels before clipping. Never
|
|
56
|
+
// retain a hidden row's text on an otherwise visible ancestor.
|
|
57
|
+
// A structural ancestor can be larger than the viewport while containing
|
|
58
|
+
// visible children. Keep it traversable but not actionable or labelled.
|
|
59
|
+
return {
|
|
60
|
+
...node,
|
|
61
|
+
children,
|
|
62
|
+
visible: centerVisible || children.length > 0,
|
|
63
|
+
clickable: node.clickable && centerVisible,
|
|
64
|
+
...(!centerVisible || changed && node.children.length ? {
|
|
65
|
+
text: centerVisible && node.text ? children.map(c => c.text || c.accessibilityLabel || '').filter(Boolean).join(' ').slice(0, 240) || undefined : undefined,
|
|
66
|
+
accessibilityLabel: undefined
|
|
67
|
+
} : {})
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function pruneOffscreen(root) {
|
|
71
|
+
return prune(root, root.frame) ?? {
|
|
72
|
+
...root,
|
|
73
|
+
children: []
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=pruneOffscreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EPSILON","intersects","a","b","x","width","y","height","clippedFrame","Math","max","min","prune","node","window","visible","clip","clipsChildren","test","type","childWindow","frame","children","child","kept","push","length","onScreen","centerVisible","changed","some","c","i","clickable","text","map","accessibilityLabel","filter","Boolean","join","slice","undefined","pruneOffscreen","root"],"sourceRoot":"../../../src","sources":["native/pruneOffscreen.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.boundedScrollGesture = boundedScrollGesture;
|
|
7
|
+
exports.scrollPosition = scrollPosition;
|
|
8
|
+
exports.scrollViewports = scrollViewports;
|
|
9
|
+
function intersect(a, b) {
|
|
10
|
+
const x = Math.max(a.x, b.x),
|
|
11
|
+
y = Math.max(a.y, b.y);
|
|
12
|
+
const width = Math.min(a.x + a.width, b.x + b.width) - x;
|
|
13
|
+
const height = Math.min(a.y + a.height, b.y + b.height) - y;
|
|
14
|
+
return width > 0 && height > 0 ? {
|
|
15
|
+
x,
|
|
16
|
+
y,
|
|
17
|
+
width,
|
|
18
|
+
height
|
|
19
|
+
} : null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Visible scroll regions, clipped by the window and every clipping ancestor. */
|
|
23
|
+
function scrollViewports(root) {
|
|
24
|
+
const out = [];
|
|
25
|
+
const walk = (node, clip) => {
|
|
26
|
+
const frame = intersect(node.frame, clip);
|
|
27
|
+
if (node.scrollable === true && node.visible !== false && frame) out.push({
|
|
28
|
+
node,
|
|
29
|
+
frame
|
|
30
|
+
});
|
|
31
|
+
const clips = node.clipsChildren || /scrollview|recyclerview|listview/i.test(node.type);
|
|
32
|
+
const childClip = clips ? frame : clip;
|
|
33
|
+
if (childClip) for (const child of node.children) walk(child, childClip);
|
|
34
|
+
};
|
|
35
|
+
walk(root, root.frame);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function boundedScrollGesture(frame, from, to) {
|
|
39
|
+
const insetX = Math.min(12, frame.width / 4),
|
|
40
|
+
insetY = Math.min(12, frame.height / 4);
|
|
41
|
+
const clamp = p => ({
|
|
42
|
+
x: Math.max(frame.x + insetX, Math.min(frame.x + frame.width - insetX, p.x)),
|
|
43
|
+
y: Math.max(frame.y + insetY, Math.min(frame.y + frame.height - insetY, p.y))
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
from: clamp(from),
|
|
47
|
+
to: clamp(to)
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Position-only evidence: changing prices must not masquerade as scrolling. */
|
|
52
|
+
function scrollPosition(root, from) {
|
|
53
|
+
const viewport = scrollViewports(root).filter(({
|
|
54
|
+
frame: f
|
|
55
|
+
}) => from.x >= f.x && from.x <= f.x + f.width && from.y >= f.y && from.y <= f.y + f.height).sort((a, b) => a.frame.width * a.frame.height - b.frame.width * b.frame.height)[0];
|
|
56
|
+
if (!viewport) return null;
|
|
57
|
+
const positions = [];
|
|
58
|
+
const walk = n => {
|
|
59
|
+
if (n.visible === false) return;
|
|
60
|
+
if (!n.children.length || n.clickable) positions.push(`${n.id}:${Math.round(n.frame.x)},${Math.round(n.frame.y)}`);
|
|
61
|
+
for (const child of n.children) walk(child);
|
|
62
|
+
};
|
|
63
|
+
walk(viewport.node);
|
|
64
|
+
// Only the hash leaves this local comparison; labels/values are never used.
|
|
65
|
+
let hash = 2166136261;
|
|
66
|
+
for (const c of positions.join('|')) hash = Math.imul(hash ^ c.charCodeAt(0), 16777619);
|
|
67
|
+
return (hash >>> 0).toString(16);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=scrollViewport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["intersect","a","b","x","Math","max","y","width","min","height","scrollViewports","root","out","walk","node","clip","frame","scrollable","visible","push","clips","clipsChildren","test","type","childClip","child","children","boundedScrollGesture","from","to","insetX","insetY","clamp","p","scrollPosition","viewport","filter","f","sort","positions","n","length","clickable","id","round","hash","c","join","imul","charCodeAt","toString"],"sourceRoot":"../../../src","sources":["native/scrollViewport.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.redactOutbound = redactOutbound;
|
|
7
|
+
exports.redactViewTreeClient = redactViewTreeClient;
|
|
8
|
+
exports.viewTreeOutline = viewTreeOutline;
|
|
9
|
+
var _sensitiveScreen = require("./sensitiveScreen.js");
|
|
10
|
+
/**
|
|
11
|
+
* Client-side redaction before upload (defense in depth; server also redacts).
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
function redactViewTreeClient(node, maxDepth = 80) {
|
|
15
|
+
if ((0, _sensitiveScreen.sensitiveScreenKind)(node)) {
|
|
16
|
+
return {
|
|
17
|
+
...nodeFields(node),
|
|
18
|
+
text: '[private screen]',
|
|
19
|
+
children: []
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return walk(node, 0, maxDepth);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Applies to every outbound field, including OCR/model/history and test IDs. */
|
|
26
|
+
function redactOutbound(value, tree) {
|
|
27
|
+
const secrets = new Set();
|
|
28
|
+
const collect = n => {
|
|
29
|
+
if (n.secure) {
|
|
30
|
+
for (const v of [n.text, n.accessibilityLabel]) {
|
|
31
|
+
if (v && !/^[•●*\s]+$/.test(v)) secrets.add(v);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
for (const child of n.children || []) collect(child);
|
|
35
|
+
};
|
|
36
|
+
for (const source of Array.isArray(tree) ? tree : [tree]) {
|
|
37
|
+
if (source) collect(source);
|
|
38
|
+
}
|
|
39
|
+
const visit = v => {
|
|
40
|
+
if (typeof v === 'string') {
|
|
41
|
+
let out = v;
|
|
42
|
+
for (const secret of secrets) out = out.split(secret).join('[redacted]');
|
|
43
|
+
return out.replace(/\b(?:0x)?[a-fA-F0-9]{64}\b/g, '[redacted]').replace(/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/g, '[redacted]').replace(/((?:password|passcode|密码|私钥|private\s*key)\s*[:=:]\s*)[^\s,;"}]+/gi, '$1[redacted]');
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(v)) return v.map(visit);
|
|
46
|
+
if (v && typeof v === 'object') return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, visit(x)]));
|
|
47
|
+
return v;
|
|
48
|
+
};
|
|
49
|
+
return visit(value);
|
|
50
|
+
}
|
|
51
|
+
function scrub(text) {
|
|
52
|
+
if (!text) return undefined;
|
|
53
|
+
const t = text.replace(/\s+/g, ' ').trim();
|
|
54
|
+
if (!t) return undefined;
|
|
55
|
+
// A feature label is not its private value. Keep public navigation copy and
|
|
56
|
+
// addresses usable; value formats and assignments are scrubbed separately.
|
|
57
|
+
const safe = redactOutbound(t);
|
|
58
|
+
return safe.length > 80 ? `${safe.slice(0, 80)}…` : safe;
|
|
59
|
+
}
|
|
60
|
+
function walk(node, depth, maxDepth) {
|
|
61
|
+
return {
|
|
62
|
+
...nodeFields(node),
|
|
63
|
+
text: node.secure ? '[redacted]' : scrub(node.text),
|
|
64
|
+
accessibilityLabel: node.secure ? '[redacted]' : scrub(node.accessibilityLabel),
|
|
65
|
+
testID: node.secure ? undefined : scrub(node.testID),
|
|
66
|
+
children: depth >= maxDepth ? [] : node.children.slice(0, 40).map(c => walk(c, depth + 1, maxDepth))
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Runtime trees cross a JS boundary: TypeScript types do not filter fields. */
|
|
71
|
+
function nodeFields(node) {
|
|
72
|
+
const finite = value => typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
73
|
+
const out = {
|
|
74
|
+
id: typeof node.id === 'string' ? node.id : '',
|
|
75
|
+
type: typeof node.type === 'string' ? node.type : 'View',
|
|
76
|
+
frame: {
|
|
77
|
+
x: finite(node.frame?.x) ?? 0,
|
|
78
|
+
y: finite(node.frame?.y) ?? 0,
|
|
79
|
+
width: finite(node.frame?.width) ?? 0,
|
|
80
|
+
height: finite(node.frame?.height) ?? 0
|
|
81
|
+
},
|
|
82
|
+
clickable: node.clickable === true,
|
|
83
|
+
enabled: node.enabled !== false,
|
|
84
|
+
visible: node.visible !== false
|
|
85
|
+
};
|
|
86
|
+
for (const key of ['secure', 'selected', 'sheet', 'toggle', 'on', 'adjustable', 'scrollable', 'clipsChildren']) {
|
|
87
|
+
if (typeof node[key] === 'boolean') out[key] = node[key];
|
|
88
|
+
}
|
|
89
|
+
for (const key of ['value', 'min', 'max']) {
|
|
90
|
+
const value = finite(node[key]);
|
|
91
|
+
if (value !== undefined) out[key] = value;
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
function viewTreeOutline(node, maxLines = 120) {
|
|
96
|
+
if ((0, _sensitiveScreen.sensitiveScreenKind)(node)) return '[private screen — user completes locally]';
|
|
97
|
+
const lines = [];
|
|
98
|
+
const go = (n, indent) => {
|
|
99
|
+
if (lines.length >= maxLines) return;
|
|
100
|
+
const bits = [n.clickable ? 'tap' : null, n.text ? `"${n.text}"` : null, n.accessibilityLabel && n.accessibilityLabel !== n.text ? `a11y="${n.accessibilityLabel}"` : null, n.testID ? `id=${n.testID}` : null].filter(Boolean).join(' ');
|
|
101
|
+
lines.push(`${' '.repeat(indent)}${n.id} ${n.type} ${bits}`.trimEnd());
|
|
102
|
+
for (const c of n.children) go(c, indent + 1);
|
|
103
|
+
};
|
|
104
|
+
go(node, 0);
|
|
105
|
+
if (lines.length >= maxLines) lines.push('…(truncated)');
|
|
106
|
+
return lines.join('\n');
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_sensitiveScreen","require","redactViewTreeClient","node","maxDepth","sensitiveScreenKind","nodeFields","text","children","walk","redactOutbound","value","tree","secrets","Set","collect","n","secure","v","accessibilityLabel","test","add","child","source","Array","isArray","visit","out","secret","split","join","replace","map","Object","fromEntries","entries","k","x","scrub","undefined","t","trim","safe","length","slice","depth","testID","c","finite","Number","isFinite","id","type","frame","y","width","height","clickable","enabled","visible","key","viewTreeOutline","maxLines","lines","go","indent","bits","filter","Boolean","push","repeat","trimEnd"],"sourceRoot":"../../../src","sources":["privacy/redact.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PRIVATE_INPUT_PROMPT_RE = void 0;
|
|
7
|
+
exports.isPrivateInput = isPrivateInput;
|
|
8
|
+
exports.isSdkChrome = isSdkChrome;
|
|
9
|
+
exports.isSystemSheet = isSystemSheet;
|
|
10
|
+
exports.nodeLabels = nodeLabels;
|
|
11
|
+
exports.staticScreenLabels = staticScreenLabels;
|
|
12
|
+
/** Shared by local gates and the final upload boundary; never inspect values. */
|
|
13
|
+
const PRIVATE_INPUT_PROMPT_RE = exports.PRIVATE_INPUT_PROMPT_RE = /^(?:(?:请)?(?:输入|设置|确认|创建|验证|解锁|重置|更改|修改)(?:您?的|新|旧|登录|支付|交易|钱包|安全|数字|\d+位|\s)*(?:密码|安全码|验证码)|(?:登录|支付|交易|钱包)?密码|安全码|验证码|短信验证|(?:please\s+)?(?:enter|set|confirm|create|verify|unlock|reset|change)\s+(?:(?:your|new|old|wallet|payment|login|\d+[- ]digit)\s+)*(?:password|passcode|pin|otp|security\s+code|verification\s+code)|password|passcode|pin|otp|cvv)\s*[::??!!]?$/i;
|
|
14
|
+
function isPrivateInput(node) {
|
|
15
|
+
if (node.secure) return true;
|
|
16
|
+
if (!/securetext|password|textfield|textinput|edittext|textview|textarea/i.test(node.type)) return false;
|
|
17
|
+
const metadata = `${node.testID || ''} ${node.accessibilityLabel || ''} ${node.type}`;
|
|
18
|
+
return /password|passwd|pass[-_\s]?code|\bpin\b|\botp\b|\bcvv\b|verification[-_\s]*code|security[-_\s]*code|密码|验证码|安全码/i.test(metadata) || typeof node.text === 'string' && PRIVATE_INPUT_PROMPT_RE.test(node.text.trim());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Text spoken by a node; test IDs are metadata, never user-facing copy. */
|
|
22
|
+
function nodeLabels(node) {
|
|
23
|
+
return [...new Set([node.text, node.accessibilityLabel].filter(text => typeof text === 'string' && !!text.trim()).map(text => text.replace(/\s+/g, ' ').trim()))];
|
|
24
|
+
}
|
|
25
|
+
function isSdkChrome(node) {
|
|
26
|
+
return /^koko-agent-(?:overlay|cursor|entry)(?:$|[/:-])/i.test(node.testID || '');
|
|
27
|
+
}
|
|
28
|
+
function isSystemSheet(node) {
|
|
29
|
+
return node.sheet === true || /uialertcontroller|alertdialog|biometricprompt/i.test(node.type);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** A full-screen Pressable used to dismiss the keyboard is not an action row. */
|
|
33
|
+
function isActionRow(node, root) {
|
|
34
|
+
if (!node.clickable && !node.toggle && !node.adjustable) return false;
|
|
35
|
+
if (/button|menuitem|tabbaritem|navigationitem/i.test(node.type)) return true;
|
|
36
|
+
if (node === root || node.frame.height >= root.frame.height / 2) return false;
|
|
37
|
+
const hasIndependentAction = n => n.children.some(child => child.clickable || child.toggle || child.adjustable || hasIndependentAction(child));
|
|
38
|
+
return !hasIndependentAction(node);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Static own copy, excluding aggregated ancestors and offered menu actions. */
|
|
42
|
+
function staticScreenLabels(root) {
|
|
43
|
+
const out = [];
|
|
44
|
+
const hasCopy = n => n.visible !== false && !isSdkChrome(n) && (!!nodeLabels(n).length || n.children.some(hasCopy));
|
|
45
|
+
const visit = (node, inAction) => {
|
|
46
|
+
if (isSdkChrome(node)) return;
|
|
47
|
+
const action = inAction || isActionRow(node, root);
|
|
48
|
+
if (node.visible !== false && !action && !node.children.some(hasCopy)) {
|
|
49
|
+
for (const label of nodeLabels(node)) out.push({
|
|
50
|
+
node,
|
|
51
|
+
label
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
for (const child of node.children) visit(child, action);
|
|
55
|
+
};
|
|
56
|
+
visit(root, false);
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=screenEvidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PRIVATE_INPUT_PROMPT_RE","exports","isPrivateInput","node","secure","test","type","metadata","testID","accessibilityLabel","text","trim","nodeLabels","Set","filter","map","replace","isSdkChrome","isSystemSheet","sheet","isActionRow","root","clickable","toggle","adjustable","frame","height","hasIndependentAction","n","children","some","child","staticScreenLabels","out","hasCopy","visible","length","visit","inAction","action","label","push"],"sourceRoot":"../../../src","sources":["privacy/screenEvidence.ts"],"mappings":"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","ignoreList":[]}
|