@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.
Files changed (622) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/CODE_OF_CONDUCT.md +3 -0
  3. package/CONTRIBUTING.md +9 -0
  4. package/LICENSE +21 -0
  5. package/README.md +65 -0
  6. package/README.zh-CN.md +50 -0
  7. package/SECURITY.md +5 -0
  8. package/android/build.gradle +40 -0
  9. package/android/src/main/AndroidManifest.xml +2 -0
  10. package/android/src/main/java/cn/intentcomputing/kokoagentsdk/KokoAgentSdkModule.java +1356 -0
  11. package/android/src/main/java/cn/intentcomputing/kokoagentsdk/KokoAgentSdkPackage.java +23 -0
  12. package/docs/INTEGRATION.md +168 -0
  13. package/docs/INTEGRATION.zh-CN.md +140 -0
  14. package/docs/PRIVACY.md +11 -0
  15. package/docs/PRIVACY.zh-CN.md +11 -0
  16. package/docs/PUBLISH.md +11 -0
  17. package/docs/PUBLISH.zh-CN.md +11 -0
  18. package/ios/KokoAgentSdk/KokoAgentSdk.h +5 -0
  19. package/ios/KokoAgentSdk/KokoAgentSdk.m +2464 -0
  20. package/ios/KokoAgentSdk/KokoOcrBounds.h +20 -0
  21. package/ios/KokoAgentSdk/KokoScrollBounds.h +21 -0
  22. package/koko-agent-sdk.podspec +23 -0
  23. package/lib/commonjs/KokoAgent.js +1427 -0
  24. package/lib/commonjs/KokoAgent.js.map +1 -0
  25. package/lib/commonjs/assist/OnDeviceAssist.js +94 -0
  26. package/lib/commonjs/assist/OnDeviceAssist.js.map +1 -0
  27. package/lib/commonjs/assist/intentClassify.js +100 -0
  28. package/lib/commonjs/assist/intentClassify.js.map +1 -0
  29. package/lib/commonjs/assist/nodeRank.js +120 -0
  30. package/lib/commonjs/assist/nodeRank.js.map +1 -0
  31. package/lib/commonjs/assist/ocrTarget.js +135 -0
  32. package/lib/commonjs/assist/ocrTarget.js.map +1 -0
  33. package/lib/commonjs/assist/webVisualChange.js +29 -0
  34. package/lib/commonjs/assist/webVisualChange.js.map +1 -0
  35. package/lib/commonjs/client/ActionOutcomeUnknownError.js +28 -0
  36. package/lib/commonjs/client/ActionOutcomeUnknownError.js.map +1 -0
  37. package/lib/commonjs/client/AgentSession.js +858 -0
  38. package/lib/commonjs/client/AgentSession.js.map +1 -0
  39. package/lib/commonjs/client/GatewayClient.js +302 -0
  40. package/lib/commonjs/client/GatewayClient.js.map +1 -0
  41. package/lib/commonjs/client/OperationReplayGuard.js +62 -0
  42. package/lib/commonjs/client/OperationReplayGuard.js.map +1 -0
  43. package/lib/commonjs/client/RunCheckpoint.js +139 -0
  44. package/lib/commonjs/client/RunCheckpoint.js.map +1 -0
  45. package/lib/commonjs/client/loopDetect.js +184 -0
  46. package/lib/commonjs/client/loopDetect.js.map +1 -0
  47. package/lib/commonjs/client/recentSearch.js +50 -0
  48. package/lib/commonjs/client/recentSearch.js.map +1 -0
  49. package/lib/commonjs/client/walletChoiceGuard.js +18 -0
  50. package/lib/commonjs/client/walletChoiceGuard.js.map +1 -0
  51. package/lib/commonjs/client/webResultCategory.js +38 -0
  52. package/lib/commonjs/client/webResultCategory.js.map +1 -0
  53. package/lib/commonjs/commercial/AccountStore.js +78 -0
  54. package/lib/commonjs/commercial/AccountStore.js.map +1 -0
  55. package/lib/commonjs/commercial/AgentDebug.js +104 -0
  56. package/lib/commonjs/commercial/AgentDebug.js.map +1 -0
  57. package/lib/commonjs/commercial/ExecutionGuard.js +53 -0
  58. package/lib/commonjs/commercial/ExecutionGuard.js.map +1 -0
  59. package/lib/commonjs/commercial/UsageBus.js +42 -0
  60. package/lib/commonjs/commercial/UsageBus.js.map +1 -0
  61. package/lib/commonjs/commercial/branding.js +69 -0
  62. package/lib/commonjs/commercial/branding.js.map +1 -0
  63. package/lib/commonjs/commercial/devMode.js +52 -0
  64. package/lib/commonjs/commercial/devMode.js.map +1 -0
  65. package/lib/commonjs/commercial/trust.js +69 -0
  66. package/lib/commonjs/commercial/trust.js.map +1 -0
  67. package/lib/commonjs/confirmation/gate.js +62 -0
  68. package/lib/commonjs/confirmation/gate.js.map +1 -0
  69. package/lib/commonjs/cursor/CursorOverlay.js +141 -0
  70. package/lib/commonjs/cursor/CursorOverlay.js.map +1 -0
  71. package/lib/commonjs/cursor/PointerHand.js +51 -0
  72. package/lib/commonjs/cursor/PointerHand.js.map +1 -0
  73. package/lib/commonjs/cursor/controller.js +91 -0
  74. package/lib/commonjs/cursor/controller.js.map +1 -0
  75. package/lib/commonjs/cursor/pointer.js +49 -0
  76. package/lib/commonjs/cursor/pointer.js.map +1 -0
  77. package/lib/commonjs/debug/KokoRemoteSmoke.js +611 -0
  78. package/lib/commonjs/debug/KokoRemoteSmoke.js.map +1 -0
  79. package/lib/commonjs/explore/ExplorationGraph.js +418 -0
  80. package/lib/commonjs/explore/ExplorationGraph.js.map +1 -0
  81. package/lib/commonjs/explore/bootstrapExplore.js +59 -0
  82. package/lib/commonjs/explore/bootstrapExplore.js.map +1 -0
  83. package/lib/commonjs/host/HostActions.js +266 -0
  84. package/lib/commonjs/host/HostActions.js.map +1 -0
  85. package/lib/commonjs/i18n/index.js +169 -0
  86. package/lib/commonjs/i18n/index.js.map +1 -0
  87. package/lib/commonjs/i18n/runtimeMessages.js +184 -0
  88. package/lib/commonjs/i18n/runtimeMessages.js.map +1 -0
  89. package/lib/commonjs/index.js +640 -0
  90. package/lib/commonjs/index.js.map +1 -0
  91. package/lib/commonjs/native/NativeBridge.js +132 -0
  92. package/lib/commonjs/native/NativeBridge.js.map +1 -0
  93. package/lib/commonjs/native/navigationLabel.js +16 -0
  94. package/lib/commonjs/native/navigationLabel.js.map +1 -0
  95. package/lib/commonjs/native/normalizeViewTree.js +28 -0
  96. package/lib/commonjs/native/normalizeViewTree.js.map +1 -0
  97. package/lib/commonjs/native/pruneOffscreen.js +76 -0
  98. package/lib/commonjs/native/pruneOffscreen.js.map +1 -0
  99. package/lib/commonjs/native/scrollViewport.js +69 -0
  100. package/lib/commonjs/native/scrollViewport.js.map +1 -0
  101. package/lib/commonjs/package.json +1 -0
  102. package/lib/commonjs/privacy/redact.js +108 -0
  103. package/lib/commonjs/privacy/redact.js.map +1 -0
  104. package/lib/commonjs/privacy/screenEvidence.js +59 -0
  105. package/lib/commonjs/privacy/screenEvidence.js.map +1 -0
  106. package/lib/commonjs/privacy/screenModel.js +404 -0
  107. package/lib/commonjs/privacy/screenModel.js.map +1 -0
  108. package/lib/commonjs/privacy/sensitiveScreen.js +58 -0
  109. package/lib/commonjs/privacy/sensitiveScreen.js.map +1 -0
  110. package/lib/commonjs/privacy/userGate.js +213 -0
  111. package/lib/commonjs/privacy/userGate.js.map +1 -0
  112. package/lib/commonjs/protocol/actions.js +112 -0
  113. package/lib/commonjs/protocol/actions.js.map +1 -0
  114. package/lib/commonjs/provider/HostAppearanceStore.js +111 -0
  115. package/lib/commonjs/provider/HostAppearanceStore.js.map +1 -0
  116. package/lib/commonjs/provider/KokoProvider.js +81 -0
  117. package/lib/commonjs/provider/KokoProvider.js.map +1 -0
  118. package/lib/commonjs/provider/KokoUiContext.js +102 -0
  119. package/lib/commonjs/provider/KokoUiContext.js.map +1 -0
  120. package/lib/commonjs/selector/match.js +378 -0
  121. package/lib/commonjs/selector/match.js.map +1 -0
  122. package/lib/commonjs/task/TaskStore.js +361 -0
  123. package/lib/commonjs/task/TaskStore.js.map +1 -0
  124. package/lib/commonjs/task/types.js +2 -0
  125. package/lib/commonjs/task/types.js.map +1 -0
  126. package/lib/commonjs/task/useTaskStore.js +14 -0
  127. package/lib/commonjs/task/useTaskStore.js.map +1 -0
  128. package/lib/commonjs/types.js +2 -0
  129. package/lib/commonjs/types.js.map +1 -0
  130. package/lib/commonjs/ui/KokoChatSheet.js +885 -0
  131. package/lib/commonjs/ui/KokoChatSheet.js.map +1 -0
  132. package/lib/commonjs/ui/KokoComposer.js +161 -0
  133. package/lib/commonjs/ui/KokoComposer.js.map +1 -0
  134. package/lib/commonjs/ui/KokoDialogHost.js +254 -0
  135. package/lib/commonjs/ui/KokoDialogHost.js.map +1 -0
  136. package/lib/commonjs/ui/KokoEntryButton.js +81 -0
  137. package/lib/commonjs/ui/KokoEntryButton.js.map +1 -0
  138. package/lib/commonjs/ui/KokoObserver.js +522 -0
  139. package/lib/commonjs/ui/KokoObserver.js.map +1 -0
  140. package/lib/commonjs/ui/KokoOverlayLayer.js +45 -0
  141. package/lib/commonjs/ui/KokoOverlayLayer.js.map +1 -0
  142. package/lib/commonjs/ui/KokoSubtitle.js +95 -0
  143. package/lib/commonjs/ui/KokoSubtitle.js.map +1 -0
  144. package/lib/commonjs/ui/KokoTaskPanel.js +322 -0
  145. package/lib/commonjs/ui/KokoTaskPanel.js.map +1 -0
  146. package/lib/commonjs/ui/hostOverlay.js +126 -0
  147. package/lib/commonjs/ui/hostOverlay.js.map +1 -0
  148. package/lib/commonjs/ui/icons.js +132 -0
  149. package/lib/commonjs/ui/icons.js.map +1 -0
  150. package/lib/commonjs/ui/progressChrome.js +66 -0
  151. package/lib/commonjs/ui/progressChrome.js.map +1 -0
  152. package/lib/commonjs/ui/safeArea.js +96 -0
  153. package/lib/commonjs/ui/safeArea.js.map +1 -0
  154. package/lib/commonjs/ui/useOverlayOrigin.js +40 -0
  155. package/lib/commonjs/ui/useOverlayOrigin.js.map +1 -0
  156. package/lib/module/KokoAgent.js +1418 -0
  157. package/lib/module/KokoAgent.js.map +1 -0
  158. package/lib/module/assist/OnDeviceAssist.js +89 -0
  159. package/lib/module/assist/OnDeviceAssist.js.map +1 -0
  160. package/lib/module/assist/intentClassify.js +95 -0
  161. package/lib/module/assist/intentClassify.js.map +1 -0
  162. package/lib/module/assist/nodeRank.js +115 -0
  163. package/lib/module/assist/nodeRank.js.map +1 -0
  164. package/lib/module/assist/ocrTarget.js +123 -0
  165. package/lib/module/assist/ocrTarget.js.map +1 -0
  166. package/lib/module/assist/webVisualChange.js +24 -0
  167. package/lib/module/assist/webVisualChange.js.map +1 -0
  168. package/lib/module/client/ActionOutcomeUnknownError.js +23 -0
  169. package/lib/module/client/ActionOutcomeUnknownError.js.map +1 -0
  170. package/lib/module/client/AgentSession.js +854 -0
  171. package/lib/module/client/AgentSession.js.map +1 -0
  172. package/lib/module/client/GatewayClient.js +293 -0
  173. package/lib/module/client/GatewayClient.js.map +1 -0
  174. package/lib/module/client/OperationReplayGuard.js +58 -0
  175. package/lib/module/client/OperationReplayGuard.js.map +1 -0
  176. package/lib/module/client/RunCheckpoint.js +135 -0
  177. package/lib/module/client/RunCheckpoint.js.map +1 -0
  178. package/lib/module/client/loopDetect.js +177 -0
  179. package/lib/module/client/loopDetect.js.map +1 -0
  180. package/lib/module/client/recentSearch.js +46 -0
  181. package/lib/module/client/recentSearch.js.map +1 -0
  182. package/lib/module/client/walletChoiceGuard.js +14 -0
  183. package/lib/module/client/walletChoiceGuard.js.map +1 -0
  184. package/lib/module/client/webResultCategory.js +34 -0
  185. package/lib/module/client/webResultCategory.js.map +1 -0
  186. package/lib/module/commercial/AccountStore.js +75 -0
  187. package/lib/module/commercial/AccountStore.js.map +1 -0
  188. package/lib/module/commercial/AgentDebug.js +99 -0
  189. package/lib/module/commercial/AgentDebug.js.map +1 -0
  190. package/lib/module/commercial/ExecutionGuard.js +49 -0
  191. package/lib/module/commercial/ExecutionGuard.js.map +1 -0
  192. package/lib/module/commercial/UsageBus.js +38 -0
  193. package/lib/module/commercial/UsageBus.js.map +1 -0
  194. package/lib/module/commercial/branding.js +63 -0
  195. package/lib/module/commercial/branding.js.map +1 -0
  196. package/lib/module/commercial/devMode.js +45 -0
  197. package/lib/module/commercial/devMode.js.map +1 -0
  198. package/lib/module/commercial/trust.js +62 -0
  199. package/lib/module/commercial/trust.js.map +1 -0
  200. package/lib/module/confirmation/gate.js +54 -0
  201. package/lib/module/confirmation/gate.js.map +1 -0
  202. package/lib/module/cursor/CursorOverlay.js +136 -0
  203. package/lib/module/cursor/CursorOverlay.js.map +1 -0
  204. package/lib/module/cursor/PointerHand.js +47 -0
  205. package/lib/module/cursor/PointerHand.js.map +1 -0
  206. package/lib/module/cursor/controller.js +87 -0
  207. package/lib/module/cursor/controller.js.map +1 -0
  208. package/lib/module/cursor/pointer.js +45 -0
  209. package/lib/module/cursor/pointer.js.map +1 -0
  210. package/lib/module/debug/KokoRemoteSmoke.js +608 -0
  211. package/lib/module/debug/KokoRemoteSmoke.js.map +1 -0
  212. package/lib/module/explore/ExplorationGraph.js +406 -0
  213. package/lib/module/explore/ExplorationGraph.js.map +1 -0
  214. package/lib/module/explore/bootstrapExplore.js +55 -0
  215. package/lib/module/explore/bootstrapExplore.js.map +1 -0
  216. package/lib/module/host/HostActions.js +255 -0
  217. package/lib/module/host/HostActions.js.map +1 -0
  218. package/lib/module/i18n/index.js +159 -0
  219. package/lib/module/i18n/index.js.map +1 -0
  220. package/lib/module/i18n/runtimeMessages.js +180 -0
  221. package/lib/module/i18n/runtimeMessages.js.map +1 -0
  222. package/lib/module/index.js +44 -0
  223. package/lib/module/index.js.map +1 -0
  224. package/lib/module/native/NativeBridge.js +128 -0
  225. package/lib/module/native/NativeBridge.js.map +1 -0
  226. package/lib/module/native/navigationLabel.js +12 -0
  227. package/lib/module/native/navigationLabel.js.map +1 -0
  228. package/lib/module/native/normalizeViewTree.js +25 -0
  229. package/lib/module/native/normalizeViewTree.js.map +1 -0
  230. package/lib/module/native/pruneOffscreen.js +72 -0
  231. package/lib/module/native/pruneOffscreen.js.map +1 -0
  232. package/lib/module/native/scrollViewport.js +63 -0
  233. package/lib/module/native/scrollViewport.js.map +1 -0
  234. package/lib/module/package.json +1 -0
  235. package/lib/module/privacy/redact.js +103 -0
  236. package/lib/module/privacy/redact.js.map +1 -0
  237. package/lib/module/privacy/screenEvidence.js +50 -0
  238. package/lib/module/privacy/screenEvidence.js.map +1 -0
  239. package/lib/module/privacy/screenModel.js +397 -0
  240. package/lib/module/privacy/screenModel.js.map +1 -0
  241. package/lib/module/privacy/sensitiveScreen.js +52 -0
  242. package/lib/module/privacy/sensitiveScreen.js.map +1 -0
  243. package/lib/module/privacy/userGate.js +202 -0
  244. package/lib/module/privacy/userGate.js.map +1 -0
  245. package/lib/module/protocol/actions.js +108 -0
  246. package/lib/module/protocol/actions.js.map +1 -0
  247. package/lib/module/provider/HostAppearanceStore.js +101 -0
  248. package/lib/module/provider/HostAppearanceStore.js.map +1 -0
  249. package/lib/module/provider/KokoProvider.js +74 -0
  250. package/lib/module/provider/KokoProvider.js.map +1 -0
  251. package/lib/module/provider/KokoUiContext.js +96 -0
  252. package/lib/module/provider/KokoUiContext.js.map +1 -0
  253. package/lib/module/selector/match.js +366 -0
  254. package/lib/module/selector/match.js.map +1 -0
  255. package/lib/module/task/TaskStore.js +356 -0
  256. package/lib/module/task/TaskStore.js.map +1 -0
  257. package/lib/module/task/types.js +2 -0
  258. package/lib/module/task/types.js.map +1 -0
  259. package/lib/module/task/useTaskStore.js +10 -0
  260. package/lib/module/task/useTaskStore.js.map +1 -0
  261. package/lib/module/types.js +2 -0
  262. package/lib/module/types.js.map +1 -0
  263. package/lib/module/ui/KokoChatSheet.js +879 -0
  264. package/lib/module/ui/KokoChatSheet.js.map +1 -0
  265. package/lib/module/ui/KokoComposer.js +155 -0
  266. package/lib/module/ui/KokoComposer.js.map +1 -0
  267. package/lib/module/ui/KokoDialogHost.js +247 -0
  268. package/lib/module/ui/KokoDialogHost.js.map +1 -0
  269. package/lib/module/ui/KokoEntryButton.js +74 -0
  270. package/lib/module/ui/KokoEntryButton.js.map +1 -0
  271. package/lib/module/ui/KokoObserver.js +516 -0
  272. package/lib/module/ui/KokoObserver.js.map +1 -0
  273. package/lib/module/ui/KokoOverlayLayer.js +39 -0
  274. package/lib/module/ui/KokoOverlayLayer.js.map +1 -0
  275. package/lib/module/ui/KokoSubtitle.js +90 -0
  276. package/lib/module/ui/KokoSubtitle.js.map +1 -0
  277. package/lib/module/ui/KokoTaskPanel.js +316 -0
  278. package/lib/module/ui/KokoTaskPanel.js.map +1 -0
  279. package/lib/module/ui/hostOverlay.js +120 -0
  280. package/lib/module/ui/hostOverlay.js.map +1 -0
  281. package/lib/module/ui/icons.js +124 -0
  282. package/lib/module/ui/icons.js.map +1 -0
  283. package/lib/module/ui/progressChrome.js +58 -0
  284. package/lib/module/ui/progressChrome.js.map +1 -0
  285. package/lib/module/ui/safeArea.js +92 -0
  286. package/lib/module/ui/safeArea.js.map +1 -0
  287. package/lib/module/ui/useOverlayOrigin.js +36 -0
  288. package/lib/module/ui/useOverlayOrigin.js.map +1 -0
  289. package/lib/typescript/commonjs/KokoAgent.d.ts +167 -0
  290. package/lib/typescript/commonjs/KokoAgent.d.ts.map +1 -0
  291. package/lib/typescript/commonjs/assist/OnDeviceAssist.d.ts +31 -0
  292. package/lib/typescript/commonjs/assist/OnDeviceAssist.d.ts.map +1 -0
  293. package/lib/typescript/commonjs/assist/intentClassify.d.ts +18 -0
  294. package/lib/typescript/commonjs/assist/intentClassify.d.ts.map +1 -0
  295. package/lib/typescript/commonjs/assist/nodeRank.d.ts +32 -0
  296. package/lib/typescript/commonjs/assist/nodeRank.d.ts.map +1 -0
  297. package/lib/typescript/commonjs/assist/ocrTarget.d.ts +25 -0
  298. package/lib/typescript/commonjs/assist/ocrTarget.d.ts.map +1 -0
  299. package/lib/typescript/commonjs/assist/webVisualChange.d.ts +6 -0
  300. package/lib/typescript/commonjs/assist/webVisualChange.d.ts.map +1 -0
  301. package/lib/typescript/commonjs/client/ActionOutcomeUnknownError.d.ts +13 -0
  302. package/lib/typescript/commonjs/client/ActionOutcomeUnknownError.d.ts.map +1 -0
  303. package/lib/typescript/commonjs/client/AgentSession.d.ts +56 -0
  304. package/lib/typescript/commonjs/client/AgentSession.d.ts.map +1 -0
  305. package/lib/typescript/commonjs/client/GatewayClient.d.ts +149 -0
  306. package/lib/typescript/commonjs/client/GatewayClient.d.ts.map +1 -0
  307. package/lib/typescript/commonjs/client/OperationReplayGuard.d.ts +13 -0
  308. package/lib/typescript/commonjs/client/OperationReplayGuard.d.ts.map +1 -0
  309. package/lib/typescript/commonjs/client/RunCheckpoint.d.ts +57 -0
  310. package/lib/typescript/commonjs/client/RunCheckpoint.d.ts.map +1 -0
  311. package/lib/typescript/commonjs/client/loopDetect.d.ts +15 -0
  312. package/lib/typescript/commonjs/client/loopDetect.d.ts.map +1 -0
  313. package/lib/typescript/commonjs/client/recentSearch.d.ts +5 -0
  314. package/lib/typescript/commonjs/client/recentSearch.d.ts.map +1 -0
  315. package/lib/typescript/commonjs/client/walletChoiceGuard.d.ts +4 -0
  316. package/lib/typescript/commonjs/client/walletChoiceGuard.d.ts.map +1 -0
  317. package/lib/typescript/commonjs/client/webResultCategory.d.ts +5 -0
  318. package/lib/typescript/commonjs/client/webResultCategory.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/commercial/AccountStore.d.ts +17 -0
  320. package/lib/typescript/commonjs/commercial/AccountStore.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/commercial/AgentDebug.d.ts +25 -0
  322. package/lib/typescript/commonjs/commercial/AgentDebug.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/commercial/ExecutionGuard.d.ts +18 -0
  324. package/lib/typescript/commonjs/commercial/ExecutionGuard.d.ts.map +1 -0
  325. package/lib/typescript/commonjs/commercial/UsageBus.d.ts +18 -0
  326. package/lib/typescript/commonjs/commercial/UsageBus.d.ts.map +1 -0
  327. package/lib/typescript/commonjs/commercial/branding.d.ts +25 -0
  328. package/lib/typescript/commonjs/commercial/branding.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/commercial/devMode.d.ts +26 -0
  330. package/lib/typescript/commonjs/commercial/devMode.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/commercial/trust.d.ts +21 -0
  332. package/lib/typescript/commonjs/commercial/trust.d.ts.map +1 -0
  333. package/lib/typescript/commonjs/confirmation/gate.d.ts +18 -0
  334. package/lib/typescript/commonjs/confirmation/gate.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/cursor/CursorOverlay.d.ts +13 -0
  336. package/lib/typescript/commonjs/cursor/CursorOverlay.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/cursor/PointerHand.d.ts +16 -0
  338. package/lib/typescript/commonjs/cursor/PointerHand.d.ts.map +1 -0
  339. package/lib/typescript/commonjs/cursor/controller.d.ts +30 -0
  340. package/lib/typescript/commonjs/cursor/controller.d.ts.map +1 -0
  341. package/lib/typescript/commonjs/cursor/pointer.d.ts +23 -0
  342. package/lib/typescript/commonjs/cursor/pointer.d.ts.map +1 -0
  343. package/lib/typescript/commonjs/debug/KokoRemoteSmoke.d.ts +96 -0
  344. package/lib/typescript/commonjs/debug/KokoRemoteSmoke.d.ts.map +1 -0
  345. package/lib/typescript/commonjs/explore/ExplorationGraph.d.ts +96 -0
  346. package/lib/typescript/commonjs/explore/ExplorationGraph.d.ts.map +1 -0
  347. package/lib/typescript/commonjs/explore/bootstrapExplore.d.ts +40 -0
  348. package/lib/typescript/commonjs/explore/bootstrapExplore.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/host/HostActions.d.ts +101 -0
  350. package/lib/typescript/commonjs/host/HostActions.d.ts.map +1 -0
  351. package/lib/typescript/commonjs/i18n/index.d.ts +20 -0
  352. package/lib/typescript/commonjs/i18n/index.d.ts.map +1 -0
  353. package/lib/typescript/commonjs/i18n/runtimeMessages.d.ts +178 -0
  354. package/lib/typescript/commonjs/i18n/runtimeMessages.d.ts.map +1 -0
  355. package/lib/typescript/commonjs/index.d.ts +66 -0
  356. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/native/NativeBridge.d.ts +70 -0
  358. package/lib/typescript/commonjs/native/NativeBridge.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/native/navigationLabel.d.ts +4 -0
  360. package/lib/typescript/commonjs/native/navigationLabel.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/native/normalizeViewTree.d.ts +4 -0
  362. package/lib/typescript/commonjs/native/normalizeViewTree.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/native/pruneOffscreen.d.ts +3 -0
  364. package/lib/typescript/commonjs/native/pruneOffscreen.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/native/scrollViewport.d.ts +13 -0
  366. package/lib/typescript/commonjs/native/scrollViewport.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/package.json +1 -0
  368. package/lib/typescript/commonjs/privacy/redact.d.ts +9 -0
  369. package/lib/typescript/commonjs/privacy/redact.d.ts.map +1 -0
  370. package/lib/typescript/commonjs/privacy/screenEvidence.d.ts +14 -0
  371. package/lib/typescript/commonjs/privacy/screenEvidence.d.ts.map +1 -0
  372. package/lib/typescript/commonjs/privacy/screenModel.d.ts +26 -0
  373. package/lib/typescript/commonjs/privacy/screenModel.d.ts.map +1 -0
  374. package/lib/typescript/commonjs/privacy/sensitiveScreen.d.ts +8 -0
  375. package/lib/typescript/commonjs/privacy/sensitiveScreen.d.ts.map +1 -0
  376. package/lib/typescript/commonjs/privacy/userGate.d.ts +58 -0
  377. package/lib/typescript/commonjs/privacy/userGate.d.ts.map +1 -0
  378. package/lib/typescript/commonjs/protocol/actions.d.ts +7 -0
  379. package/lib/typescript/commonjs/protocol/actions.d.ts.map +1 -0
  380. package/lib/typescript/commonjs/provider/HostAppearanceStore.d.ts +64 -0
  381. package/lib/typescript/commonjs/provider/HostAppearanceStore.d.ts.map +1 -0
  382. package/lib/typescript/commonjs/provider/KokoProvider.d.ts +39 -0
  383. package/lib/typescript/commonjs/provider/KokoProvider.d.ts.map +1 -0
  384. package/lib/typescript/commonjs/provider/KokoUiContext.d.ts +22 -0
  385. package/lib/typescript/commonjs/provider/KokoUiContext.d.ts.map +1 -0
  386. package/lib/typescript/commonjs/selector/match.d.ts +27 -0
  387. package/lib/typescript/commonjs/selector/match.d.ts.map +1 -0
  388. package/lib/typescript/commonjs/task/TaskStore.d.ts +65 -0
  389. package/lib/typescript/commonjs/task/TaskStore.d.ts.map +1 -0
  390. package/lib/typescript/commonjs/task/types.d.ts +66 -0
  391. package/lib/typescript/commonjs/task/types.d.ts.map +1 -0
  392. package/lib/typescript/commonjs/task/useTaskStore.d.ts +3 -0
  393. package/lib/typescript/commonjs/task/useTaskStore.d.ts.map +1 -0
  394. package/lib/typescript/commonjs/types.d.ts +372 -0
  395. package/lib/typescript/commonjs/types.d.ts.map +1 -0
  396. package/lib/typescript/commonjs/ui/KokoChatSheet.d.ts +8 -0
  397. package/lib/typescript/commonjs/ui/KokoChatSheet.d.ts.map +1 -0
  398. package/lib/typescript/commonjs/ui/KokoComposer.d.ts +13 -0
  399. package/lib/typescript/commonjs/ui/KokoComposer.d.ts.map +1 -0
  400. package/lib/typescript/commonjs/ui/KokoDialogHost.d.ts +32 -0
  401. package/lib/typescript/commonjs/ui/KokoDialogHost.d.ts.map +1 -0
  402. package/lib/typescript/commonjs/ui/KokoEntryButton.d.ts +18 -0
  403. package/lib/typescript/commonjs/ui/KokoEntryButton.d.ts.map +1 -0
  404. package/lib/typescript/commonjs/ui/KokoObserver.d.ts +13 -0
  405. package/lib/typescript/commonjs/ui/KokoObserver.d.ts.map +1 -0
  406. package/lib/typescript/commonjs/ui/KokoOverlayLayer.d.ts +35 -0
  407. package/lib/typescript/commonjs/ui/KokoOverlayLayer.d.ts.map +1 -0
  408. package/lib/typescript/commonjs/ui/KokoSubtitle.d.ts +7 -0
  409. package/lib/typescript/commonjs/ui/KokoSubtitle.d.ts.map +1 -0
  410. package/lib/typescript/commonjs/ui/KokoTaskPanel.d.ts +7 -0
  411. package/lib/typescript/commonjs/ui/KokoTaskPanel.d.ts.map +1 -0
  412. package/lib/typescript/commonjs/ui/hostOverlay.d.ts +28 -0
  413. package/lib/typescript/commonjs/ui/hostOverlay.d.ts.map +1 -0
  414. package/lib/typescript/commonjs/ui/icons.d.ts +26 -0
  415. package/lib/typescript/commonjs/ui/icons.d.ts.map +1 -0
  416. package/lib/typescript/commonjs/ui/progressChrome.d.ts +21 -0
  417. package/lib/typescript/commonjs/ui/progressChrome.d.ts.map +1 -0
  418. package/lib/typescript/commonjs/ui/safeArea.d.ts +12 -0
  419. package/lib/typescript/commonjs/ui/safeArea.d.ts.map +1 -0
  420. package/lib/typescript/commonjs/ui/useOverlayOrigin.d.ts +22 -0
  421. package/lib/typescript/commonjs/ui/useOverlayOrigin.d.ts.map +1 -0
  422. package/lib/typescript/module/KokoAgent.d.ts +167 -0
  423. package/lib/typescript/module/KokoAgent.d.ts.map +1 -0
  424. package/lib/typescript/module/assist/OnDeviceAssist.d.ts +31 -0
  425. package/lib/typescript/module/assist/OnDeviceAssist.d.ts.map +1 -0
  426. package/lib/typescript/module/assist/intentClassify.d.ts +18 -0
  427. package/lib/typescript/module/assist/intentClassify.d.ts.map +1 -0
  428. package/lib/typescript/module/assist/nodeRank.d.ts +32 -0
  429. package/lib/typescript/module/assist/nodeRank.d.ts.map +1 -0
  430. package/lib/typescript/module/assist/ocrTarget.d.ts +25 -0
  431. package/lib/typescript/module/assist/ocrTarget.d.ts.map +1 -0
  432. package/lib/typescript/module/assist/webVisualChange.d.ts +6 -0
  433. package/lib/typescript/module/assist/webVisualChange.d.ts.map +1 -0
  434. package/lib/typescript/module/client/ActionOutcomeUnknownError.d.ts +13 -0
  435. package/lib/typescript/module/client/ActionOutcomeUnknownError.d.ts.map +1 -0
  436. package/lib/typescript/module/client/AgentSession.d.ts +56 -0
  437. package/lib/typescript/module/client/AgentSession.d.ts.map +1 -0
  438. package/lib/typescript/module/client/GatewayClient.d.ts +149 -0
  439. package/lib/typescript/module/client/GatewayClient.d.ts.map +1 -0
  440. package/lib/typescript/module/client/OperationReplayGuard.d.ts +13 -0
  441. package/lib/typescript/module/client/OperationReplayGuard.d.ts.map +1 -0
  442. package/lib/typescript/module/client/RunCheckpoint.d.ts +57 -0
  443. package/lib/typescript/module/client/RunCheckpoint.d.ts.map +1 -0
  444. package/lib/typescript/module/client/loopDetect.d.ts +15 -0
  445. package/lib/typescript/module/client/loopDetect.d.ts.map +1 -0
  446. package/lib/typescript/module/client/recentSearch.d.ts +5 -0
  447. package/lib/typescript/module/client/recentSearch.d.ts.map +1 -0
  448. package/lib/typescript/module/client/walletChoiceGuard.d.ts +4 -0
  449. package/lib/typescript/module/client/walletChoiceGuard.d.ts.map +1 -0
  450. package/lib/typescript/module/client/webResultCategory.d.ts +5 -0
  451. package/lib/typescript/module/client/webResultCategory.d.ts.map +1 -0
  452. package/lib/typescript/module/commercial/AccountStore.d.ts +17 -0
  453. package/lib/typescript/module/commercial/AccountStore.d.ts.map +1 -0
  454. package/lib/typescript/module/commercial/AgentDebug.d.ts +25 -0
  455. package/lib/typescript/module/commercial/AgentDebug.d.ts.map +1 -0
  456. package/lib/typescript/module/commercial/ExecutionGuard.d.ts +18 -0
  457. package/lib/typescript/module/commercial/ExecutionGuard.d.ts.map +1 -0
  458. package/lib/typescript/module/commercial/UsageBus.d.ts +18 -0
  459. package/lib/typescript/module/commercial/UsageBus.d.ts.map +1 -0
  460. package/lib/typescript/module/commercial/branding.d.ts +25 -0
  461. package/lib/typescript/module/commercial/branding.d.ts.map +1 -0
  462. package/lib/typescript/module/commercial/devMode.d.ts +26 -0
  463. package/lib/typescript/module/commercial/devMode.d.ts.map +1 -0
  464. package/lib/typescript/module/commercial/trust.d.ts +21 -0
  465. package/lib/typescript/module/commercial/trust.d.ts.map +1 -0
  466. package/lib/typescript/module/confirmation/gate.d.ts +18 -0
  467. package/lib/typescript/module/confirmation/gate.d.ts.map +1 -0
  468. package/lib/typescript/module/cursor/CursorOverlay.d.ts +13 -0
  469. package/lib/typescript/module/cursor/CursorOverlay.d.ts.map +1 -0
  470. package/lib/typescript/module/cursor/PointerHand.d.ts +16 -0
  471. package/lib/typescript/module/cursor/PointerHand.d.ts.map +1 -0
  472. package/lib/typescript/module/cursor/controller.d.ts +30 -0
  473. package/lib/typescript/module/cursor/controller.d.ts.map +1 -0
  474. package/lib/typescript/module/cursor/pointer.d.ts +23 -0
  475. package/lib/typescript/module/cursor/pointer.d.ts.map +1 -0
  476. package/lib/typescript/module/debug/KokoRemoteSmoke.d.ts +96 -0
  477. package/lib/typescript/module/debug/KokoRemoteSmoke.d.ts.map +1 -0
  478. package/lib/typescript/module/explore/ExplorationGraph.d.ts +96 -0
  479. package/lib/typescript/module/explore/ExplorationGraph.d.ts.map +1 -0
  480. package/lib/typescript/module/explore/bootstrapExplore.d.ts +40 -0
  481. package/lib/typescript/module/explore/bootstrapExplore.d.ts.map +1 -0
  482. package/lib/typescript/module/host/HostActions.d.ts +101 -0
  483. package/lib/typescript/module/host/HostActions.d.ts.map +1 -0
  484. package/lib/typescript/module/i18n/index.d.ts +20 -0
  485. package/lib/typescript/module/i18n/index.d.ts.map +1 -0
  486. package/lib/typescript/module/i18n/runtimeMessages.d.ts +178 -0
  487. package/lib/typescript/module/i18n/runtimeMessages.d.ts.map +1 -0
  488. package/lib/typescript/module/index.d.ts +66 -0
  489. package/lib/typescript/module/index.d.ts.map +1 -0
  490. package/lib/typescript/module/native/NativeBridge.d.ts +70 -0
  491. package/lib/typescript/module/native/NativeBridge.d.ts.map +1 -0
  492. package/lib/typescript/module/native/navigationLabel.d.ts +4 -0
  493. package/lib/typescript/module/native/navigationLabel.d.ts.map +1 -0
  494. package/lib/typescript/module/native/normalizeViewTree.d.ts +4 -0
  495. package/lib/typescript/module/native/normalizeViewTree.d.ts.map +1 -0
  496. package/lib/typescript/module/native/pruneOffscreen.d.ts +3 -0
  497. package/lib/typescript/module/native/pruneOffscreen.d.ts.map +1 -0
  498. package/lib/typescript/module/native/scrollViewport.d.ts +13 -0
  499. package/lib/typescript/module/native/scrollViewport.d.ts.map +1 -0
  500. package/lib/typescript/module/package.json +1 -0
  501. package/lib/typescript/module/privacy/redact.d.ts +9 -0
  502. package/lib/typescript/module/privacy/redact.d.ts.map +1 -0
  503. package/lib/typescript/module/privacy/screenEvidence.d.ts +14 -0
  504. package/lib/typescript/module/privacy/screenEvidence.d.ts.map +1 -0
  505. package/lib/typescript/module/privacy/screenModel.d.ts +26 -0
  506. package/lib/typescript/module/privacy/screenModel.d.ts.map +1 -0
  507. package/lib/typescript/module/privacy/sensitiveScreen.d.ts +8 -0
  508. package/lib/typescript/module/privacy/sensitiveScreen.d.ts.map +1 -0
  509. package/lib/typescript/module/privacy/userGate.d.ts +58 -0
  510. package/lib/typescript/module/privacy/userGate.d.ts.map +1 -0
  511. package/lib/typescript/module/protocol/actions.d.ts +7 -0
  512. package/lib/typescript/module/protocol/actions.d.ts.map +1 -0
  513. package/lib/typescript/module/provider/HostAppearanceStore.d.ts +64 -0
  514. package/lib/typescript/module/provider/HostAppearanceStore.d.ts.map +1 -0
  515. package/lib/typescript/module/provider/KokoProvider.d.ts +39 -0
  516. package/lib/typescript/module/provider/KokoProvider.d.ts.map +1 -0
  517. package/lib/typescript/module/provider/KokoUiContext.d.ts +22 -0
  518. package/lib/typescript/module/provider/KokoUiContext.d.ts.map +1 -0
  519. package/lib/typescript/module/selector/match.d.ts +27 -0
  520. package/lib/typescript/module/selector/match.d.ts.map +1 -0
  521. package/lib/typescript/module/task/TaskStore.d.ts +65 -0
  522. package/lib/typescript/module/task/TaskStore.d.ts.map +1 -0
  523. package/lib/typescript/module/task/types.d.ts +66 -0
  524. package/lib/typescript/module/task/types.d.ts.map +1 -0
  525. package/lib/typescript/module/task/useTaskStore.d.ts +3 -0
  526. package/lib/typescript/module/task/useTaskStore.d.ts.map +1 -0
  527. package/lib/typescript/module/types.d.ts +372 -0
  528. package/lib/typescript/module/types.d.ts.map +1 -0
  529. package/lib/typescript/module/ui/KokoChatSheet.d.ts +8 -0
  530. package/lib/typescript/module/ui/KokoChatSheet.d.ts.map +1 -0
  531. package/lib/typescript/module/ui/KokoComposer.d.ts +13 -0
  532. package/lib/typescript/module/ui/KokoComposer.d.ts.map +1 -0
  533. package/lib/typescript/module/ui/KokoDialogHost.d.ts +32 -0
  534. package/lib/typescript/module/ui/KokoDialogHost.d.ts.map +1 -0
  535. package/lib/typescript/module/ui/KokoEntryButton.d.ts +18 -0
  536. package/lib/typescript/module/ui/KokoEntryButton.d.ts.map +1 -0
  537. package/lib/typescript/module/ui/KokoObserver.d.ts +13 -0
  538. package/lib/typescript/module/ui/KokoObserver.d.ts.map +1 -0
  539. package/lib/typescript/module/ui/KokoOverlayLayer.d.ts +35 -0
  540. package/lib/typescript/module/ui/KokoOverlayLayer.d.ts.map +1 -0
  541. package/lib/typescript/module/ui/KokoSubtitle.d.ts +7 -0
  542. package/lib/typescript/module/ui/KokoSubtitle.d.ts.map +1 -0
  543. package/lib/typescript/module/ui/KokoTaskPanel.d.ts +7 -0
  544. package/lib/typescript/module/ui/KokoTaskPanel.d.ts.map +1 -0
  545. package/lib/typescript/module/ui/hostOverlay.d.ts +28 -0
  546. package/lib/typescript/module/ui/hostOverlay.d.ts.map +1 -0
  547. package/lib/typescript/module/ui/icons.d.ts +26 -0
  548. package/lib/typescript/module/ui/icons.d.ts.map +1 -0
  549. package/lib/typescript/module/ui/progressChrome.d.ts +21 -0
  550. package/lib/typescript/module/ui/progressChrome.d.ts.map +1 -0
  551. package/lib/typescript/module/ui/safeArea.d.ts +12 -0
  552. package/lib/typescript/module/ui/safeArea.d.ts.map +1 -0
  553. package/lib/typescript/module/ui/useOverlayOrigin.d.ts +22 -0
  554. package/lib/typescript/module/ui/useOverlayOrigin.d.ts.map +1 -0
  555. package/package.json +153 -0
  556. package/react-native.config.js +12 -0
  557. package/src/KokoAgent.ts +1415 -0
  558. package/src/assist/OnDeviceAssist.ts +133 -0
  559. package/src/assist/intentClassify.ts +122 -0
  560. package/src/assist/nodeRank.ts +167 -0
  561. package/src/assist/ocrTarget.ts +146 -0
  562. package/src/assist/webVisualChange.ts +24 -0
  563. package/src/client/ActionOutcomeUnknownError.ts +18 -0
  564. package/src/client/AgentSession.ts +952 -0
  565. package/src/client/GatewayClient.ts +439 -0
  566. package/src/client/OperationReplayGuard.ts +61 -0
  567. package/src/client/RunCheckpoint.ts +154 -0
  568. package/src/client/loopDetect.ts +213 -0
  569. package/src/client/recentSearch.ts +47 -0
  570. package/src/client/walletChoiceGuard.ts +15 -0
  571. package/src/client/webResultCategory.ts +28 -0
  572. package/src/commercial/AccountStore.ts +85 -0
  573. package/src/commercial/AgentDebug.ts +142 -0
  574. package/src/commercial/ExecutionGuard.ts +67 -0
  575. package/src/commercial/UsageBus.ts +44 -0
  576. package/src/commercial/branding.ts +97 -0
  577. package/src/commercial/devMode.ts +48 -0
  578. package/src/commercial/trust.ts +67 -0
  579. package/src/confirmation/gate.ts +82 -0
  580. package/src/cursor/CursorOverlay.tsx +138 -0
  581. package/src/cursor/PointerHand.tsx +49 -0
  582. package/src/cursor/controller.ts +98 -0
  583. package/src/cursor/pointer.ts +40 -0
  584. package/src/debug/KokoRemoteSmoke.tsx +561 -0
  585. package/src/explore/ExplorationGraph.ts +518 -0
  586. package/src/explore/bootstrapExplore.ts +89 -0
  587. package/src/host/HostActions.ts +349 -0
  588. package/src/i18n/index.ts +229 -0
  589. package/src/i18n/runtimeMessages.ts +180 -0
  590. package/src/index.ts +203 -0
  591. package/src/native/NativeBridge.ts +207 -0
  592. package/src/native/navigationLabel.ts +11 -0
  593. package/src/native/normalizeViewTree.ts +16 -0
  594. package/src/native/pruneOffscreen.ts +72 -0
  595. package/src/native/scrollViewport.ts +51 -0
  596. package/src/privacy/redact.ts +115 -0
  597. package/src/privacy/screenEvidence.ts +55 -0
  598. package/src/privacy/screenModel.ts +504 -0
  599. package/src/privacy/sensitiveScreen.ts +55 -0
  600. package/src/privacy/userGate.ts +233 -0
  601. package/src/protocol/actions.ts +66 -0
  602. package/src/provider/HostAppearanceStore.ts +148 -0
  603. package/src/provider/KokoProvider.tsx +118 -0
  604. package/src/provider/KokoUiContext.tsx +162 -0
  605. package/src/selector/match.ts +417 -0
  606. package/src/task/TaskStore.ts +387 -0
  607. package/src/task/types.ts +82 -0
  608. package/src/task/useTaskStore.ts +9 -0
  609. package/src/types.ts +318 -0
  610. package/src/ui/KokoChatSheet.tsx +930 -0
  611. package/src/ui/KokoComposer.tsx +174 -0
  612. package/src/ui/KokoDialogHost.tsx +249 -0
  613. package/src/ui/KokoEntryButton.tsx +74 -0
  614. package/src/ui/KokoObserver.tsx +587 -0
  615. package/src/ui/KokoOverlayLayer.tsx +53 -0
  616. package/src/ui/KokoSubtitle.tsx +80 -0
  617. package/src/ui/KokoTaskPanel.tsx +299 -0
  618. package/src/ui/hostOverlay.tsx +148 -0
  619. package/src/ui/icons.tsx +145 -0
  620. package/src/ui/progressChrome.ts +73 -0
  621. package/src/ui/safeArea.ts +95 -0
  622. package/src/ui/useOverlayOrigin.ts +29 -0
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Idle / dead-loop detection (mirrors SDK client + KokoAgent explore/escape).
5
+ * Stop on no-progress loops only — not because a goal needs many steps.
6
+ */
7
+
8
+ export function actionFingerprint(item) {
9
+ const tool = item.tool;
10
+ const args = item.args ?? {};
11
+ if (tool === "tap") {
12
+ const sel = args.selector;
13
+ const matchKey = sel?.match != null ? JSON.stringify(sel.match).slice(0, 100) : "";
14
+ const nodeId = String(args.nodeId || "").trim();
15
+ const label = String(args.label || "").trim();
16
+ return `tap:${(matchKey || nodeId || label || "target").slice(0, 100)}`;
17
+ }
18
+ if (tool === "type") {
19
+ return `type:${String(args.text ?? "").slice(0, 40)}`;
20
+ }
21
+ if (tool === "find") {
22
+ return `find:${JSON.stringify(args.match ?? {}).slice(0, 100)}`;
23
+ }
24
+ if (tool === "swipe") {
25
+ const from = args.from;
26
+ const to = args.to;
27
+ return `swipe:${Math.round((from?.x ?? 0) / 40)},${Math.round((from?.y ?? 0) / 40)}→${Math.round((to?.x ?? 0) / 40)},${Math.round((to?.y ?? 0) / 40)}`;
28
+ }
29
+ if (tool === "pinch") {
30
+ const c = args.center;
31
+ const scale = Number(args.scale ?? 1);
32
+ return `pinch:${Math.round((c?.x ?? 0) / 40)},${Math.round((c?.y ?? 0) / 40)}×${scale.toFixed(2)}`;
33
+ }
34
+ if (tool === "dump") {
35
+ if (/empty|未识别|screen:\s*\(empty\)/i.test(item.result)) return "dump:empty";
36
+ return `dump:${item.result.replace(/\s+/g, " ").slice(0, 48)}`;
37
+ }
38
+ if (tool === "ask_user") return `ask:${String(args.question ?? "").slice(0, 40)}`;
39
+ return `${tool}:${JSON.stringify(args).slice(0, 60)}`;
40
+ }
41
+ function screenOf(item) {
42
+ const m = item.result.match(/(?:^|\|\|\s*)screen:\s*([^\r\n]*)/i);
43
+ return m?.[1]?.trim() ?? "";
44
+ }
45
+
46
+ /** Older hosts may return body text without a screen marker; retain all of it. */
47
+ function observationOf(item) {
48
+ return (screenOf(item) || item.result).replace(/\s+/g, " ").trim();
49
+ }
50
+ function sameObservation(items) {
51
+ return items.length >= 2 && items.every(h => observationOf(h) === observationOf(items[0]));
52
+ }
53
+ function isFail(item) {
54
+ if (typeof item.ok === "boolean") return !item.ok;
55
+ return /^(?:fail(?:ed)?|error|null|tap_failed|tap_noop|scroll_noop|no_focus|empty|未识别)(?:\b|[::\s(]|$)/i.test(item.result.trim());
56
+ }
57
+
58
+ /** Actions whose whole point is to change something on screen. */
59
+ const MUTATING = new Set(["tap", "swipe", "pinch", "type"]);
60
+
61
+ /** The client ran it and the screen did not react. */
62
+ function hadNoEffect(item) {
63
+ return item.ok === false || /^(?:tap_noop|tap_failed|scroll_noop|no_focus)\b/i.test(item.result.trim());
64
+ }
65
+
66
+ /**
67
+ * Selector wording drifts between retries — grounded text, then the a11y
68
+ * label, then a nodeId, then a coordinate fallback — so fingerprint equality
69
+ * misses the most common stall: aiming at the same place through a different
70
+ * description each time.
71
+ *
72
+ * Comparing whole screens across steps does not catch it either, because a
73
+ * rotating ad or carousel changes the fingerprint while the page stays put.
74
+ * Trust the per-step verdict instead: the client captures before and after
75
+ * around each action, moments apart, and marks it `tap_noop` when nothing
76
+ * moved. A window whose only attempts to change something all reported no
77
+ * effect is stuck, however the calls were phrased and whatever else animates.
78
+ */
79
+ function madeNoProgress(history) {
80
+ const mutating = history.slice(-4).filter(h => MUTATING.has(h.tool));
81
+ const preDispatch = mutating.filter(h => /^pre_dispatch:/i.test(h.result));
82
+ const dispatched = mutating.filter(h => !/^pre_dispatch:/i.test(h.result));
83
+ if (preDispatch.length >= 3 && preDispatch.length === mutating.length) return true;
84
+ const dead = dispatched.filter(hadNoEffect);
85
+ return dead.length >= 2 && dead.length === dispatched.length;
86
+ }
87
+
88
+ /** Bound interleaved find/dump loops on one unchanged observed screen. */
89
+ function repeatedReadOnly(history) {
90
+ const tail = history.slice(-8);
91
+ if (tail.length < 8 || !tail.every(h => h.tool === 'find' || h.tool === 'dump')) return false;
92
+ const finds = tail.filter(h => h.tool === 'find');
93
+ const screens = tail.map(screenOf).filter(Boolean);
94
+ if (finds.length < 3 || screens.length < 3 || !screens.every(s => s === screens[0])) return false;
95
+ const fps = finds.map(actionFingerprint);
96
+ return fps.some(fp => fps.filter(value => value === fp).length >= 3) || finds.every(isFail);
97
+ }
98
+ export function isLooping(history) {
99
+ const recent = history.slice(-5);
100
+ if (recent.length < 3) return false;
101
+ if (madeNoProgress(history)) return true;
102
+ if (repeatedReadOnly(history)) return true;
103
+ const fps = recent.map(actionFingerprint);
104
+ const last = fps[fps.length - 1];
105
+ const sameFpCount = fps.filter(f => f === last).length;
106
+ const screenStagnant = recent.length >= 3 && sameObservation(recent);
107
+ const lastThree = recent.slice(-3);
108
+ const allFail = lastThree.every(isFail);
109
+ const identicalResults = lastThree.length === 3 && lastThree.every(h => h.result === lastThree[0].result);
110
+
111
+ // dump/find are observe — identical verify dumps must not abort mid-goal.
112
+ if (sameFpCount >= 3) {
113
+ const lastTool = recent[recent.length - 1]?.tool;
114
+ if (lastTool !== "dump" && lastTool !== "find") {
115
+ if (allFail || identicalResults || screenStagnant) return true;
116
+ }
117
+ }
118
+ if (recent.length >= 4) {
119
+ const a = fps[fps.length - 1];
120
+ const b = fps[fps.length - 2];
121
+ if (a && b && a !== b && fps[fps.length - 3] === a && fps[fps.length - 4] === b) {
122
+ // Alternating actions are common in valid workflows (select/continue,
123
+ // increment/confirm, tap/verify). Only stop when each phase also returns
124
+ // to the same observation, rather than when actions alone form A-B-A-B.
125
+ const cycle = recent.slice(-4);
126
+ if (observationOf(cycle[0]) === observationOf(cycle[2]) && observationOf(cycle[1]) === observationOf(cycle[3])) return true;
127
+ }
128
+ }
129
+
130
+ // Observe-only thrash: a couple dumps for verify is ok; 3+ identical scans = stuck.
131
+ const trailing = recent.slice(-3);
132
+ if (trailing.length >= 3 && trailing.every(h => h.tool === "dump") && sameObservation(trailing)) {
133
+ return true;
134
+ }
135
+ const fails = recent.filter(isFail);
136
+ if (fails.length >= 3) {
137
+ const failFps = fails.map(actionFingerprint);
138
+ const failScreens = fails.map(screenOf).filter(Boolean);
139
+ const sameScreen = failScreens.length !== fails.length || failScreens.every(s => s === failScreens[0]);
140
+ if (failFps.length >= 3 && sameScreen && failFps.every(f => f === failFps[0])) return true;
141
+ }
142
+
143
+ // Same screen + same *mutating* tool = stuck. Pure dump/find is verification.
144
+ if (screenStagnant) {
145
+ const tools = recent.slice(-3).map(h => h.tool);
146
+ const t0 = tools[0];
147
+ if (tools.every(t => t === t0) && t0 !== "type" && t0 !== "dump" && t0 !== "find") {
148
+ return true;
149
+ }
150
+ }
151
+ return false;
152
+ }
153
+ export function isNearLoop(history) {
154
+ const recent = history.slice(-3);
155
+ if (recent.length < 2) return false;
156
+
157
+ // A bounded loading/verification wait can repeat; warn only if unchanged.
158
+ const trailingDumps = recent.slice(-2);
159
+ if (trailingDumps.length >= 2 && trailingDumps.every(h => h.tool === "dump") && sameObservation(trailingDumps)) {
160
+ return true;
161
+ }
162
+ const fps = recent.map(actionFingerprint);
163
+ const last = fps[fps.length - 1];
164
+ if (fps.filter(f => f === last).length < 2) return false;
165
+ if (sameObservation(recent)) return true;
166
+ return recent.slice(-2).every(isFail) || recent.slice(-2).every(h => h.result === recent[recent.length - 1].result);
167
+ }
168
+ export const LOOP_ESCAPE_HINT = `【恢复评估 — 近期观察或动作重复,先核验当前状态】
169
+ - 对照用户目标和最新证据:已验证全部结果才 done(true);重复或空转本身不代表成功
170
+ - 加载、转场或已提交操作仍待结果时,可以在客户端预算内用 dump 只读核验;持续不变则如实 done(false)说明未确认,不重提请求或重走已完成流程
171
+ - tap_noop / tap_failed 后先核对当前控件与状态;只有存在有证据且安全的替代动作才调整 selector、目标或路径,不能为了逃逸而猜点
172
+ - 与当前子目标相关的标题、正文、页码或状态持续变化时,同名或交替按钮仍可能是正常进展;不要按固定点击次数或动作序列认定循环
173
+ - 下一步控件确实可见、可操作且属于当前目标时再 tap/type;已满足的选中状态不重复切换
174
+ - 仅目标属于当前列表且有滚动区域边界时才 swipe 查找;手势起终点在区域内,不能用滑动猜测导航
175
+ - 数值控件按实际类型、当前值、范围和用户精度要求调整,不预设手势方向;无效果、到边界或缺少证据时说明受阻
176
+ - find/tap 使用最新能力里的文案或 id;缺少安全下一步时允许只读观察或如实结束,不强制切换路径`;
177
+ //# sourceMappingURL=loopDetect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["actionFingerprint","item","tool","args","sel","selector","matchKey","match","JSON","stringify","slice","nodeId","String","trim","label","text","from","to","Math","round","x","y","c","center","scale","Number","toFixed","test","result","replace","question","screenOf","m","observationOf","sameObservation","items","length","every","h","isFail","ok","MUTATING","Set","hadNoEffect","madeNoProgress","history","mutating","filter","has","preDispatch","dispatched","dead","repeatedReadOnly","tail","finds","screens","map","Boolean","s","fps","some","fp","value","isLooping","recent","last","sameFpCount","f","screenStagnant","lastThree","allFail","identicalResults","lastTool","a","b","cycle","trailing","fails","failFps","failScreens","sameScreen","tools","t0","t","isNearLoop","trailingDumps","LOOP_ESCAPE_HINT"],"sourceRoot":"../../../src","sources":["client/loopDetect.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ import { find } from "../selector/match.js";
4
+ const norm = s => s.trim().toLocaleLowerCase();
5
+ const isInput = n => /textfield|textinput|edittext|uitextview|textarea/i.test(n.type) && !/label$/i.test(n.type);
6
+ const label = n => n.text || n.accessibilityLabel || '';
7
+ const recent = /^(recent(?: searches| search| history)?|search history|最近(?:搜索|记录)?|搜索历史|历史搜索|历史记录)$/i;
8
+
9
+ /** Only replace a search query with a uniquely identified visible recent item. */
10
+ export function recentSearchAction(action, root, goal) {
11
+ if (action.tool !== 'type' || !root || !action.args.text.trim()) return null;
12
+ const query = norm(action.args.text);
13
+ if (!norm(goal).includes(query) || !/\b(open|find|search|look up)\b|打开|搜索|查找/i.test(goal) || /\b(type|enter|input|write|paste)\b|输入|键入|填写|粘贴/i.test(goal)) return null;
14
+ const nodes = [];
15
+ const walk = n => {
16
+ if (n.visible === false || n.enabled === false) return;
17
+ nodes.push(n);
18
+ n.children.forEach(walk);
19
+ };
20
+ walk(root);
21
+ const inputNodes = nodes.filter(isInput);
22
+ const fields = inputNodes.filter(n => !inputNodes.some(other => other.id.startsWith(n.id + '/')));
23
+ if (fields.length !== 1 || fields[0]?.secure || !/search|搜索|查找/i.test(label(fields[0]))) return null;
24
+ if (action.args.nodeId && action.args.nodeId !== fields[0].id && !fields[0].id.startsWith(action.args.nodeId + '/')) return null;
25
+ if (action.args.selector) {
26
+ const selected = find(root, action.args.selector);
27
+ if (!selected || selected.id !== fields[0].id && !fields[0].id.startsWith(selected.id + '/') && !selected.id.startsWith(fields[0].id + '/')) return null;
28
+ }
29
+ const headings = nodes.filter(n => recent.test(label(n).trim()));
30
+ const candidates = nodes.filter(n => n.clickable && norm(label(n)) === query && !isInput(n));
31
+ if (!headings.length || !candidates.length) return null;
32
+ // Require a local section containing a recent heading and the candidate, not
33
+ // just two unrelated nodes somewhere on the page. Ancestors that include the
34
+ // search input or cover most of the screen cannot establish that relation.
35
+ const related = candidates.filter(candidate => headings.some(heading => nodes.some(section => section.id !== root.id && section.id !== fields[0].id && heading.id.startsWith(section.id + '/') && candidate.id.startsWith(section.id + '/') && !fields[0].id.startsWith(section.id + '/') && section.frame.height < root.frame.height * 0.7)));
36
+ const leaves = related.filter(n => !related.some(other => other.id.startsWith(n.id + '/')));
37
+ if (leaves.length !== 1) return null;
38
+ return {
39
+ tool: 'tap',
40
+ args: {
41
+ nodeId: leaves[0].id,
42
+ label: label(leaves[0])
43
+ }
44
+ };
45
+ }
46
+ //# sourceMappingURL=recentSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["find","norm","s","trim","toLocaleLowerCase","isInput","n","test","type","label","text","accessibilityLabel","recent","recentSearchAction","action","root","goal","tool","args","query","includes","nodes","walk","visible","enabled","push","children","forEach","inputNodes","filter","fields","some","other","id","startsWith","length","secure","nodeId","selector","selected","headings","candidates","clickable","related","candidate","heading","section","frame","height","leaves"],"sourceRoot":"../../../src","sources":["client/recentSearch.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ /** Protect a host-wallet request from accidentally selecting an unrelated provider. */
4
+ export function wrongHostWalletChoice(goal, action, choices, aliases, observedLabel) {
5
+ if (action.tool !== 'tap' || !choices.length || !aliases.length) return false;
6
+ const normalize = s => s.toLocaleLowerCase().replace(/[^\p{L}\p{N}]/gu, '');
7
+ const g = normalize(goal);
8
+ // An explicitly named provider is a different user request, not a host-wallet default.
9
+ if (choices.some(choice => g.includes(normalize(choice)))) return false;
10
+ const matches = action.args.selector?.match || [];
11
+ const labels = [observedLabel, action.args.label, ...matches.flatMap(rule => ['text', 'accessibilityLabel'].map(key => rule[key]).filter(x => typeof x === 'string'))].filter(s => typeof s === 'string').map(normalize);
12
+ return choices.some(choice => labels.includes(normalize(choice)) && !aliases.some(alias => normalize(alias) === normalize(choice)));
13
+ }
14
+ //# sourceMappingURL=walletChoiceGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["wrongHostWalletChoice","goal","action","choices","aliases","observedLabel","tool","length","normalize","s","toLocaleLowerCase","replace","g","some","choice","includes","matches","args","selector","match","labels","label","flatMap","rule","map","key","filter","x","alias"],"sourceRoot":"../../../src","sources":["client/walletChoiceGuard.ts"],"mappings":";;AAEA;AACA,OAAO,SAASA,qBAAqBA,CAACC,IAAY,EAAEC,MAAqB,EAAEC,OAAiB,EAAEC,OAAiB,EAAEC,aAAsB,EAAW;EAChJ,IAAIH,MAAM,CAACI,IAAI,KAAK,KAAK,IAAI,CAACH,OAAO,CAACI,MAAM,IAAI,CAACH,OAAO,CAACG,MAAM,EAAE,OAAO,KAAK;EAC7E,MAAMC,SAAS,GAAIC,CAAS,IAAKA,CAAC,CAACC,iBAAiB,CAAC,CAAC,CAACC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;EACrF,MAAMC,CAAC,GAAGJ,SAAS,CAACP,IAAI,CAAC;EACzB;EACA,IAAIE,OAAO,CAACU,IAAI,CAACC,MAAM,IAAIF,CAAC,CAACG,QAAQ,CAACP,SAAS,CAACM,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;EACvE,MAAME,OAAO,GAAGd,MAAM,CAACe,IAAI,CAACC,QAAQ,EAAEC,KAAK,IAAI,EAAE;EACjD,MAAMC,MAAM,GAAG,CAACf,aAAa,EAAEH,MAAM,CAACe,IAAI,CAACI,KAAK,EAAE,GAAGL,OAAO,CAACM,OAAO,CAACC,IAAI,IACvE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAACC,GAAG,CAACC,GAAG,IAAKF,IAAI,CAA6BE,GAAG,CAAC,CAAC,CAACC,MAAM,CAAEC,CAAC,IAAkB,OAAOA,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CACpID,MAAM,CAAEjB,CAAC,IAAkB,OAAOA,CAAC,KAAK,QAAQ,CAAC,CAACe,GAAG,CAAChB,SAAS,CAAC;EACnE,OAAOL,OAAO,CAACU,IAAI,CAACC,MAAM,IAAIM,MAAM,CAACL,QAAQ,CAACP,SAAS,CAACM,MAAM,CAAC,CAAC,IAAI,CAACV,OAAO,CAACS,IAAI,CAACe,KAAK,IAAIpB,SAAS,CAACoB,KAAK,CAAC,KAAKpB,SAAS,CAACM,MAAM,CAAC,CAAC,CAAC;AACrI","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ /** Select a visible app-results category only when the user's query is on this page. */
4
+ export function webResultCategory(action, root, goal, history) {
5
+ if (action.tool !== 'dump' || !root || !/(connect|连接|連接)/i.test(goal) || !/(wallet|钱包|錢包)/i.test(goal)) return null;
6
+ const nodes = [];
7
+ const visit = node => {
8
+ if (node.visible === false || node.enabled === false) return;
9
+ nodes.push(node);
10
+ node.children.forEach(visit);
11
+ };
12
+ visit(root);
13
+ const norm = s => s.trim().toLocaleLowerCase();
14
+ const fields = nodes.filter(n => /textfield|textinput|edittext/i.test(n.type) && !/label$/i.test(n.type));
15
+ if (!fields.some(n => {
16
+ const value = norm(n.text || n.accessibilityLabel || '');
17
+ return value.length >= 3 && norm(goal).includes(value);
18
+ })) return null;
19
+ const names = new Set(nodes.map(n => norm(n.text || n.accessibilityLabel || '')));
20
+ if (![...names].some(name => /^(tokens|代币|代幣)$/.test(name))) return null;
21
+ const candidates = nodes.filter(n => n.clickable && /^(dapps|dapp|应用|應用)$/.test(norm(n.text || n.accessibilityLabel || '')) && !n.selected);
22
+ const leaves = candidates.filter(n => !candidates.some(other => other.id.startsWith(n.id + '/')));
23
+ if (leaves.length !== 1) return null;
24
+ const node = leaves[0];
25
+ if (history.some(h => h.tool === 'tap' && h.args?.nodeId === node.id)) return null;
26
+ return {
27
+ tool: 'tap',
28
+ args: {
29
+ nodeId: node.id,
30
+ label: node.text || node.accessibilityLabel
31
+ }
32
+ };
33
+ }
34
+ //# sourceMappingURL=webResultCategory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["webResultCategory","action","root","goal","history","tool","test","nodes","visit","node","visible","enabled","push","children","forEach","norm","s","trim","toLocaleLowerCase","fields","filter","n","type","some","value","text","accessibilityLabel","length","includes","names","Set","map","name","candidates","clickable","selected","leaves","other","id","startsWith","h","args","nodeId","label"],"sourceRoot":"../../../src","sources":["client/webResultCategory.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ import { GatewayClient } from "../client/GatewayClient.js";
4
+ import { DEFAULT_ENTITLEMENTS, emptyAccount } from "./branding.js";
5
+ import { isTrustedEntitlementHost } from "./trust.js";
6
+ import { resolveGatewayBaseUrl } from "../client/GatewayClient.js";
7
+ function stripUntrustedBranding(account, baseUrl) {
8
+ if (isTrustedEntitlementHost(baseUrl)) return account;
9
+ return {
10
+ ...account,
11
+ entitlements: {
12
+ ...account.entitlements,
13
+ custom_branding: false
14
+ }
15
+ };
16
+ }
17
+ class AccountStoreImpl {
18
+ account = null;
19
+ listeners = new Set();
20
+ inflight = null;
21
+ get() {
22
+ return this.account;
23
+ }
24
+ subscribe(listener) {
25
+ this.listeners.add(listener);
26
+ listener(this.account);
27
+ return () => {
28
+ this.listeners.delete(listener);
29
+ };
30
+ }
31
+ emit() {
32
+ for (const l of this.listeners) l(this.account);
33
+ }
34
+ async refresh(gateway) {
35
+ if (this.inflight) return this.inflight;
36
+ let baseUrl;
37
+ try {
38
+ baseUrl = resolveGatewayBaseUrl(gateway);
39
+ } catch {
40
+ if (!this.account) {
41
+ this.account = emptyAccount();
42
+ this.emit();
43
+ }
44
+ return this.account;
45
+ }
46
+ this.inflight = (async () => {
47
+ try {
48
+ const client = new GatewayClient(gateway);
49
+ const me = await client.me();
50
+ this.account = stripUntrustedBranding(me, baseUrl);
51
+ this.emit();
52
+ return this.account;
53
+ } catch {
54
+ if (!this.account) {
55
+ this.account = emptyAccount();
56
+ this.emit();
57
+ }
58
+ return this.account;
59
+ } finally {
60
+ this.inflight = null;
61
+ }
62
+ })();
63
+ return this.inflight;
64
+ }
65
+ entitlements() {
66
+ return this.account?.entitlements ?? {
67
+ ...DEFAULT_ENTITLEMENTS
68
+ };
69
+ }
70
+ plan() {
71
+ return this.account?.plan ?? 'free';
72
+ }
73
+ }
74
+ export const AccountStore = new AccountStoreImpl();
75
+ //# sourceMappingURL=AccountStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GatewayClient","DEFAULT_ENTITLEMENTS","emptyAccount","isTrustedEntitlementHost","resolveGatewayBaseUrl","stripUntrustedBranding","account","baseUrl","entitlements","custom_branding","AccountStoreImpl","listeners","Set","inflight","get","subscribe","listener","add","delete","emit","l","refresh","gateway","client","me","plan","AccountStore"],"sourceRoot":"../../../src","sources":["commercial/AccountStore.ts"],"mappings":";;AAAA,SAASA,aAAa,QAA4B,4BAAyB;AAE3E,SAASC,oBAAoB,EAAEC,YAAY,QAAQ,eAAY;AAC/D,SAASC,wBAAwB,QAAQ,YAAS;AAClD,SAASC,qBAAqB,QAAQ,4BAAyB;AAI/D,SAASC,sBAAsBA,CAC7BC,OAA4B,EAC5BC,OAAe,EACM;EACrB,IAAIJ,wBAAwB,CAACI,OAAO,CAAC,EAAE,OAAOD,OAAO;EACrD,OAAO;IACL,GAAGA,OAAO;IACVE,YAAY,EAAE;MACZ,GAAGF,OAAO,CAACE,YAAY;MACvBC,eAAe,EAAE;IACnB;EACF,CAAC;AACH;AAEA,MAAMC,gBAAgB,CAAC;EACbJ,OAAO,GAA+B,IAAI;EAC1CK,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAC/BC,QAAQ,GAA+C,IAAI;EAEnEC,GAAGA,CAAA,EAA+B;IAChC,OAAO,IAAI,CAACR,OAAO;EACrB;EAEAS,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAACL,SAAS,CAACM,GAAG,CAACD,QAAQ,CAAC;IAC5BA,QAAQ,CAAC,IAAI,CAACV,OAAO,CAAC;IACtB,OAAO,MAAM;MACX,IAAI,CAACK,SAAS,CAACO,MAAM,CAACF,QAAQ,CAAC;IACjC,CAAC;EACH;EAEQG,IAAIA,CAAA,EAAG;IACb,KAAK,MAAMC,CAAC,IAAI,IAAI,CAACT,SAAS,EAAES,CAAC,CAAC,IAAI,CAACd,OAAO,CAAC;EACjD;EAEA,MAAMe,OAAOA,CAACC,OAAsB,EAAuC;IACzE,IAAI,IAAI,CAACT,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;IACvC,IAAIN,OAAe;IACnB,IAAI;MACFA,OAAO,GAAGH,qBAAqB,CAACkB,OAAO,CAAC;IAC1C,CAAC,CAAC,MAAM;MACN,IAAI,CAAC,IAAI,CAAChB,OAAO,EAAE;QACjB,IAAI,CAACA,OAAO,GAAGJ,YAAY,CAAC,CAAC;QAC7B,IAAI,CAACiB,IAAI,CAAC,CAAC;MACb;MACA,OAAO,IAAI,CAACb,OAAO;IACrB;IACA,IAAI,CAACO,QAAQ,GAAG,CAAC,YAAY;MAC3B,IAAI;QACF,MAAMU,MAAM,GAAG,IAAIvB,aAAa,CAACsB,OAAO,CAAC;QACzC,MAAME,EAAE,GAAG,MAAMD,MAAM,CAACC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAClB,OAAO,GAAGD,sBAAsB,CAACmB,EAAE,EAAEjB,OAAO,CAAC;QAClD,IAAI,CAACY,IAAI,CAAC,CAAC;QACX,OAAO,IAAI,CAACb,OAAO;MACrB,CAAC,CAAC,MAAM;QACN,IAAI,CAAC,IAAI,CAACA,OAAO,EAAE;UACjB,IAAI,CAACA,OAAO,GAAGJ,YAAY,CAAC,CAAC;UAC7B,IAAI,CAACiB,IAAI,CAAC,CAAC;QACb;QACA,OAAO,IAAI,CAACb,OAAO;MACrB,CAAC,SAAS;QACR,IAAI,CAACO,QAAQ,GAAG,IAAI;MACtB;IACF,CAAC,EAAE,CAAC;IACJ,OAAO,IAAI,CAACA,QAAQ;EACtB;EAEAL,YAAYA,CAAA,EAAqB;IAC/B,OAAO,IAAI,CAACF,OAAO,EAAEE,YAAY,IAAI;MAAE,GAAGP;IAAqB,CAAC;EAClE;EAEAwB,IAAIA,CAAA,EAAe;IACjB,OAAO,IAAI,CAACnB,OAAO,EAAEmB,IAAI,IAAI,MAAM;EACrC;AACF;AAEA,OAAO,MAAMC,YAAY,GAAG,IAAIhB,gBAAgB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ import { resolveDebugLogging } from "./devMode.js";
4
+ import { extractAffordances } from "../privacy/screenModel.js";
5
+ import { HostActionsStore } from "../host/HostActions.js";
6
+ /**
7
+ * Developer-facing logs: what the SDK observed in the host App
8
+ * (controls / fields / actions). Never logs security policy internals.
9
+ */
10
+ export const AgentDebug = {
11
+ enabled(config) {
12
+ return resolveDebugLogging(config);
13
+ },
14
+ /** High-level run lifecycle (goal only, no policy). */
15
+ runStart(config, goal) {
16
+ if (!resolveDebugLogging(config)) return;
17
+ // eslint-disable-next-line no-console
18
+ console.log('[koko] 开始任务:', goal.slice(0, 120));
19
+ },
20
+ runEnd(config, summary, ok) {
21
+ if (!resolveDebugLogging(config)) return;
22
+ // eslint-disable-next-line no-console
23
+ console.log(ok ? '[koko] 任务完成:' : '[koko] 任务结束:', summary.slice(0, 160));
24
+ },
25
+ /** The dump stopped at its depth cap, so the page body never reached us. */
26
+ dumpTruncated(config, cap) {
27
+ if (!resolveDebugLogging(config)) return;
28
+ // eslint-disable-next-line no-console
29
+ console.warn(`[koko] 视图树在 maxDepth=${cap} 处被截断,页面正文可能完全缺失(只剩外层导航)。` + '请调大 dumpMaxDepth。');
30
+ },
31
+ /** Capabilities discovered on the current screen. */
32
+ screenCapabilities(config, tree) {
33
+ if (!resolveDebugLogging(config)) return;
34
+ const items = tree ? extractAffordances(tree, 24) : [];
35
+ const host = HostActionsStore.getActions();
36
+ if (!items.length && !host.length) {
37
+ // eslint-disable-next-line no-console
38
+ console.log('[koko] 当前界面: 未识别到可操作控件');
39
+ return;
40
+ }
41
+ const lines = [...items.map(formatAffordance), ...host.map(a => `宿主声明「${a.label}」${a.testID ? `(testID=${a.testID})` : ''}`)];
42
+ // eslint-disable-next-line no-console
43
+ console.log(`[koko] 当前界面可用能力 (${lines.length}):\n - ${lines.join('\n - ')}`);
44
+ },
45
+ /** What the agent is about to do in the App (user-visible action). */
46
+ appAction(config, step, tool, detail) {
47
+ if (!resolveDebugLogging(config)) return;
48
+ const label = actionLabel(tool, detail);
49
+ // eslint-disable-next-line no-console
50
+ console.log(`[koko] 步骤 ${step}: ${label}`);
51
+ },
52
+ /** Soft failure for developers — generic, no rule leakage. */
53
+ runIssue(config, message) {
54
+ if (!resolveDebugLogging(config)) return;
55
+ const safe = sanitizeDevMessage(message);
56
+ // eslint-disable-next-line no-console
57
+ console.warn('[koko] 任务遇到问题:', safe);
58
+ }
59
+ };
60
+ function formatAffordance(a) {
61
+ const kind = a.kind === 'button' ? '按钮' : a.kind === 'field' ? '输入框' : a.kind === 'row' ? '列表项' : a.kind === 'link' ? '链接' : a.kind === 'sheet' ? '弹层按钮' : a.kind === 'toggle' ? '开关' : a.kind === 'adjustable' ? '调节控件' : '控件';
62
+ const near = a.near ? `(附近: ${a.near.slice(0, 40)})` : '';
63
+ return `${kind}「${a.label || '(无文案)'}」${near}`;
64
+ }
65
+ function actionLabel(tool, detail) {
66
+ const d = detail?.trim();
67
+ switch (tool) {
68
+ case 'dump':
69
+ return '扫描当前界面';
70
+ case 'find':
71
+ return d ? `定位「${d}」` : '定位控件';
72
+ case 'tap':
73
+ return d ? `点击「${d}」` : '点击';
74
+ case 'swipe':
75
+ return d ? `滑动(${d})` : '滑动';
76
+ case 'pinch':
77
+ return d ? `双指缩放(${d})` : '双指缩放';
78
+ case 'type':
79
+ return d ? `输入「${d}」` : '输入文字';
80
+ case 'ask_user':
81
+ return '等待你在 App 内操作';
82
+ case 'done':
83
+ return d ? `结束:${d}` : '结束';
84
+ default:
85
+ return d ? `${tool}: ${d}` : tool;
86
+ }
87
+ }
88
+
89
+ /** Strip security/policy jargon from messages shown in debug console. */
90
+ export function sanitizeDevMessage(message) {
91
+ const lower = message.toLowerCase();
92
+ if (/execution_permit|execution permit|permit expired|gateway host|allowlist|devmode|custom_branding|entitlement/i.test(message)) {
93
+ if (/quota|429/.test(lower)) return '今日用量已用尽,请稍后再试或联系服务商扩容';
94
+ if (/unauthorized|401/.test(lower)) return '鉴权失败,请检查 gateway.token';
95
+ return '暂时无法继续操作,请稍后重试或检查网络与账号配置';
96
+ }
97
+ return message.slice(0, 200);
98
+ }
99
+ //# sourceMappingURL=AgentDebug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["resolveDebugLogging","extractAffordances","HostActionsStore","AgentDebug","enabled","config","runStart","goal","console","log","slice","runEnd","summary","ok","dumpTruncated","cap","warn","screenCapabilities","tree","items","host","getActions","length","lines","map","formatAffordance","a","label","testID","join","appAction","step","tool","detail","actionLabel","runIssue","message","safe","sanitizeDevMessage","kind","near","d","trim","lower","toLowerCase","test"],"sourceRoot":"../../../src","sources":["commercial/AgentDebug.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Soft client gate: local dump/tap/swipe/type require a short-lived
5
+ * execution_permit from the official (or local-lab) gateway session.
6
+ * Always enforced — debug logging does not bypass this.
7
+ */
8
+
9
+ function peekExp(permit) {
10
+ try {
11
+ const [payloadB64] = permit.split('.');
12
+ if (!payloadB64) return null;
13
+ const pad = payloadB64.length % 4 === 0 ? '' : '='.repeat(4 - payloadB64.length % 4);
14
+ const json = globalThis.atob ? globalThis.atob(payloadB64.replace(/-/g, '+').replace(/_/g, '/') + pad) : Buffer.from(payloadB64.replace(/-/g, '+').replace(/_/g, '/') + pad, 'base64').toString('utf8');
15
+ const payload = JSON.parse(json);
16
+ return typeof payload.exp === 'number' ? payload.exp : null;
17
+ } catch {
18
+ return null;
19
+ }
20
+ }
21
+ class ExecutionGuardImpl {
22
+ permit = null;
23
+ sessionId = null;
24
+ setPermit(permit, sessionId) {
25
+ this.permit = permit;
26
+ if (sessionId !== undefined) this.sessionId = sessionId;
27
+ }
28
+ getPermit() {
29
+ return this.permit;
30
+ }
31
+ getSessionId() {
32
+ return this.sessionId;
33
+ }
34
+ clear() {
35
+ this.permit = null;
36
+ this.sessionId = null;
37
+ }
38
+ assert(action) {
39
+ if (!this.permit) {
40
+ throw new Error(`KokoAgent: ${action} is only available while a goal is running. Use runGoal().`);
41
+ }
42
+ const exp = peekExp(this.permit);
43
+ if (exp != null && exp < Math.floor(Date.now() / 1000)) {
44
+ throw new Error(`KokoAgent: session timed out during ${action}. Please run the goal again.`);
45
+ }
46
+ }
47
+ }
48
+ export const ExecutionGuard = new ExecutionGuardImpl();
49
+ //# sourceMappingURL=ExecutionGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["peekExp","permit","payloadB64","split","pad","length","repeat","json","globalThis","atob","replace","Buffer","from","toString","payload","JSON","parse","exp","ExecutionGuardImpl","sessionId","setPermit","undefined","getPermit","getSessionId","clear","assert","action","Error","Math","floor","Date","now","ExecutionGuard"],"sourceRoot":"../../../src","sources":["commercial/ExecutionGuard.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAIA,SAASA,OAAOA,CAACC,MAAc,EAAiB;EAC9C,IAAI;IACF,MAAM,CAACC,UAAU,CAAC,GAAGD,MAAM,CAACE,KAAK,CAAC,GAAG,CAAC;IACtC,IAAI,CAACD,UAAU,EAAE,OAAO,IAAI;IAC5B,MAAME,GAAG,GACPF,UAAU,CAACG,MAAM,GAAG,CAAC,KAAK,CAAC,GACvB,EAAE,GACF,GAAG,CAACC,MAAM,CAAC,CAAC,GAAIJ,UAAU,CAACG,MAAM,GAAG,CAAE,CAAC;IAC7C,MAAME,IAAI,GAAGC,UAAU,CAACC,IAAI,GACxBD,UAAU,CAACC,IAAI,CAACP,UAAU,CAACQ,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAGN,GAAG,CAAC,GACvEO,MAAM,CAACC,IAAI,CACTV,UAAU,CAACQ,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAGN,GAAG,EACtD,QACF,CAAC,CAACS,QAAQ,CAAC,MAAM,CAAC;IACtB,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACT,IAAI,CAAqB;IACpD,OAAO,OAAOO,OAAO,CAACG,GAAG,KAAK,QAAQ,GAAGH,OAAO,CAACG,GAAG,GAAG,IAAI;EAC7D,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEA,MAAMC,kBAAkB,CAAC;EACfjB,MAAM,GAAkB,IAAI;EAC5BkB,SAAS,GAAkB,IAAI;EAEvCC,SAASA,CAACnB,MAAqB,EAAEkB,SAAyB,EAAE;IAC1D,IAAI,CAAClB,MAAM,GAAGA,MAAM;IACpB,IAAIkB,SAAS,KAAKE,SAAS,EAAE,IAAI,CAACF,SAAS,GAAGA,SAAS;EACzD;EAEAG,SAASA,CAAA,EAAG;IACV,OAAO,IAAI,CAACrB,MAAM;EACpB;EAEAsB,YAAYA,CAAA,EAAG;IACb,OAAO,IAAI,CAACJ,SAAS;EACvB;EAEAK,KAAKA,CAAA,EAAG;IACN,IAAI,CAACvB,MAAM,GAAG,IAAI;IAClB,IAAI,CAACkB,SAAS,GAAG,IAAI;EACvB;EAEAM,MAAMA,CAACC,MAAqB,EAAE;IAC5B,IAAI,CAAC,IAAI,CAACzB,MAAM,EAAE;MAChB,MAAM,IAAI0B,KAAK,CACb,cAAcD,MAAM,4DACtB,CAAC;IACH;IACA,MAAMT,GAAG,GAAGjB,OAAO,CAAC,IAAI,CAACC,MAAM,CAAC;IAChC,IAAIgB,GAAG,IAAI,IAAI,IAAIA,GAAG,GAAGW,IAAI,CAACC,KAAK,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;MACtD,MAAM,IAAIJ,KAAK,CACb,uCAAuCD,MAAM,8BAC/C,CAAC;IACH;EACF;AACF;AAEA,OAAO,MAAMM,cAAc,GAAG,IAAId,kBAAkB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Fan-out for usage / lifecycle events. Host `onUsageEvent` is wired here.
5
+ * Never used to gate execution.
6
+ */
7
+ class UsageBusImpl {
8
+ listeners = new Set();
9
+ recent = [];
10
+ maxRecent = 100;
11
+ subscribe(listener) {
12
+ this.listeners.add(listener);
13
+ return () => {
14
+ this.listeners.delete(listener);
15
+ };
16
+ }
17
+ emit(event) {
18
+ this.recent.push(event);
19
+ if (this.recent.length > this.maxRecent) {
20
+ this.recent.splice(0, this.recent.length - this.maxRecent);
21
+ }
22
+ for (const l of this.listeners) {
23
+ try {
24
+ l(event);
25
+ } catch {
26
+ // host callbacks must not break the agent
27
+ }
28
+ }
29
+ }
30
+ getRecent() {
31
+ return [...this.recent];
32
+ }
33
+ clear() {
34
+ this.recent = [];
35
+ }
36
+ }
37
+ export const UsageBus = new UsageBusImpl();
38
+ //# sourceMappingURL=UsageBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UsageBusImpl","listeners","Set","recent","maxRecent","subscribe","listener","add","delete","emit","event","push","length","splice","l","getRecent","clear","UsageBus"],"sourceRoot":"../../../src","sources":["commercial/UsageBus.ts"],"mappings":";;AAIA;AACA;AACA;AACA;AACA,MAAMA,YAAY,CAAC;EACTC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAC/BC,MAAM,GAAqB,EAAE;EACpBC,SAAS,GAAG,GAAG;EAEhCC,SAASA,CAACC,QAAkB,EAAc;IACxC,IAAI,CAACL,SAAS,CAACM,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAACL,SAAS,CAACO,MAAM,CAACF,QAAQ,CAAC;IACjC,CAAC;EACH;EAEAG,IAAIA,CAACC,KAAqB,EAAE;IAC1B,IAAI,CAACP,MAAM,CAACQ,IAAI,CAACD,KAAK,CAAC;IACvB,IAAI,IAAI,CAACP,MAAM,CAACS,MAAM,GAAG,IAAI,CAACR,SAAS,EAAE;MACvC,IAAI,CAACD,MAAM,CAACU,MAAM,CAAC,CAAC,EAAE,IAAI,CAACV,MAAM,CAACS,MAAM,GAAG,IAAI,CAACR,SAAS,CAAC;IAC5D;IACA,KAAK,MAAMU,CAAC,IAAI,IAAI,CAACb,SAAS,EAAE;MAC9B,IAAI;QACFa,CAAC,CAACJ,KAAK,CAAC;MACV,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;EACF;EAEAK,SAASA,CAAA,EAAqB;IAC5B,OAAO,CAAC,GAAG,IAAI,CAACZ,MAAM,CAAC;EACzB;EAEAa,KAAKA,CAAA,EAAG;IACN,IAAI,CAACb,MAAM,GAAG,EAAE;EAClB;AACF;AAEA,OAAO,MAAMc,QAAQ,GAAG,IAAIjB,YAAY,CAAC,CAAC","ignoreList":[]}