@sovovs/bycli 1.8.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/cli-manifest.json +0 -61
  2. package/dist/src/adapter-shadow.js +2 -2
  3. package/dist/src/browser/analyze.d.ts +10 -99
  4. package/dist/src/browser/analyze.js +10 -226
  5. package/dist/src/browser/cdp.js +64 -7
  6. package/dist/src/browser/navigation-guard.d.ts +78 -0
  7. package/dist/src/browser/navigation-guard.js +142 -0
  8. package/dist/src/browser/navigation-guard.test.d.ts +1 -0
  9. package/dist/src/browser/url-policy.d.ts +89 -0
  10. package/dist/src/browser/url-policy.js +311 -0
  11. package/dist/src/browser/url-policy.test.d.ts +1 -0
  12. package/dist/src/browser/verify-fixture.js +2 -2
  13. package/dist/src/cli.js +10 -13
  14. package/dist/src/config-paths.d.ts +19 -0
  15. package/dist/src/config-paths.js +31 -0
  16. package/dist/src/daemon.js +240 -0
  17. package/dist/src/discovery.d.ts +5 -3
  18. package/dist/src/discovery.js +8 -6
  19. package/dist/src/execution.js +8 -3
  20. package/dist/src/main.js +18 -2
  21. package/dist/src/plugin.js +11 -8
  22. package/dist/src/recorder/highlevel/analyze.d.ts +29 -0
  23. package/dist/src/recorder/highlevel/analyze.js +91 -0
  24. package/dist/src/recorder/highlevel/init.d.ts +125 -0
  25. package/dist/src/recorder/highlevel/init.js +279 -0
  26. package/dist/src/recorder/highlevel/init.test.d.ts +1 -0
  27. package/dist/src/recorder/highlevel/verify.d.ts +73 -0
  28. package/dist/src/recorder/highlevel/verify.js +74 -0
  29. package/dist/src/recorder/http/analyze-runner.d.ts +28 -0
  30. package/dist/src/recorder/http/analyze-runner.js +78 -0
  31. package/dist/src/recorder/http/analyze-runner.test.d.ts +1 -0
  32. package/dist/src/recorder/http/handlers.d.ts +51 -0
  33. package/dist/src/recorder/http/handlers.js +219 -0
  34. package/dist/src/recorder/http/wrapper-config.d.ts +20 -0
  35. package/dist/src/recorder/http/wrapper-config.js +82 -0
  36. package/dist/src/recorder/http/wrapper-envelope.d.ts +31 -0
  37. package/dist/src/recorder/http/wrapper-envelope.js +51 -0
  38. package/dist/src/recorder/http/wrapper-gates.d.ts +16 -0
  39. package/dist/src/recorder/http/wrapper-gates.js +28 -0
  40. package/dist/src/recorder/http/wrapper-metrics.d.ts +1 -0
  41. package/dist/src/recorder/http/wrapper-metrics.js +5 -0
  42. package/dist/src/recorder/http/wrapper-registry.d.ts +50 -0
  43. package/dist/src/recorder/http/wrapper-registry.js +98 -0
  44. package/dist/src/recorder/http/wrapper-server.d.ts +59 -0
  45. package/dist/src/recorder/http/wrapper-server.js +240 -0
  46. package/dist/src/recorder/http/wrapper.test.d.ts +1 -0
  47. package/dist/src/recorder/observability/logger.d.ts +5 -0
  48. package/dist/src/recorder/observability/logger.js +13 -0
  49. package/dist/src/recorder/runner/config.d.ts +34 -0
  50. package/dist/src/recorder/runner/config.js +84 -0
  51. package/dist/src/recorder/runner/config.test.d.ts +1 -0
  52. package/dist/src/recorder/runner/reap.d.ts +79 -0
  53. package/dist/src/recorder/runner/reap.js +230 -0
  54. package/dist/src/recorder/runner/reap.test.d.ts +1 -0
  55. package/dist/src/recorder/runner/runner-port.d.ts +95 -0
  56. package/dist/src/recorder/runner/runner-port.js +518 -0
  57. package/dist/src/recorder/runner/runner-port.test.d.ts +1 -0
  58. package/dist/src/recorder/runner/session-keys.d.ts +28 -0
  59. package/dist/src/recorder/runner/session-keys.js +72 -0
  60. package/dist/src/recorder/runner/session-keys.test.d.ts +1 -0
  61. package/dist/src/recorder/runner/verify-runner-main.d.ts +95 -0
  62. package/dist/src/recorder/runner/verify-runner-main.js +275 -0
  63. package/dist/src/recorder/runner/verify-runner-main.test.d.ts +1 -0
  64. package/package.json +8 -5
  65. package/scripts/m1-daemon-navigate-drive.mjs +138 -0
  66. package/scripts/m1-extension-spike.mjs +237 -0
  67. package/scripts/m1-live-spike.mjs +156 -0
  68. package/scripts/m6b-connect-back-spike.sh +31 -0
  69. package/scripts/recorder.sh +186 -0
  70. package/clis/12306/utils.test.js +0 -331
  71. package/clis/1688/assets.test.js +0 -39
  72. package/clis/1688/download.test.js +0 -31
  73. package/clis/1688/item.test.js +0 -67
  74. package/clis/1688/search.test.js +0 -75
  75. package/clis/1688/shared.test.js +0 -57
  76. package/clis/1688/store.test.js +0 -62
  77. package/clis/36kr/article.test.js +0 -46
  78. package/clis/36kr/hot.test.js +0 -15
  79. package/clis/36kr/news.test.js +0 -85
  80. package/clis/51job/utils.test.js +0 -69
  81. package/clis/_atlassian/shared.test.js +0 -170
  82. package/clis/aibase/news.test.js +0 -59
  83. package/clis/amazon/bestsellers.test.js +0 -29
  84. package/clis/amazon/discussion.test.js +0 -124
  85. package/clis/amazon/offer.test.js +0 -29
  86. package/clis/amazon/product.test.js +0 -24
  87. package/clis/amazon/rankings.test.js +0 -41
  88. package/clis/amazon/search.test.js +0 -22
  89. package/clis/amazon/shared.test.js +0 -44
  90. package/clis/apple-podcasts/commands.test.js +0 -119
  91. package/clis/apple-podcasts/utils.test.js +0 -57
  92. package/clis/arxiv/arxiv.test.js +0 -112
  93. package/clis/baidu-scholar/search.test.js +0 -23
  94. package/clis/barchart/greeks.test.js +0 -138
  95. package/clis/bilibili/comment.test.js +0 -153
  96. package/clis/bilibili/comments.test.js +0 -142
  97. package/clis/bilibili/dynamic.test.js +0 -68
  98. package/clis/bilibili/hot.test.js +0 -17
  99. package/clis/bilibili/subtitle.test.js +0 -196
  100. package/clis/bilibili/summary.test.js +0 -210
  101. package/clis/bilibili/utils.test.js +0 -61
  102. package/clis/bilibili/video.test.js +0 -132
  103. package/clis/binance/commands.test.js +0 -70
  104. package/clis/bloomberg/utils.test.js +0 -129
  105. package/clis/booking/booking.test.js +0 -356
  106. package/clis/boss/chatlist.test.js +0 -211
  107. package/clis/boss/chatmsg.test.js +0 -230
  108. package/clis/boss/search.test.js +0 -78
  109. package/clis/boss/utils.test.js +0 -34
  110. package/clis/brave/search.test.js +0 -76
  111. package/clis/chaoxing/utils.test.js +0 -45
  112. package/clis/chatgpt/commands.test.js +0 -45
  113. package/clis/chatgpt/envelope.test.js +0 -108
  114. package/clis/chatgpt/image.test.js +0 -188
  115. package/clis/chatgpt/utils.test.js +0 -330
  116. package/clis/chatgpt-app/ax.test.js +0 -35
  117. package/clis/chatwise/composer.test.js +0 -186
  118. package/clis/chess/analyze.test.js +0 -79
  119. package/clis/chess/game.test.js +0 -178
  120. package/clis/chess/games.test.js +0 -164
  121. package/clis/chess/stats.test.js +0 -79
  122. package/clis/chess/utils.test.js +0 -230
  123. package/clis/claude/ask.test.js +0 -338
  124. package/clis/claude/commands.test.js +0 -118
  125. package/clis/claude/utils.test.js +0 -148
  126. package/clis/cnki/search.test.js +0 -18
  127. package/clis/codex/sidebar.test.js +0 -329
  128. package/clis/coingecko/coingecko.test.js +0 -109
  129. package/clis/confluence/commands.test.js +0 -195
  130. package/clis/coupang/coupang.test.js +0 -159
  131. package/clis/coupang/utils.test.js +0 -62
  132. package/clis/ctrip/ctrip.test.js +0 -719
  133. package/clis/dblp/dblp.test.js +0 -397
  134. package/clis/deepseek/ask.test.js +0 -312
  135. package/clis/deepseek/detail.test.js +0 -81
  136. package/clis/deepseek/send.test.js +0 -107
  137. package/clis/deepseek/utils.test.js +0 -370
  138. package/clis/defillama/defillama.test.js +0 -99
  139. package/clis/devto/devto.test.js +0 -236
  140. package/clis/dianping/dianping.test.js +0 -578
  141. package/clis/douban/download.test.js +0 -170
  142. package/clis/douban/movie-hot.test.js +0 -14
  143. package/clis/douban/search.test.js +0 -11
  144. package/clis/douban/subject.test.js +0 -11
  145. package/clis/douban/utils.test.js +0 -438
  146. package/clis/doubao/detail.test.js +0 -42
  147. package/clis/doubao/history.test.js +0 -37
  148. package/clis/doubao/utils.test.js +0 -344
  149. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  150. package/clis/douyin/_shared/creation-id.test.js +0 -22
  151. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  152. package/clis/douyin/_shared/sts2.test.js +0 -27
  153. package/clis/douyin/_shared/text-extra.test.js +0 -37
  154. package/clis/douyin/_shared/timing.test.js +0 -28
  155. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  156. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  157. package/clis/douyin/_shared/transcode.test.js +0 -91
  158. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  159. package/clis/douyin/activities.test.js +0 -55
  160. package/clis/douyin/collections.test.js +0 -45
  161. package/clis/douyin/delete.test.js +0 -100
  162. package/clis/douyin/draft.test.js +0 -335
  163. package/clis/douyin/drafts.test.js +0 -11
  164. package/clis/douyin/hashtag.test.js +0 -171
  165. package/clis/douyin/location.test.js +0 -23
  166. package/clis/douyin/profile.test.js +0 -46
  167. package/clis/douyin/publish-upload-id.test.js +0 -170
  168. package/clis/douyin/publish.test.js +0 -38
  169. package/clis/douyin/stats.test.js +0 -22
  170. package/clis/douyin/update.test.js +0 -11
  171. package/clis/douyin/user-videos.test.js +0 -151
  172. package/clis/douyin/videos.test.js +0 -54
  173. package/clis/duckduckgo/search.test.js +0 -128
  174. package/clis/duckduckgo/suggest.test.js +0 -66
  175. package/clis/eastmoney/hot-rank.test.js +0 -59
  176. package/clis/endoflife/endoflife.test.js +0 -51
  177. package/clis/facebook/feed.test.js +0 -169
  178. package/clis/facebook/marketplace.test.js +0 -91
  179. package/clis/facebook/notifications.test.js +0 -458
  180. package/clis/facebook/search.test.js +0 -55
  181. package/clis/flathub/flathub.test.js +0 -90
  182. package/clis/flomo/memos.test.js +0 -144
  183. package/clis/gemini/ask.test.js +0 -100
  184. package/clis/gemini/deep-research-result.test.js +0 -155
  185. package/clis/gemini/deep-research.test.js +0 -181
  186. package/clis/gemini/reply-state.test.js +0 -671
  187. package/clis/gemini/utils.test.js +0 -198
  188. package/clis/geogebra/geogebra.test.js +0 -175
  189. package/clis/gitee/search.test.js +0 -65
  190. package/clis/gitee/user.test.js +0 -63
  191. package/clis/google/utils.test.js +0 -75
  192. package/clis/google-scholar/cite.test.js +0 -47
  193. package/clis/google-scholar/profile.test.js +0 -49
  194. package/clis/google-scholar/search.test.js +0 -71
  195. package/clis/goproxy/goproxy.test.js +0 -103
  196. package/clis/gov-law/commands.test.js +0 -39
  197. package/clis/gov-policy/gov-policy.test.js +0 -224
  198. package/clis/grok/ask.test.js +0 -29
  199. package/clis/grok/utils.test.js +0 -103
  200. package/clis/hackernews/hackernews.test.js +0 -132
  201. package/clis/hf/hf.test.js +0 -16
  202. package/clis/hupu/hot.test.js +0 -224
  203. package/clis/imdb/utils.test.js +0 -88
  204. package/clis/indeed/indeed.test.js +0 -375
  205. package/clis/instagram/_shared/private-publish.test.js +0 -705
  206. package/clis/instagram/_shared/protocol-capture.test.js +0 -114
  207. package/clis/instagram/download.test.js +0 -118
  208. package/clis/instagram/note.test.js +0 -53
  209. package/clis/instagram/post.test.js +0 -1647
  210. package/clis/instagram/reel.test.js +0 -167
  211. package/clis/instagram/story.test.js +0 -134
  212. package/clis/jd/commands.test.js +0 -41
  213. package/clis/jd/item.test.js +0 -354
  214. package/clis/jianyu/search.test.js +0 -153
  215. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  216. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  217. package/clis/jike/read.test.js +0 -86
  218. package/clis/jira/commands.test.js +0 -287
  219. package/clis/juejin/search.js +0 -123
  220. package/clis/juejin/search.test.js +0 -98
  221. package/clis/lesswrong/frontpage.test.js +0 -37
  222. package/clis/lichess/lichess.test.js +0 -85
  223. package/clis/linkedin/connect.test.js +0 -213
  224. package/clis/linkedin/inbox.test.js +0 -152
  225. package/clis/linkedin/job-detail.test.js +0 -38
  226. package/clis/linkedin/jobs-preferences.test.js +0 -43
  227. package/clis/linkedin/people-search.test.js +0 -216
  228. package/clis/linkedin/post-analytics.test.js +0 -40
  229. package/clis/linkedin/posts.test.js +0 -40
  230. package/clis/linkedin/profile-analytics.test.js +0 -67
  231. package/clis/linkedin/profile-experience.test.js +0 -152
  232. package/clis/linkedin/profile-projects.test.js +0 -111
  233. package/clis/linkedin/profile-read.test.js +0 -77
  234. package/clis/linkedin/safe-send.test.js +0 -204
  235. package/clis/linkedin/salesnav-inbox.test.js +0 -113
  236. package/clis/linkedin/salesnav-message.test.js +0 -172
  237. package/clis/linkedin/salesnav-search.test.js +0 -76
  238. package/clis/linkedin/salesnav-thread.test.js +0 -79
  239. package/clis/linkedin/search.test.js +0 -222
  240. package/clis/linkedin/sent-invitations.test.js +0 -62
  241. package/clis/linkedin/services-read.test.js +0 -105
  242. package/clis/linkedin/thread-snapshot.test.js +0 -89
  243. package/clis/linkedin/timeline.test.js +0 -81
  244. package/clis/linkedin-learning/course.test.js +0 -114
  245. package/clis/linkedin-learning/search.test.js +0 -144
  246. package/clis/linkedin-learning/trending.test.js +0 -123
  247. package/clis/linux-do/feed.test.js +0 -153
  248. package/clis/linux-do/topic-content.test.js +0 -59
  249. package/clis/lobsters/lobsters.test.js +0 -169
  250. package/clis/notebooklm/add-source.test.js +0 -97
  251. package/clis/notebooklm/compat.test.js +0 -16
  252. package/clis/notebooklm/create.test.js +0 -58
  253. package/clis/notebooklm/generate-audio.test.js +0 -63
  254. package/clis/notebooklm/generate-slides.test.js +0 -75
  255. package/clis/notebooklm/history.test.js +0 -58
  256. package/clis/notebooklm/note-list.test.js +0 -56
  257. package/clis/notebooklm/notes-get.test.js +0 -72
  258. package/clis/notebooklm/open.test.js +0 -63
  259. package/clis/notebooklm/rpc.test.js +0 -131
  260. package/clis/notebooklm/source-fulltext.test.js +0 -106
  261. package/clis/notebooklm/source-get.test.js +0 -84
  262. package/clis/notebooklm/source-guide.test.js +0 -104
  263. package/clis/notebooklm/summary.test.js +0 -78
  264. package/clis/notebooklm/utils.test.js +0 -449
  265. package/clis/notebooklm/write-note.test.js +0 -70
  266. package/clis/nuget/nuget.test.js +0 -111
  267. package/clis/oeis/oeis.test.js +0 -88
  268. package/clis/ones/task-helpers.test.js +0 -12
  269. package/clis/ones/worklog.test.js +0 -20
  270. package/clis/openfda/openfda.test.js +0 -114
  271. package/clis/openreview/openreview.test.js +0 -427
  272. package/clis/osv/osv.test.js +0 -97
  273. package/clis/paperreview/commands.test.js +0 -243
  274. package/clis/paperreview/utils.test.js +0 -49
  275. package/clis/pixiv/download.test.js +0 -87
  276. package/clis/pixiv/illusts.test.js +0 -99
  277. package/clis/pixiv/search.test.js +0 -83
  278. package/clis/powerchina/search.test.js +0 -93
  279. package/clis/producthunt/utils.test.js +0 -64
  280. package/clis/pubmed/pubmed.test.js +0 -276
  281. package/clis/quark/utils.test.js +0 -58
  282. package/clis/qwen/utils.test.js +0 -45
  283. package/clis/reddit/extract-media.test.js +0 -149
  284. package/clis/reddit/frontpage.test.js +0 -34
  285. package/clis/reddit/home.test.js +0 -170
  286. package/clis/reddit/hot.test.js +0 -32
  287. package/clis/reddit/popular.test.js +0 -26
  288. package/clis/reddit/read.test.js +0 -335
  289. package/clis/reddit/reply.test.js +0 -89
  290. package/clis/reddit/search.test.js +0 -26
  291. package/clis/reddit/subreddit-info.test.js +0 -163
  292. package/clis/reddit/subreddit.test.js +0 -31
  293. package/clis/reddit/subscribed.test.js +0 -168
  294. package/clis/reddit/whoami.test.js +0 -105
  295. package/clis/rednote/navigation.test.js +0 -26
  296. package/clis/rednote/rednote.test.js +0 -222
  297. package/clis/rest-countries/rest-countries.test.js +0 -83
  298. package/clis/reuters/reuters.test.js +0 -299
  299. package/clis/rfc/rfc.test.js +0 -74
  300. package/clis/sinafinance/stock.test.js +0 -59
  301. package/clis/spotify/utils.test.js +0 -67
  302. package/clis/stackoverflow/stackoverflow.test.js +0 -404
  303. package/clis/steam/steam.test.js +0 -46
  304. package/clis/substack/utils.test.js +0 -44
  305. package/clis/suno/commands.test.js +0 -188
  306. package/clis/suno/download.test.js +0 -151
  307. package/clis/suno/generate.test.js +0 -252
  308. package/clis/suno/utils.test.js +0 -329
  309. package/clis/taobao/commands.test.js +0 -41
  310. package/clis/tdx/hot-rank.test.js +0 -59
  311. package/clis/ths/hot-rank.test.js +0 -64
  312. package/clis/tieba/commands.test.js +0 -79
  313. package/clis/tieba/utils.test.js +0 -290
  314. package/clis/tiktok/creator-videos.test.js +0 -113
  315. package/clis/tiktok/refactor.test.js +0 -389
  316. package/clis/tiktok/write-refactor.test.js +0 -370
  317. package/clis/toutiao/toutiao.test.js +0 -378
  318. package/clis/tvmaze/tvmaze.test.js +0 -93
  319. package/clis/twitter/bookmark-folder.test.js +0 -395
  320. package/clis/twitter/bookmark-folders.test.js +0 -152
  321. package/clis/twitter/bookmark.test.js +0 -74
  322. package/clis/twitter/bookmarks.test.js +0 -205
  323. package/clis/twitter/delete.test.js +0 -85
  324. package/clis/twitter/device-follow.test.js +0 -287
  325. package/clis/twitter/download.test.js +0 -457
  326. package/clis/twitter/followers.test.js +0 -62
  327. package/clis/twitter/following.test.js +0 -338
  328. package/clis/twitter/hide-reply.test.js +0 -76
  329. package/clis/twitter/like.test.js +0 -73
  330. package/clis/twitter/likes.test.js +0 -220
  331. package/clis/twitter/list-add.test.js +0 -133
  332. package/clis/twitter/list-create.test.js +0 -169
  333. package/clis/twitter/list-remove.test.js +0 -110
  334. package/clis/twitter/list-tweets.test.js +0 -196
  335. package/clis/twitter/lists.test.js +0 -253
  336. package/clis/twitter/post.test.js +0 -258
  337. package/clis/twitter/profile.test.js +0 -39
  338. package/clis/twitter/quote.test.js +0 -194
  339. package/clis/twitter/reply.test.js +0 -237
  340. package/clis/twitter/retweet.test.js +0 -73
  341. package/clis/twitter/search.test.js +0 -349
  342. package/clis/twitter/shared.test.js +0 -794
  343. package/clis/twitter/thread.test.js +0 -58
  344. package/clis/twitter/timeline.test.js +0 -104
  345. package/clis/twitter/trending.test.js +0 -15
  346. package/clis/twitter/tweets.test.js +0 -362
  347. package/clis/twitter/unbookmark.test.js +0 -73
  348. package/clis/twitter/unlike.test.js +0 -75
  349. package/clis/twitter/unretweet.test.js +0 -73
  350. package/clis/twitter/utils.test.js +0 -169
  351. package/clis/uisdc/news.test.js +0 -66
  352. package/clis/uiverse/_shared.test.js +0 -62
  353. package/clis/uiverse/navigation.test.js +0 -12
  354. package/clis/upwork/upwork.test.js +0 -566
  355. package/clis/wanfang/search.test.js +0 -23
  356. package/clis/web/read.test.js +0 -392
  357. package/clis/weibo/delete.test.js +0 -94
  358. package/clis/weibo/envelope.test.js +0 -85
  359. package/clis/weibo/favorites.test.js +0 -114
  360. package/clis/weibo/publish.test.js +0 -192
  361. package/clis/weibo/user-posts.test.js +0 -92
  362. package/clis/weibo/utils.test.js +0 -36
  363. package/clis/weixin/drafts.test.js +0 -69
  364. package/clis/weixin/search.test.js +0 -227
  365. package/clis/weread/ai-outline.test.js +0 -83
  366. package/clis/weread/book-search.test.js +0 -242
  367. package/clis/weread/commands.test.js +0 -398
  368. package/clis/weread/private-api-regression.test.js +0 -369
  369. package/clis/weread/search-regression.test.js +0 -494
  370. package/clis/weread/utils.test.js +0 -128
  371. package/clis/weread-official/commands.test.js +0 -385
  372. package/clis/weread-official/utils.test.js +0 -242
  373. package/clis/wikidata/wikidata.test.js +0 -83
  374. package/clis/wikipedia/trending.test.js +0 -57
  375. package/clis/wttr/wttr.test.js +0 -84
  376. package/clis/xianyu/chat.test.js +0 -84
  377. package/clis/xianyu/im.test.js +0 -253
  378. package/clis/xianyu/item.test.js +0 -56
  379. package/clis/xianyu/publish.test.js +0 -220
  380. package/clis/xianyu/search.test.js +0 -17
  381. package/clis/xiaoe/xiaoe.test.js +0 -486
  382. package/clis/xiaohongshu/comments.test.js +0 -258
  383. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  384. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  385. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  386. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  387. package/clis/xiaohongshu/delete-note.test.js +0 -172
  388. package/clis/xiaohongshu/download.test.js +0 -316
  389. package/clis/xiaohongshu/navigation.test.js +0 -34
  390. package/clis/xiaohongshu/note.test.js +0 -249
  391. package/clis/xiaohongshu/publish.test.js +0 -608
  392. package/clis/xiaohongshu/search.test.js +0 -325
  393. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  394. package/clis/xiaoyuzhou/auth.test.js +0 -124
  395. package/clis/xiaoyuzhou/download.test.js +0 -135
  396. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  397. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  398. package/clis/xiaoyuzhou/utils.test.js +0 -39
  399. package/clis/xueqiu/comments.test.js +0 -696
  400. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  401. package/clis/xueqiu/utils.test.js +0 -26
  402. package/clis/yahoo/search.test.js +0 -94
  403. package/clis/youdao/note.test.js +0 -99
  404. package/clis/youtube/channel.test.js +0 -59
  405. package/clis/youtube/feed.test.js +0 -131
  406. package/clis/youtube/transcript-group.test.js +0 -99
  407. package/clis/youtube/transcript.test.js +0 -296
  408. package/clis/youtube/utils.test.js +0 -84
  409. package/clis/yuanbao/ask.test.js +0 -124
  410. package/clis/yuanbao/new.test.js +0 -30
  411. package/clis/yuanbao/shared.test.js +0 -80
  412. package/clis/zhihu/answer-comments.test.js +0 -287
  413. package/clis/zhihu/answer-detail.test.js +0 -338
  414. package/clis/zhihu/answer.test.js +0 -54
  415. package/clis/zhihu/collection.test.js +0 -337
  416. package/clis/zhihu/collections.test.js +0 -182
  417. package/clis/zhihu/comment.test.js +0 -50
  418. package/clis/zhihu/download.test.js +0 -12
  419. package/clis/zhihu/favorite.test.js +0 -59
  420. package/clis/zhihu/follow.test.js +0 -42
  421. package/clis/zhihu/like.test.js +0 -41
  422. package/clis/zhihu/question.test.js +0 -251
  423. package/clis/zhihu/recommend.test.js +0 -143
  424. package/clis/zhihu/search.test.js +0 -198
  425. package/clis/zhihu/target.test.js +0 -77
  426. package/clis/zhihu/text.test.js +0 -24
  427. package/clis/zhihu/write-shared.test.js +0 -176
  428. package/clis/zlibrary/commands.test.js +0 -65
  429. package/clis/zsxq/search.test.js +0 -24
  430. package/clis/zsxq/topic.test.js +0 -30
  431. package/clis/zsxq/topics.test.js +0 -24
  432. package/clis/zsxq/utils.test.js +0 -31
  433. package/dist/src/adapter-shadow.test.js +0 -49
  434. package/dist/src/adapter-source.test.js +0 -29
  435. package/dist/src/browser/analyze.test.js +0 -166
  436. package/dist/src/browser/article-extract.e2e.test.js +0 -105
  437. package/dist/src/browser/article-extract.test.js +0 -94
  438. package/dist/src/browser/ax-snapshot.test.js +0 -91
  439. package/dist/src/browser/base-page.test.js +0 -758
  440. package/dist/src/browser/cdp-click-fixture.test.js +0 -87
  441. package/dist/src/browser/cdp.test.js +0 -79
  442. package/dist/src/browser/compound.test.js +0 -175
  443. package/dist/src/browser/daemon-client.test.js +0 -199
  444. package/dist/src/browser/dom-helpers.test.js +0 -106
  445. package/dist/src/browser/dom-snapshot.test.js +0 -313
  446. package/dist/src/browser/errors.test.js +0 -60
  447. package/dist/src/browser/extract.test.js +0 -129
  448. package/dist/src/browser/find.test.js +0 -180
  449. package/dist/src/browser/html-tree.test.js +0 -181
  450. package/dist/src/browser/network-cache.test.js +0 -58
  451. package/dist/src/browser/network-key.test.js +0 -49
  452. package/dist/src/browser/page.test.js +0 -378
  453. package/dist/src/browser/shape-filter.test.js +0 -101
  454. package/dist/src/browser/shape.test.js +0 -82
  455. package/dist/src/browser/stealth.test.js +0 -134
  456. package/dist/src/browser/target-errors.test.js +0 -94
  457. package/dist/src/browser/target-resolver.test.js +0 -118
  458. package/dist/src/browser/utils.test.js +0 -29
  459. package/dist/src/browser/verify-fixture.test.js +0 -219
  460. package/dist/src/browser.test.js +0 -232
  461. package/dist/src/build-manifest.test.js +0 -341
  462. package/dist/src/capabilityRouting.test.js +0 -63
  463. package/dist/src/cli-argv-preprocess.test.js +0 -209
  464. package/dist/src/cli.test.js +0 -2803
  465. package/dist/src/commanderAdapter.test.js +0 -352
  466. package/dist/src/commands/daemon.test.js +0 -219
  467. package/dist/src/completion.test.js +0 -24
  468. package/dist/src/convention-audit.test.js +0 -247
  469. package/dist/src/daemon.test.js +0 -60
  470. package/dist/src/doctor.test.js +0 -263
  471. package/dist/src/download/article-download.test.js +0 -235
  472. package/dist/src/download/index.test.js +0 -140
  473. package/dist/src/download/media-download.test.js +0 -112
  474. package/dist/src/download/progress.test.js +0 -36
  475. package/dist/src/electron-apps.test.js +0 -49
  476. package/dist/src/engine.test.js +0 -312
  477. package/dist/src/errors.test.js +0 -109
  478. package/dist/src/execution.test.js +0 -623
  479. package/dist/src/extension-manifest-regression.test.js +0 -12
  480. package/dist/src/external.test.js +0 -146
  481. package/dist/src/help.test.js +0 -58
  482. package/dist/src/hooks.test.js +0 -92
  483. package/dist/src/interceptor.test.js +0 -81
  484. package/dist/src/launcher.test.js +0 -138
  485. package/dist/src/node-network.test.js +0 -55
  486. package/dist/src/observation/artifact.test.js +0 -121
  487. package/dist/src/observation/manager.test.js +0 -13
  488. package/dist/src/observation/redaction.test.js +0 -32
  489. package/dist/src/observation/retention.test.js +0 -118
  490. package/dist/src/observation/ring-buffer.test.js +0 -22
  491. package/dist/src/output.test.js +0 -53
  492. package/dist/src/package-exports.test.js +0 -112
  493. package/dist/src/pipeline/executor.test.js +0 -182
  494. package/dist/src/pipeline/steps/download.test.js +0 -102
  495. package/dist/src/pipeline/steps/fetch.test.js +0 -117
  496. package/dist/src/pipeline/template.test.js +0 -175
  497. package/dist/src/pipeline/transform.test.js +0 -133
  498. package/dist/src/plugin-manifest.test.js +0 -179
  499. package/dist/src/plugin-scaffold.test.js +0 -83
  500. package/dist/src/plugin.test.js +0 -1324
  501. package/dist/src/registry.test.js +0 -209
  502. package/dist/src/runtime-detect.test.js +0 -39
  503. package/dist/src/serialization.test.js +0 -78
  504. package/dist/src/snapshotFormatter.test.js +0 -521
  505. package/dist/src/tui.test.js +0 -19
  506. package/dist/src/update-check.test.js +0 -116
  507. package/dist/src/utils.test.js +0 -155
  508. package/dist/src/validate.test.js +0 -90
  509. package/dist/src/weixin-download.test.js +0 -45
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Startup reap (08:37) + age-based TTL sweep (M7b). On daemon (Local Service) restart, a
3
+ * verify-runner child and its temp dir can outlive the parent that spawned it (the parent crashed
4
+ * before cleanup). On startup — and periodically while running — we scan os.tmpdir() for
5
+ * `bycli-verify-*` dirs and clean up two classes:
6
+ * 1. TRUE orphans: runs whose `ownerPid` (the spawning daemon/CLI) is no longer alive.
7
+ * 2. AGED-OUT leaks (M7b): dirs older than the EFFECTIVE threshold, regardless of owner liveness.
8
+ * The caller floors that threshold at the run's hard deadline (`minLeakAgeMs` = timeoutMs +
9
+ * killGraceMs) — a verify cannot legitimately outlive its own kill deadline, and the runner-port
10
+ * deletes the temp dir on settle, so a dir still present past the deadline is a definite leak
11
+ * (the owning process died mid-run), never a live run. NOTE: the raw configured TTL alone is NOT
12
+ * safe — RECORDER_TEMP_TTL_MS can be set as low as 60000ms while timeoutMs reaches 600000ms, so
13
+ * without the floor the periodic sweep could kill a still-running verify.
14
+ * A run that is neither an orphan nor aged-out is left untouched, so a sibling process's in-flight
15
+ * verify is never disturbed.
16
+ *
17
+ * For a confirmed reap target whose child pid is still alive AND whose live cmdline matches
18
+ * (`verify-runner` + the marker requestId — a pid-reuse guard), we SIGTERM then SIGKILL. The
19
+ * temp dir (which holds input.json with raw seed args) is always deleted for a confirmed target.
20
+ *
21
+ * Pure helpers (parse / match / orphan / aged-out decision) are exported for unit testing; the IO
22
+ * entry point takes an injectable ProcProbe + clock so tests never read /proc, run `ps`, or kill.
23
+ */
24
+ import * as fs from 'node:fs';
25
+ import * as os from 'node:os';
26
+ import * as path from 'node:path';
27
+ import { execFileSync } from 'node:child_process';
28
+ /** Parse + validate marker.json. Returns null unless it is a well-formed verify marker. */
29
+ export function parseVerifyMarker(raw) {
30
+ let m;
31
+ try {
32
+ m = JSON.parse(raw);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ if (!m || typeof m !== 'object')
38
+ return null;
39
+ const o = m;
40
+ if (o.operation !== 'verify')
41
+ return null;
42
+ if (typeof o.requestId !== 'string' || !o.requestId)
43
+ return null;
44
+ if (typeof o.tempRoot !== 'string' || !o.tempRoot)
45
+ return null;
46
+ const intOrNull = (v) => (typeof v === 'number' && Number.isInteger(v) && v > 0 ? v : null);
47
+ return {
48
+ requestId: o.requestId,
49
+ pid: intOrNull(o.pid),
50
+ ownerPid: intOrNull(o.ownerPid),
51
+ startedAt: typeof o.startedAt === 'number' ? o.startedAt : 0,
52
+ tempRoot: o.tempRoot,
53
+ operation: 'verify',
54
+ };
55
+ }
56
+ /** Does a live process's command line belong to THIS marker's runner? (pid-reuse guard) */
57
+ export function cmdlineMatchesMarker(cmdline, marker) {
58
+ return cmdline.includes('verify-runner') && cmdline.includes(marker.requestId);
59
+ }
60
+ /** Containment: the dir must sit directly under tmpRoot and carry our prefix. */
61
+ export function isReapableTempDir(dir, tmpRoot) {
62
+ const resolved = path.resolve(dir);
63
+ return path.dirname(resolved) === path.resolve(tmpRoot) && path.basename(resolved).startsWith('bycli-verify-');
64
+ }
65
+ /**
66
+ * True orphan iff the spawning owner is gone. An unknown ownerPid (legacy marker without the
67
+ * field) is treated as live → skipped, so we never kill a run we cannot attribute to a dead owner.
68
+ */
69
+ export function isOrphan(marker, ownerAlive) {
70
+ return marker.ownerPid !== null && !ownerAlive;
71
+ }
72
+ /**
73
+ * Aged-out leak (M7b · RECORDER_TEMP_TTL_MS / RECORDER_STARTUP_REAP_MAX_AGE_MS, 09:27-28):
74
+ * a temp dir older than `maxAgeMs` is reaped regardless of owner liveness. CALLERS MUST pass the
75
+ * floored threshold from `effectiveLeakThresholdMs` (never the raw config) — `maxAgeMs` here is
76
+ * assumed to already exceed the run's hard deadline, so a dir older than it is a definite leak,
77
+ * never a live run. An undatable legacy marker (startedAt<=0) is never aged-out (we cannot
78
+ * attribute its age). maxAgeMs<=0 disables age-based reaping (orphan-only, the pre-M7b behavior).
79
+ */
80
+ export function isAgedOut(marker, now, maxAgeMs) {
81
+ return maxAgeMs > 0 && marker.startedAt > 0 && now - marker.startedAt > maxAgeMs;
82
+ }
83
+ /**
84
+ * Effective age-reap threshold: the configured `maxAgeMs` floored at the run's hard deadline
85
+ * (`minLeakAgeMs` = timeoutMs + killGraceMs). A threshold below the max legitimate run lifetime would
86
+ * let the sweep kill a still-running verify — a live run can outlive a short TTL but never its own
87
+ * kill deadline, so flooring closes that hole. A 0/negative configured value keeps age-reaping
88
+ * disabled (orphan-only).
89
+ */
90
+ export function effectiveLeakThresholdMs(maxAgeMs, minLeakAgeMs) {
91
+ return maxAgeMs > 0 ? Math.max(maxAgeMs, minLeakAgeMs) : 0;
92
+ }
93
+ function defaultIsAlive(pid) {
94
+ try {
95
+ process.kill(pid, 0);
96
+ return true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ function defaultCmdline(pid) {
103
+ if (process.platform === 'win32')
104
+ return null; // no portable cmdline probe → don't kill on win32
105
+ try {
106
+ return execFileSync('ps', ['-p', String(pid), '-o', 'command='], { encoding: 'utf8', timeout: 2000 }).trim();
107
+ }
108
+ catch {
109
+ return null;
110
+ } // ps non-zero → pid not alive
111
+ }
112
+ function defaultStartTime(pid) {
113
+ if (process.platform === 'win32')
114
+ return null; // no portable start-time probe on win32
115
+ try {
116
+ const out = execFileSync('ps', ['-p', String(pid), '-o', 'lstart='], { encoding: 'utf8', timeout: 2000 }).trim();
117
+ if (!out)
118
+ return null;
119
+ const t = new Date(out).getTime(); // `ps -o lstart` is an absolute local-time stamp Date can parse
120
+ return Number.isNaN(t) ? null : t;
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ const defaultProbe = {
127
+ isAlive: defaultIsAlive,
128
+ cmdline: defaultCmdline,
129
+ startTime: defaultStartTime,
130
+ kill: (pid, signal) => { process.kill(pid, signal); },
131
+ };
132
+ /** Tolerance (ms) absorbing start-time measurement granularity (`ps lstart` is second-resolution). */
133
+ const OWNER_PID_REUSE_TOLERANCE_MS = 60_000;
134
+ /**
135
+ * Owner pid-reuse guard (#6): the spawning owner necessarily started BEFORE it created this run, so a
136
+ * process now occupying `ownerPid` whose start time is meaningfully AFTER the run was created cannot be
137
+ * that owner — the real owner died and the pid was recycled, making this a true orphan. Undeterminable
138
+ * start time (win32 / ps failure → null) → NOT reused: we never escalate to a kill on a guess, so a
139
+ * live owner is never misclassified (its start time is ≤ runStartedAt, far below the threshold).
140
+ */
141
+ export function isOwnerPidReused(liveStartTime, runStartedAt, toleranceMs) {
142
+ if (liveStartTime === null || runStartedAt <= 0)
143
+ return false;
144
+ return liveStartTime > runStartedAt + toleranceMs;
145
+ }
146
+ /**
147
+ * Scan tmpRoot for orphaned / aged-out verify temp dirs and clean them up. Synchronous (runs at
148
+ * daemon startup and on a periodic sweep); the SIGKILL backstop is scheduled async + unref'd so it
149
+ * never blocks. `maxAgeMs` (M7b) enables age-based reaping; 0/undefined keeps orphan-only behavior.
150
+ */
151
+ export function reapOrphanedVerifyRuns(opts = {}) {
152
+ const tmpRoot = opts.tmpRoot ?? os.tmpdir();
153
+ const log = opts.log ?? (() => { });
154
+ const probe = opts.probe ?? defaultProbe;
155
+ const graceMs = opts.graceMs ?? 2000;
156
+ const maxAgeMs = effectiveLeakThresholdMs(opts.maxAgeMs ?? 0, opts.minLeakAgeMs ?? 0);
157
+ const now = opts.now ?? Date.now();
158
+ const result = { scanned: 0, orphans: 0, agedOut: 0, killed: 0, deleted: 0 };
159
+ let entries;
160
+ try {
161
+ entries = fs.readdirSync(tmpRoot);
162
+ }
163
+ catch {
164
+ return result;
165
+ }
166
+ for (const entry of entries) {
167
+ if (!entry.startsWith('bycli-verify-'))
168
+ continue;
169
+ const dir = path.join(tmpRoot, entry);
170
+ if (!isReapableTempDir(dir, tmpRoot))
171
+ continue;
172
+ result.scanned++;
173
+ let marker = null;
174
+ try {
175
+ const st = fs.lstatSync(dir);
176
+ if (!st.isDirectory() || st.isSymbolicLink())
177
+ continue; // skip non-dirs / symlinks
178
+ if (typeof process.getuid === 'function' && st.uid !== process.getuid())
179
+ continue; // not ours
180
+ marker = parseVerifyMarker(fs.readFileSync(path.join(dir, 'marker.json'), 'utf8'));
181
+ }
182
+ catch {
183
+ continue;
184
+ } // unreadable / missing marker → leave it (can't attribute ownership)
185
+ if (!marker)
186
+ continue;
187
+ let ownerAlive = marker.ownerPid !== null ? probe.isAlive(marker.ownerPid) : true;
188
+ if (ownerAlive && marker.ownerPid !== null) {
189
+ // pid-reuse guard (#6): an "alive" ownerPid that started after this run was created is a
190
+ // recycled pid, not the original owner → the real owner is dead → orphan.
191
+ const liveStart = probe.startTime ? probe.startTime(marker.ownerPid) : null;
192
+ if (isOwnerPidReused(liveStart, marker.startedAt, OWNER_PID_REUSE_TOLERANCE_MS))
193
+ ownerAlive = false;
194
+ }
195
+ const orphan = isOrphan(marker, ownerAlive);
196
+ const aged = isAgedOut(marker, now, maxAgeMs);
197
+ if (!orphan && !aged)
198
+ continue; // live owner + within TTL → still an active/managed run
199
+ if (orphan)
200
+ result.orphans++;
201
+ if (aged)
202
+ result.agedOut++;
203
+ // Confirmed target: terminate the child only if it is still alive AND identifiably ours.
204
+ if (marker.pid !== null && probe.isAlive(marker.pid)) {
205
+ const cmdline = probe.cmdline(marker.pid);
206
+ if (cmdline && cmdlineMatchesMarker(cmdline, marker)) {
207
+ const pid = marker.pid;
208
+ try {
209
+ probe.kill(pid, 'SIGTERM');
210
+ }
211
+ catch { /* already gone */ }
212
+ setTimeout(() => { try {
213
+ probe.kill(pid, 'SIGKILL');
214
+ }
215
+ catch { /* gone */ } }, graceMs).unref?.();
216
+ result.killed++;
217
+ log(`[reap] terminated verify runner pid=${pid} req=${marker.requestId}`);
218
+ }
219
+ }
220
+ try {
221
+ fs.rmSync(dir, { recursive: true, force: true });
222
+ result.deleted++;
223
+ }
224
+ catch { /* best-effort */ }
225
+ }
226
+ if (result.scanned > 0) {
227
+ log(`[reap] verify temp: scanned=${result.scanned} orphans=${result.orphans} agedOut=${result.agedOut} killed=${result.killed} deleted=${result.deleted}`);
228
+ }
229
+ return result;
230
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Real RunnerPort (M6a · 08) — the child-process verify runner mechanism.
3
+ *
4
+ * Replaces M5c's stubRunnerPort. Responsibilities (08 Process Rules):
5
+ * - create requestId BEFORE launch; async registry of in-flight runs
6
+ * - write input.json securely: per-request `0700` temp dir (owner/mode/realpath/lstat
7
+ * checked), exclusive `0600` file; raw seed args live here only, never in status/log
8
+ * - spawn `bycli internal verify-runner --jsonl …` with an args array (no shell), minimal env
9
+ * - parse stdout JSONL via the pure parseRunnerEvent; one and only one terminal `result`
10
+ * - hard timeout → SIGTERM (graceful) → SIGKILL; stdout/stderr byte caps
11
+ * - cancel is idempotent; temp dir is always cleaned on done/cancel/timeout
12
+ *
13
+ * M6a does NOT implement: startup reap, browser-adapter execution (needs a daemon Page),
14
+ * concurrency-queue refinement — those are M6b/c. Browser adapters report not-yet from the
15
+ * runner itself (see verify-runner-main.ts).
16
+ *
17
+ * SECURITY: `rawSeedArgs` go into input.json (0600) only. getVerifyStatus returns a
18
+ * summary-only VerifySummary (normalizeRunnerResult) — raw values never reach it.
19
+ */
20
+ import { type ChildProcess, type SpawnOptions } from 'node:child_process';
21
+ import { type VerifySummary, type RunnerConfig, type Metrics, type TempCapacity } from '@sovovs/bycli-recorder-core';
22
+ import type { RunnerPort } from '../highlevel/verify.js';
23
+ import { type Logger } from '../observability/logger.js';
24
+ type RunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'timeout' | 'cancelled';
25
+ type SpawnFn = (command: string, args: string[], options: SpawnOptions) => ChildProcess;
26
+ export interface RunnerPortOptions {
27
+ /** Range-validated config (09). Defaults to env (resolveRunnerConfig). */
28
+ config?: RunnerConfig;
29
+ /** What to launch: command + the args placed BEFORE the `internal verify-runner …` argv.
30
+ * Default: this node binary + the main entry, i.e. `node <main.js> internal verify-runner …`.
31
+ * Tests inject a fixture runner script here. */
32
+ launcher?: {
33
+ command: string;
34
+ prefixArgs: string[];
35
+ };
36
+ /** site/command → adapter module path. Default: ~/.bycli/clis/<site>/<command>.js. */
37
+ resolveAdapterPath?: (name: string) => string;
38
+ /** Injectable spawn (tests). Default node:child_process.spawn. */
39
+ spawnImpl?: SpawnFn;
40
+ /** Daemon port handed to the child (BYCLI_DAEMON_PORT) so M6b adapters can reach the Page. */
41
+ daemonPort?: number;
42
+ /** How long a terminal run lingers in `runs` for status reads before GC (default 5min). */
43
+ terminalRetentionMs?: number;
44
+ /** Observability (#1c · 09). The daemon injects its process singletons (shared with GET /metrics)
45
+ * via setDefaultRunnerObservability; standalone/tests get a throwaway registry + silent logger. */
46
+ metrics?: Metrics;
47
+ logger?: Logger;
48
+ /** Temp-store capacity guard (#1d · 09). When set, the runner measures verify temp usage before
49
+ * writing a new run and refuses (temp_store_full) past the high watermark. Undefined → no guard
50
+ * (one-shot CLI verify; only the long-running daemon enforces). */
51
+ tempCapacity?: TempCapacity;
52
+ /** Injectable temp-usage measurement (bytes). Default scans os.tmpdir() bycli-verify-* dirs.
53
+ * A throw is treated as over-capacity (fail-closed). Tests inject to force pressure without IO. */
54
+ measureTempBytes?: () => number;
55
+ /** Best-effort on-pressure sweep (shed orphan/aged temp dirs before re-measuring). The daemon
56
+ * passes its reap; default no-op (the periodic daemon sweep is the backstop). */
57
+ sweepTemp?: () => void;
58
+ }
59
+ /** The default runner port also exposes test/lifecycle helpers beyond the RunnerPort seam. */
60
+ export interface RunnerPortWithLifecycle extends RunnerPort {
61
+ /** Resolve when the run reaches a terminal state (test hook / status await). */
62
+ whenSettled(requestId: string): Promise<VerifySummary> | null;
63
+ /** Count of runs currently in the `running` state. */
64
+ activeCount(): number;
65
+ /** Count of runs waiting in the queue (status `queued`, not yet launched). */
66
+ queuedCount(): number;
67
+ /** Status + summary for an in-flight or settled run (daemon GET /v1/requests). null = unknown id. */
68
+ getRunStatus(requestId: string): {
69
+ status: RunStatus;
70
+ summary: VerifySummary | null;
71
+ } | null;
72
+ }
73
+ export declare function createRunnerPort(opts?: RunnerPortOptions): RunnerPortWithLifecycle;
74
+ /**
75
+ * Configure the daemon port the default runner hands to child processes via
76
+ * BYCLI_DAEMON_PORT (M6b: browser adapters connect back to this daemon for a Page).
77
+ * The daemon calls this at startup BEFORE the first defaultRunnerPort() use; calling it
78
+ * after the singleton is built is a no-op (the port is fixed at construction).
79
+ */
80
+ export declare function setDefaultRunnerDaemonPort(port: number): void;
81
+ /**
82
+ * Share the daemon's metrics + structured logger with the default runner (#1c), so runner counters
83
+ * (timeout / queue depth / protocol error / verify duration) surface on the daemon's GET /metrics and
84
+ * runner verify logs share the daemon's level. Same injection contract as setDefaultRunnerDaemonPort:
85
+ * the daemon calls this at startup BEFORE the first defaultRunnerPort() use; later calls are no-ops.
86
+ */
87
+ export declare function setDefaultRunnerObservability(metrics: Metrics, logger: Logger): void;
88
+ /**
89
+ * Enable the temp-store capacity guard on the default runner (#1d). Only the daemon (the long-running
90
+ * owner of verify temp dirs) calls this; one-shot CLI verify leaves it off. `sweepTemp` is the daemon's
91
+ * on-pressure shed (its reap). Same injection contract: call BEFORE the first defaultRunnerPort() use.
92
+ */
93
+ export declare function setDefaultRunnerTempGuard(capacity: TempCapacity, sweepTemp?: () => void): void;
94
+ export declare function defaultRunnerPort(): RunnerPortWithLifecycle;
95
+ export {};