@sovovs/bycli 1.8.0 → 2.1.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 (539) hide show
  1. package/cli-manifest.json +0 -61
  2. package/clis/twitter/search.js +3 -3
  3. package/dist/src/adapter-shadow.js +2 -2
  4. package/dist/src/browser/analyze.d.ts +10 -99
  5. package/dist/src/browser/analyze.js +10 -226
  6. package/dist/src/browser/cdp.js +67 -7
  7. package/dist/src/browser/daemon-client.d.ts +2 -0
  8. package/dist/src/browser/daemon-client.js +1 -1
  9. package/dist/src/browser/extension-capabilities.d.ts +13 -0
  10. package/dist/src/browser/extension-capabilities.js +22 -0
  11. package/dist/src/browser/extension-capabilities.test.d.ts +1 -0
  12. package/dist/src/browser/extension-version-metadata.test.d.ts +1 -0
  13. package/dist/src/browser/navigation-guard.d.ts +78 -0
  14. package/dist/src/browser/navigation-guard.js +142 -0
  15. package/dist/src/browser/navigation-guard.test.d.ts +1 -0
  16. package/dist/src/browser/page.d.ts +1 -0
  17. package/dist/src/browser/page.js +20 -1
  18. package/dist/src/browser/url-policy.d.ts +89 -0
  19. package/dist/src/browser/url-policy.js +311 -0
  20. package/dist/src/browser/url-policy.test.d.ts +1 -0
  21. package/dist/src/browser/verify-fixture.js +2 -2
  22. package/dist/src/build-manifest.js +4 -2
  23. package/dist/src/capabilityRouting.d.ts +3 -2
  24. package/dist/src/capabilityRouting.js +10 -2
  25. package/dist/src/cli.js +11 -14
  26. package/dist/src/commanderAdapter.js +5 -5
  27. package/dist/src/config-paths.d.ts +19 -0
  28. package/dist/src/config-paths.js +31 -0
  29. package/dist/src/daemon.js +256 -0
  30. package/dist/src/discovery.d.ts +10 -3
  31. package/dist/src/discovery.js +20 -10
  32. package/dist/src/discovery.test.d.ts +1 -0
  33. package/dist/src/execution.d.ts +5 -0
  34. package/dist/src/execution.js +272 -48
  35. package/dist/src/help.js +8 -8
  36. package/dist/src/main.js +18 -2
  37. package/dist/src/manifest-schema.d.ts +9 -0
  38. package/dist/src/manifest-schema.js +162 -0
  39. package/dist/src/manifest-schema.test.d.ts +1 -0
  40. package/dist/src/manifest-types.d.ts +1 -1
  41. package/dist/src/observation/redaction.js +10 -4
  42. package/dist/src/plugin.js +11 -8
  43. package/dist/src/recorder/highlevel/analyze.d.ts +29 -0
  44. package/dist/src/recorder/highlevel/analyze.js +91 -0
  45. package/dist/src/recorder/highlevel/init.d.ts +125 -0
  46. package/dist/src/recorder/highlevel/init.js +279 -0
  47. package/dist/src/recorder/highlevel/init.test.d.ts +1 -0
  48. package/dist/src/recorder/highlevel/verify.d.ts +73 -0
  49. package/dist/src/recorder/highlevel/verify.js +74 -0
  50. package/dist/src/recorder/http/analyze-runner.d.ts +28 -0
  51. package/dist/src/recorder/http/analyze-runner.js +78 -0
  52. package/dist/src/recorder/http/analyze-runner.test.d.ts +1 -0
  53. package/dist/src/recorder/http/handlers.d.ts +51 -0
  54. package/dist/src/recorder/http/handlers.js +219 -0
  55. package/dist/src/recorder/http/wrapper-config.d.ts +20 -0
  56. package/dist/src/recorder/http/wrapper-config.js +82 -0
  57. package/dist/src/recorder/http/wrapper-envelope.d.ts +31 -0
  58. package/dist/src/recorder/http/wrapper-envelope.js +51 -0
  59. package/dist/src/recorder/http/wrapper-gates.d.ts +16 -0
  60. package/dist/src/recorder/http/wrapper-gates.js +28 -0
  61. package/dist/src/recorder/http/wrapper-metrics.d.ts +1 -0
  62. package/dist/src/recorder/http/wrapper-metrics.js +5 -0
  63. package/dist/src/recorder/http/wrapper-registry.d.ts +50 -0
  64. package/dist/src/recorder/http/wrapper-registry.js +98 -0
  65. package/dist/src/recorder/http/wrapper-server.d.ts +59 -0
  66. package/dist/src/recorder/http/wrapper-server.js +240 -0
  67. package/dist/src/recorder/http/wrapper.test.d.ts +1 -0
  68. package/dist/src/recorder/observability/logger.d.ts +5 -0
  69. package/dist/src/recorder/observability/logger.js +13 -0
  70. package/dist/src/recorder/runner/config.d.ts +34 -0
  71. package/dist/src/recorder/runner/config.js +84 -0
  72. package/dist/src/recorder/runner/config.test.d.ts +1 -0
  73. package/dist/src/recorder/runner/reap.d.ts +79 -0
  74. package/dist/src/recorder/runner/reap.js +230 -0
  75. package/dist/src/recorder/runner/reap.test.d.ts +1 -0
  76. package/dist/src/recorder/runner/runner-port.d.ts +95 -0
  77. package/dist/src/recorder/runner/runner-port.js +518 -0
  78. package/dist/src/recorder/runner/runner-port.test.d.ts +1 -0
  79. package/dist/src/recorder/runner/session-keys.d.ts +28 -0
  80. package/dist/src/recorder/runner/session-keys.js +72 -0
  81. package/dist/src/recorder/runner/session-keys.test.d.ts +1 -0
  82. package/dist/src/recorder/runner/verify-runner-main.d.ts +96 -0
  83. package/dist/src/recorder/runner/verify-runner-main.js +292 -0
  84. package/dist/src/recorder/runner/verify-runner-main.test.d.ts +1 -0
  85. package/dist/src/registry-api.d.ts +1 -1
  86. package/dist/src/registry-api.types.test.d.ts +1 -0
  87. package/dist/src/registry-transaction.d.ts +42 -0
  88. package/dist/src/registry-transaction.js +194 -0
  89. package/dist/src/registry-transaction.test.d.ts +1 -0
  90. package/dist/src/registry.d.ts +58 -16
  91. package/dist/src/registry.js +131 -15
  92. package/dist/src/serialization.d.ts +1 -1
  93. package/dist/src/serialization.js +3 -3
  94. package/dist/src/types.d.ts +2 -0
  95. package/package.json +8 -5
  96. package/scripts/m1-daemon-navigate-drive.mjs +138 -0
  97. package/scripts/m1-extension-spike.mjs +237 -0
  98. package/scripts/m1-live-spike.mjs +156 -0
  99. package/scripts/m6b-connect-back-spike.sh +31 -0
  100. package/clis/12306/utils.test.js +0 -331
  101. package/clis/1688/assets.test.js +0 -39
  102. package/clis/1688/download.test.js +0 -31
  103. package/clis/1688/item.test.js +0 -67
  104. package/clis/1688/search.test.js +0 -75
  105. package/clis/1688/shared.test.js +0 -57
  106. package/clis/1688/store.test.js +0 -62
  107. package/clis/36kr/article.test.js +0 -46
  108. package/clis/36kr/hot.test.js +0 -15
  109. package/clis/36kr/news.test.js +0 -85
  110. package/clis/51job/utils.test.js +0 -69
  111. package/clis/_atlassian/shared.test.js +0 -170
  112. package/clis/aibase/news.test.js +0 -59
  113. package/clis/amazon/bestsellers.test.js +0 -29
  114. package/clis/amazon/discussion.test.js +0 -124
  115. package/clis/amazon/offer.test.js +0 -29
  116. package/clis/amazon/product.test.js +0 -24
  117. package/clis/amazon/rankings.test.js +0 -41
  118. package/clis/amazon/search.test.js +0 -22
  119. package/clis/amazon/shared.test.js +0 -44
  120. package/clis/apple-podcasts/commands.test.js +0 -119
  121. package/clis/apple-podcasts/utils.test.js +0 -57
  122. package/clis/arxiv/arxiv.test.js +0 -112
  123. package/clis/baidu-scholar/search.test.js +0 -23
  124. package/clis/barchart/greeks.test.js +0 -138
  125. package/clis/bilibili/comment.test.js +0 -153
  126. package/clis/bilibili/comments.test.js +0 -142
  127. package/clis/bilibili/dynamic.test.js +0 -68
  128. package/clis/bilibili/hot.test.js +0 -17
  129. package/clis/bilibili/subtitle.test.js +0 -196
  130. package/clis/bilibili/summary.test.js +0 -210
  131. package/clis/bilibili/utils.test.js +0 -61
  132. package/clis/bilibili/video.test.js +0 -132
  133. package/clis/binance/commands.test.js +0 -70
  134. package/clis/bloomberg/utils.test.js +0 -129
  135. package/clis/booking/booking.test.js +0 -356
  136. package/clis/boss/chatlist.test.js +0 -211
  137. package/clis/boss/chatmsg.test.js +0 -230
  138. package/clis/boss/search.test.js +0 -78
  139. package/clis/boss/utils.test.js +0 -34
  140. package/clis/brave/search.test.js +0 -76
  141. package/clis/chaoxing/utils.test.js +0 -45
  142. package/clis/chatgpt/commands.test.js +0 -45
  143. package/clis/chatgpt/envelope.test.js +0 -108
  144. package/clis/chatgpt/image.test.js +0 -188
  145. package/clis/chatgpt/utils.test.js +0 -330
  146. package/clis/chatgpt-app/ax.test.js +0 -35
  147. package/clis/chatwise/composer.test.js +0 -186
  148. package/clis/chess/analyze.test.js +0 -79
  149. package/clis/chess/game.test.js +0 -178
  150. package/clis/chess/games.test.js +0 -164
  151. package/clis/chess/stats.test.js +0 -79
  152. package/clis/chess/utils.test.js +0 -230
  153. package/clis/claude/ask.test.js +0 -338
  154. package/clis/claude/commands.test.js +0 -118
  155. package/clis/claude/utils.test.js +0 -148
  156. package/clis/cnki/search.test.js +0 -18
  157. package/clis/codex/sidebar.test.js +0 -329
  158. package/clis/coingecko/coingecko.test.js +0 -109
  159. package/clis/confluence/commands.test.js +0 -195
  160. package/clis/coupang/coupang.test.js +0 -159
  161. package/clis/coupang/utils.test.js +0 -62
  162. package/clis/ctrip/ctrip.test.js +0 -719
  163. package/clis/dblp/dblp.test.js +0 -397
  164. package/clis/deepseek/ask.test.js +0 -312
  165. package/clis/deepseek/detail.test.js +0 -81
  166. package/clis/deepseek/send.test.js +0 -107
  167. package/clis/deepseek/utils.test.js +0 -370
  168. package/clis/defillama/defillama.test.js +0 -99
  169. package/clis/devto/devto.test.js +0 -236
  170. package/clis/dianping/dianping.test.js +0 -578
  171. package/clis/douban/download.test.js +0 -170
  172. package/clis/douban/movie-hot.test.js +0 -14
  173. package/clis/douban/search.test.js +0 -11
  174. package/clis/douban/subject.test.js +0 -11
  175. package/clis/douban/utils.test.js +0 -438
  176. package/clis/doubao/detail.test.js +0 -42
  177. package/clis/doubao/history.test.js +0 -37
  178. package/clis/doubao/utils.test.js +0 -344
  179. package/clis/douyin/_shared/browser-fetch.test.js +0 -64
  180. package/clis/douyin/_shared/creation-id.test.js +0 -22
  181. package/clis/douyin/_shared/imagex-upload.test.js +0 -87
  182. package/clis/douyin/_shared/sts2.test.js +0 -27
  183. package/clis/douyin/_shared/text-extra.test.js +0 -37
  184. package/clis/douyin/_shared/timing.test.js +0 -28
  185. package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
  186. package/clis/douyin/_shared/tos-upload.test.js +0 -229
  187. package/clis/douyin/_shared/transcode.test.js +0 -91
  188. package/clis/douyin/_shared/vod-upload.test.js +0 -38
  189. package/clis/douyin/activities.test.js +0 -55
  190. package/clis/douyin/collections.test.js +0 -45
  191. package/clis/douyin/delete.test.js +0 -100
  192. package/clis/douyin/draft.test.js +0 -335
  193. package/clis/douyin/drafts.test.js +0 -11
  194. package/clis/douyin/hashtag.test.js +0 -171
  195. package/clis/douyin/location.test.js +0 -23
  196. package/clis/douyin/profile.test.js +0 -46
  197. package/clis/douyin/publish-upload-id.test.js +0 -170
  198. package/clis/douyin/publish.test.js +0 -38
  199. package/clis/douyin/stats.test.js +0 -22
  200. package/clis/douyin/update.test.js +0 -11
  201. package/clis/douyin/user-videos.test.js +0 -151
  202. package/clis/douyin/videos.test.js +0 -54
  203. package/clis/duckduckgo/search.test.js +0 -128
  204. package/clis/duckduckgo/suggest.test.js +0 -66
  205. package/clis/eastmoney/hot-rank.test.js +0 -59
  206. package/clis/endoflife/endoflife.test.js +0 -51
  207. package/clis/facebook/feed.test.js +0 -169
  208. package/clis/facebook/marketplace.test.js +0 -91
  209. package/clis/facebook/notifications.test.js +0 -458
  210. package/clis/facebook/search.test.js +0 -55
  211. package/clis/flathub/flathub.test.js +0 -90
  212. package/clis/flomo/memos.test.js +0 -144
  213. package/clis/gemini/ask.test.js +0 -100
  214. package/clis/gemini/deep-research-result.test.js +0 -155
  215. package/clis/gemini/deep-research.test.js +0 -181
  216. package/clis/gemini/reply-state.test.js +0 -671
  217. package/clis/gemini/utils.test.js +0 -198
  218. package/clis/geogebra/geogebra.test.js +0 -175
  219. package/clis/gitee/search.test.js +0 -65
  220. package/clis/gitee/user.test.js +0 -63
  221. package/clis/google/utils.test.js +0 -75
  222. package/clis/google-scholar/cite.test.js +0 -47
  223. package/clis/google-scholar/profile.test.js +0 -49
  224. package/clis/google-scholar/search.test.js +0 -71
  225. package/clis/goproxy/goproxy.test.js +0 -103
  226. package/clis/gov-law/commands.test.js +0 -39
  227. package/clis/gov-policy/gov-policy.test.js +0 -224
  228. package/clis/grok/ask.test.js +0 -29
  229. package/clis/grok/utils.test.js +0 -103
  230. package/clis/hackernews/hackernews.test.js +0 -132
  231. package/clis/hf/hf.test.js +0 -16
  232. package/clis/hupu/hot.test.js +0 -224
  233. package/clis/imdb/utils.test.js +0 -88
  234. package/clis/indeed/indeed.test.js +0 -375
  235. package/clis/instagram/_shared/private-publish.test.js +0 -705
  236. package/clis/instagram/_shared/protocol-capture.test.js +0 -114
  237. package/clis/instagram/download.test.js +0 -118
  238. package/clis/instagram/note.test.js +0 -53
  239. package/clis/instagram/post.test.js +0 -1647
  240. package/clis/instagram/reel.test.js +0 -167
  241. package/clis/instagram/story.test.js +0 -134
  242. package/clis/jd/commands.test.js +0 -41
  243. package/clis/jd/item.test.js +0 -354
  244. package/clis/jianyu/search.test.js +0 -153
  245. package/clis/jianyu/shared/procurement-contract.test.js +0 -72
  246. package/clis/jianyu/shared/procurement-detail.test.js +0 -84
  247. package/clis/jike/read.test.js +0 -86
  248. package/clis/jira/commands.test.js +0 -287
  249. package/clis/juejin/search.js +0 -123
  250. package/clis/juejin/search.test.js +0 -98
  251. package/clis/lesswrong/frontpage.test.js +0 -37
  252. package/clis/lichess/lichess.test.js +0 -85
  253. package/clis/linkedin/connect.test.js +0 -213
  254. package/clis/linkedin/inbox.test.js +0 -152
  255. package/clis/linkedin/job-detail.test.js +0 -38
  256. package/clis/linkedin/jobs-preferences.test.js +0 -43
  257. package/clis/linkedin/people-search.test.js +0 -216
  258. package/clis/linkedin/post-analytics.test.js +0 -40
  259. package/clis/linkedin/posts.test.js +0 -40
  260. package/clis/linkedin/profile-analytics.test.js +0 -67
  261. package/clis/linkedin/profile-experience.test.js +0 -152
  262. package/clis/linkedin/profile-projects.test.js +0 -111
  263. package/clis/linkedin/profile-read.test.js +0 -77
  264. package/clis/linkedin/safe-send.test.js +0 -204
  265. package/clis/linkedin/salesnav-inbox.test.js +0 -113
  266. package/clis/linkedin/salesnav-message.test.js +0 -172
  267. package/clis/linkedin/salesnav-search.test.js +0 -76
  268. package/clis/linkedin/salesnav-thread.test.js +0 -79
  269. package/clis/linkedin/search.test.js +0 -222
  270. package/clis/linkedin/sent-invitations.test.js +0 -62
  271. package/clis/linkedin/services-read.test.js +0 -105
  272. package/clis/linkedin/thread-snapshot.test.js +0 -89
  273. package/clis/linkedin/timeline.test.js +0 -81
  274. package/clis/linkedin-learning/course.test.js +0 -114
  275. package/clis/linkedin-learning/search.test.js +0 -144
  276. package/clis/linkedin-learning/trending.test.js +0 -123
  277. package/clis/linux-do/feed.test.js +0 -153
  278. package/clis/linux-do/topic-content.test.js +0 -59
  279. package/clis/lobsters/lobsters.test.js +0 -169
  280. package/clis/notebooklm/add-source.test.js +0 -97
  281. package/clis/notebooklm/compat.test.js +0 -16
  282. package/clis/notebooklm/create.test.js +0 -58
  283. package/clis/notebooklm/generate-audio.test.js +0 -63
  284. package/clis/notebooklm/generate-slides.test.js +0 -75
  285. package/clis/notebooklm/history.test.js +0 -58
  286. package/clis/notebooklm/note-list.test.js +0 -56
  287. package/clis/notebooklm/notes-get.test.js +0 -72
  288. package/clis/notebooklm/open.test.js +0 -63
  289. package/clis/notebooklm/rpc.test.js +0 -131
  290. package/clis/notebooklm/source-fulltext.test.js +0 -106
  291. package/clis/notebooklm/source-get.test.js +0 -84
  292. package/clis/notebooklm/source-guide.test.js +0 -104
  293. package/clis/notebooklm/summary.test.js +0 -78
  294. package/clis/notebooklm/utils.test.js +0 -449
  295. package/clis/notebooklm/write-note.test.js +0 -70
  296. package/clis/nuget/nuget.test.js +0 -111
  297. package/clis/oeis/oeis.test.js +0 -88
  298. package/clis/ones/task-helpers.test.js +0 -12
  299. package/clis/ones/worklog.test.js +0 -20
  300. package/clis/openfda/openfda.test.js +0 -114
  301. package/clis/openreview/openreview.test.js +0 -427
  302. package/clis/osv/osv.test.js +0 -97
  303. package/clis/paperreview/commands.test.js +0 -243
  304. package/clis/paperreview/utils.test.js +0 -49
  305. package/clis/pixiv/download.test.js +0 -87
  306. package/clis/pixiv/illusts.test.js +0 -99
  307. package/clis/pixiv/search.test.js +0 -83
  308. package/clis/powerchina/search.test.js +0 -93
  309. package/clis/producthunt/utils.test.js +0 -64
  310. package/clis/pubmed/pubmed.test.js +0 -276
  311. package/clis/quark/utils.test.js +0 -58
  312. package/clis/qwen/utils.test.js +0 -45
  313. package/clis/reddit/extract-media.test.js +0 -149
  314. package/clis/reddit/frontpage.test.js +0 -34
  315. package/clis/reddit/home.test.js +0 -170
  316. package/clis/reddit/hot.test.js +0 -32
  317. package/clis/reddit/popular.test.js +0 -26
  318. package/clis/reddit/read.test.js +0 -335
  319. package/clis/reddit/reply.test.js +0 -89
  320. package/clis/reddit/search.test.js +0 -26
  321. package/clis/reddit/subreddit-info.test.js +0 -163
  322. package/clis/reddit/subreddit.test.js +0 -31
  323. package/clis/reddit/subscribed.test.js +0 -168
  324. package/clis/reddit/whoami.test.js +0 -105
  325. package/clis/rednote/navigation.test.js +0 -26
  326. package/clis/rednote/rednote.test.js +0 -222
  327. package/clis/rest-countries/rest-countries.test.js +0 -83
  328. package/clis/reuters/reuters.test.js +0 -299
  329. package/clis/rfc/rfc.test.js +0 -74
  330. package/clis/sinafinance/stock.test.js +0 -59
  331. package/clis/spotify/utils.test.js +0 -67
  332. package/clis/stackoverflow/stackoverflow.test.js +0 -404
  333. package/clis/steam/steam.test.js +0 -46
  334. package/clis/substack/utils.test.js +0 -44
  335. package/clis/suno/commands.test.js +0 -188
  336. package/clis/suno/download.test.js +0 -151
  337. package/clis/suno/generate.test.js +0 -252
  338. package/clis/suno/utils.test.js +0 -329
  339. package/clis/taobao/commands.test.js +0 -41
  340. package/clis/tdx/hot-rank.test.js +0 -59
  341. package/clis/ths/hot-rank.test.js +0 -64
  342. package/clis/tieba/commands.test.js +0 -79
  343. package/clis/tieba/utils.test.js +0 -290
  344. package/clis/tiktok/creator-videos.test.js +0 -113
  345. package/clis/tiktok/refactor.test.js +0 -389
  346. package/clis/tiktok/write-refactor.test.js +0 -370
  347. package/clis/toutiao/toutiao.test.js +0 -378
  348. package/clis/tvmaze/tvmaze.test.js +0 -93
  349. package/clis/twitter/bookmark-folder.test.js +0 -395
  350. package/clis/twitter/bookmark-folders.test.js +0 -152
  351. package/clis/twitter/bookmark.test.js +0 -74
  352. package/clis/twitter/bookmarks.test.js +0 -205
  353. package/clis/twitter/delete.test.js +0 -85
  354. package/clis/twitter/device-follow.test.js +0 -287
  355. package/clis/twitter/download.test.js +0 -457
  356. package/clis/twitter/followers.test.js +0 -62
  357. package/clis/twitter/following.test.js +0 -338
  358. package/clis/twitter/hide-reply.test.js +0 -76
  359. package/clis/twitter/like.test.js +0 -73
  360. package/clis/twitter/likes.test.js +0 -220
  361. package/clis/twitter/list-add.test.js +0 -133
  362. package/clis/twitter/list-create.test.js +0 -169
  363. package/clis/twitter/list-remove.test.js +0 -110
  364. package/clis/twitter/list-tweets.test.js +0 -196
  365. package/clis/twitter/lists.test.js +0 -253
  366. package/clis/twitter/post.test.js +0 -258
  367. package/clis/twitter/profile.test.js +0 -39
  368. package/clis/twitter/quote.test.js +0 -194
  369. package/clis/twitter/reply.test.js +0 -237
  370. package/clis/twitter/retweet.test.js +0 -73
  371. package/clis/twitter/search.test.js +0 -349
  372. package/clis/twitter/shared.test.js +0 -794
  373. package/clis/twitter/thread.test.js +0 -58
  374. package/clis/twitter/timeline.test.js +0 -104
  375. package/clis/twitter/trending.test.js +0 -15
  376. package/clis/twitter/tweets.test.js +0 -362
  377. package/clis/twitter/unbookmark.test.js +0 -73
  378. package/clis/twitter/unlike.test.js +0 -75
  379. package/clis/twitter/unretweet.test.js +0 -73
  380. package/clis/twitter/utils.test.js +0 -169
  381. package/clis/uisdc/news.test.js +0 -66
  382. package/clis/uiverse/_shared.test.js +0 -62
  383. package/clis/uiverse/navigation.test.js +0 -12
  384. package/clis/upwork/upwork.test.js +0 -566
  385. package/clis/wanfang/search.test.js +0 -23
  386. package/clis/web/read.test.js +0 -392
  387. package/clis/weibo/delete.test.js +0 -94
  388. package/clis/weibo/envelope.test.js +0 -85
  389. package/clis/weibo/favorites.test.js +0 -114
  390. package/clis/weibo/publish.test.js +0 -192
  391. package/clis/weibo/user-posts.test.js +0 -92
  392. package/clis/weibo/utils.test.js +0 -36
  393. package/clis/weixin/drafts.test.js +0 -69
  394. package/clis/weixin/search.test.js +0 -227
  395. package/clis/weread/ai-outline.test.js +0 -83
  396. package/clis/weread/book-search.test.js +0 -242
  397. package/clis/weread/commands.test.js +0 -398
  398. package/clis/weread/private-api-regression.test.js +0 -369
  399. package/clis/weread/search-regression.test.js +0 -494
  400. package/clis/weread/utils.test.js +0 -128
  401. package/clis/weread-official/commands.test.js +0 -385
  402. package/clis/weread-official/utils.test.js +0 -242
  403. package/clis/wikidata/wikidata.test.js +0 -83
  404. package/clis/wikipedia/trending.test.js +0 -57
  405. package/clis/wttr/wttr.test.js +0 -84
  406. package/clis/xianyu/chat.test.js +0 -84
  407. package/clis/xianyu/im.test.js +0 -253
  408. package/clis/xianyu/item.test.js +0 -56
  409. package/clis/xianyu/publish.test.js +0 -220
  410. package/clis/xianyu/search.test.js +0 -17
  411. package/clis/xiaoe/xiaoe.test.js +0 -486
  412. package/clis/xiaohongshu/comments.test.js +0 -258
  413. package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
  414. package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
  415. package/clis/xiaohongshu/creator-notes.test.js +0 -281
  416. package/clis/xiaohongshu/creator-stats.test.js +0 -24
  417. package/clis/xiaohongshu/delete-note.test.js +0 -172
  418. package/clis/xiaohongshu/download.test.js +0 -316
  419. package/clis/xiaohongshu/navigation.test.js +0 -34
  420. package/clis/xiaohongshu/note.test.js +0 -249
  421. package/clis/xiaohongshu/publish.test.js +0 -608
  422. package/clis/xiaohongshu/search.test.js +0 -325
  423. package/clis/xiaohongshu/user-helpers.test.js +0 -160
  424. package/clis/xiaoyuzhou/auth.test.js +0 -124
  425. package/clis/xiaoyuzhou/download.test.js +0 -135
  426. package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
  427. package/clis/xiaoyuzhou/transcript.test.js +0 -195
  428. package/clis/xiaoyuzhou/utils.test.js +0 -39
  429. package/clis/xueqiu/comments.test.js +0 -696
  430. package/clis/xueqiu/danjuan-utils.test.js +0 -41
  431. package/clis/xueqiu/utils.test.js +0 -26
  432. package/clis/yahoo/search.test.js +0 -94
  433. package/clis/youdao/note.test.js +0 -99
  434. package/clis/youtube/channel.test.js +0 -59
  435. package/clis/youtube/feed.test.js +0 -131
  436. package/clis/youtube/transcript-group.test.js +0 -99
  437. package/clis/youtube/transcript.test.js +0 -296
  438. package/clis/youtube/utils.test.js +0 -84
  439. package/clis/yuanbao/ask.test.js +0 -124
  440. package/clis/yuanbao/new.test.js +0 -30
  441. package/clis/yuanbao/shared.test.js +0 -80
  442. package/clis/zhihu/answer-comments.test.js +0 -287
  443. package/clis/zhihu/answer-detail.test.js +0 -338
  444. package/clis/zhihu/answer.test.js +0 -54
  445. package/clis/zhihu/collection.test.js +0 -337
  446. package/clis/zhihu/collections.test.js +0 -182
  447. package/clis/zhihu/comment.test.js +0 -50
  448. package/clis/zhihu/download.test.js +0 -12
  449. package/clis/zhihu/favorite.test.js +0 -59
  450. package/clis/zhihu/follow.test.js +0 -42
  451. package/clis/zhihu/like.test.js +0 -41
  452. package/clis/zhihu/question.test.js +0 -251
  453. package/clis/zhihu/recommend.test.js +0 -143
  454. package/clis/zhihu/search.test.js +0 -198
  455. package/clis/zhihu/target.test.js +0 -77
  456. package/clis/zhihu/text.test.js +0 -24
  457. package/clis/zhihu/write-shared.test.js +0 -176
  458. package/clis/zlibrary/commands.test.js +0 -65
  459. package/clis/zsxq/search.test.js +0 -24
  460. package/clis/zsxq/topic.test.js +0 -30
  461. package/clis/zsxq/topics.test.js +0 -24
  462. package/clis/zsxq/utils.test.js +0 -31
  463. package/dist/src/adapter-shadow.test.js +0 -49
  464. package/dist/src/adapter-source.test.js +0 -29
  465. package/dist/src/browser/analyze.test.js +0 -166
  466. package/dist/src/browser/article-extract.e2e.test.js +0 -105
  467. package/dist/src/browser/article-extract.test.js +0 -94
  468. package/dist/src/browser/ax-snapshot.test.js +0 -91
  469. package/dist/src/browser/base-page.test.js +0 -758
  470. package/dist/src/browser/cdp-click-fixture.test.js +0 -87
  471. package/dist/src/browser/cdp.test.js +0 -79
  472. package/dist/src/browser/compound.test.js +0 -175
  473. package/dist/src/browser/daemon-client.test.js +0 -199
  474. package/dist/src/browser/dom-helpers.test.js +0 -106
  475. package/dist/src/browser/dom-snapshot.test.js +0 -313
  476. package/dist/src/browser/errors.test.js +0 -60
  477. package/dist/src/browser/extract.test.js +0 -129
  478. package/dist/src/browser/find.test.js +0 -180
  479. package/dist/src/browser/html-tree.test.js +0 -181
  480. package/dist/src/browser/network-cache.test.js +0 -58
  481. package/dist/src/browser/network-key.test.js +0 -49
  482. package/dist/src/browser/page.test.js +0 -378
  483. package/dist/src/browser/shape-filter.test.js +0 -101
  484. package/dist/src/browser/shape.test.js +0 -82
  485. package/dist/src/browser/stealth.test.js +0 -134
  486. package/dist/src/browser/target-errors.test.js +0 -94
  487. package/dist/src/browser/target-resolver.test.js +0 -118
  488. package/dist/src/browser/utils.test.js +0 -29
  489. package/dist/src/browser/verify-fixture.test.js +0 -219
  490. package/dist/src/browser.test.js +0 -232
  491. package/dist/src/build-manifest.test.js +0 -341
  492. package/dist/src/capabilityRouting.test.js +0 -63
  493. package/dist/src/cli-argv-preprocess.test.js +0 -209
  494. package/dist/src/cli.test.js +0 -2803
  495. package/dist/src/commanderAdapter.test.js +0 -352
  496. package/dist/src/commands/daemon.test.js +0 -219
  497. package/dist/src/completion.test.js +0 -24
  498. package/dist/src/convention-audit.test.js +0 -247
  499. package/dist/src/daemon.test.js +0 -60
  500. package/dist/src/doctor.test.js +0 -263
  501. package/dist/src/download/article-download.test.js +0 -235
  502. package/dist/src/download/index.test.js +0 -140
  503. package/dist/src/download/media-download.test.js +0 -112
  504. package/dist/src/download/progress.test.js +0 -36
  505. package/dist/src/electron-apps.test.js +0 -49
  506. package/dist/src/engine.test.js +0 -312
  507. package/dist/src/errors.test.js +0 -109
  508. package/dist/src/execution.test.js +0 -623
  509. package/dist/src/extension-manifest-regression.test.js +0 -12
  510. package/dist/src/external.test.js +0 -146
  511. package/dist/src/help.test.js +0 -58
  512. package/dist/src/hooks.test.js +0 -92
  513. package/dist/src/interceptor.test.js +0 -81
  514. package/dist/src/launcher.test.js +0 -138
  515. package/dist/src/node-network.test.js +0 -55
  516. package/dist/src/observation/artifact.test.js +0 -121
  517. package/dist/src/observation/manager.test.js +0 -13
  518. package/dist/src/observation/redaction.test.js +0 -32
  519. package/dist/src/observation/retention.test.js +0 -118
  520. package/dist/src/observation/ring-buffer.test.js +0 -22
  521. package/dist/src/output.test.js +0 -53
  522. package/dist/src/package-exports.test.js +0 -112
  523. package/dist/src/pipeline/executor.test.js +0 -182
  524. package/dist/src/pipeline/steps/download.test.js +0 -102
  525. package/dist/src/pipeline/steps/fetch.test.js +0 -117
  526. package/dist/src/pipeline/template.test.js +0 -175
  527. package/dist/src/pipeline/transform.test.js +0 -133
  528. package/dist/src/plugin-manifest.test.js +0 -179
  529. package/dist/src/plugin-scaffold.test.js +0 -83
  530. package/dist/src/plugin.test.js +0 -1324
  531. package/dist/src/registry.test.js +0 -209
  532. package/dist/src/runtime-detect.test.js +0 -39
  533. package/dist/src/serialization.test.js +0 -78
  534. package/dist/src/snapshotFormatter.test.js +0 -521
  535. package/dist/src/tui.test.js +0 -19
  536. package/dist/src/update-check.test.js +0 -116
  537. package/dist/src/utils.test.js +0 -155
  538. package/dist/src/validate.test.js +0 -90
  539. 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 {};