sourcemonkey 0.0.0-stage → 0.5.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 (367) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +87 -2
  3. package/dist/bytes.js +37 -0
  4. package/dist/channel-placeholder.js +5 -0
  5. package/dist/collection-scan.js +17 -0
  6. package/dist/collections.html +353 -0
  7. package/dist/compare.html +358 -0
  8. package/dist/composed-source.js +205 -0
  9. package/dist/connect-prompt.html +47 -0
  10. package/dist/debug/icons.html +211 -0
  11. package/dist/debug/storage.html +163 -0
  12. package/dist/debug-log.js +75 -0
  13. package/dist/diagnostic-location.js +64 -0
  14. package/dist/eval-hook.js +308 -0
  15. package/dist/extension/background.js +5263 -0
  16. package/dist/extension/channel.js +133 -0
  17. package/dist/extension/code-links.js +187 -0
  18. package/dist/extension/code-tabs.js +460 -0
  19. package/dist/extension/collection-dialog.js +619 -0
  20. package/dist/extension/collection-display.js +322 -0
  21. package/dist/extension/collections.js +2905 -0
  22. package/dist/extension/compare.js +867 -0
  23. package/dist/extension/concurrency.js +186 -0
  24. package/dist/extension/connect-grants.js +109 -0
  25. package/dist/extension/connect-prompt-page.js +70 -0
  26. package/dist/extension/connect-prompt.js +266 -0
  27. package/dist/extension/copy-button.js +63 -0
  28. package/dist/extension/copy-dialog.js +502 -0
  29. package/dist/extension/copy-preference.js +66 -0
  30. package/dist/extension/debug/icons.js +203 -0
  31. package/dist/extension/debug/storage.js +365 -0
  32. package/dist/extension/deep-link.js +77 -0
  33. package/dist/extension/delete-dialog.js +432 -0
  34. package/dist/extension/delete-icon.js +40 -0
  35. package/dist/extension/details-tooltips.js +66 -0
  36. package/dist/extension/directories.js +679 -0
  37. package/dist/extension/export-backup.js +407 -0
  38. package/dist/extension/export-dialog.js +142 -0
  39. package/dist/extension/file-access.js +74 -0
  40. package/dist/extension/file-changes.js +346 -0
  41. package/dist/extension/frame-info.js +85 -0
  42. package/dist/extension/github-provider.js +336 -0
  43. package/dist/extension/glyph.js +84 -0
  44. package/dist/extension/gm-bindings.js +601 -0
  45. package/dist/extension/gm-download.js +419 -0
  46. package/dist/extension/gm-menu.js +228 -0
  47. package/dist/extension/gm-notification.js +141 -0
  48. package/dist/extension/gm-originator-map.js +23 -0
  49. package/dist/extension/gm-tab-data.js +121 -0
  50. package/dist/extension/gm-tab.js +160 -0
  51. package/dist/extension/gm-url-change.js +111 -0
  52. package/dist/extension/gm-url-scheme.js +27 -0
  53. package/dist/extension/gm-values.js +176 -0
  54. package/dist/extension/gm-window-control.js +104 -0
  55. package/dist/extension/gm-xhr-headers.js +333 -0
  56. package/dist/extension/gm-xhr.js +584 -0
  57. package/dist/extension/injector.js +3145 -0
  58. package/dist/extension/install-capture.js +277 -0
  59. package/dist/extension/line-diff.js +233 -0
  60. package/dist/extension/local-copy.js +560 -0
  61. package/dist/extension/local-delete.js +276 -0
  62. package/dist/extension/location-kinds.js +108 -0
  63. package/dist/extension/log-format.js +158 -0
  64. package/dist/extension/managed-changes.js +361 -0
  65. package/dist/extension/managed-items.js +57 -0
  66. package/dist/extension/match-index.js +375 -0
  67. package/dist/extension/missing-scripts.js +66 -0
  68. package/dist/extension/more-menu.js +109 -0
  69. package/dist/extension/move-dialog.js +197 -0
  70. package/dist/extension/offscreen.js +37 -0
  71. package/dist/extension/options.js +504 -0
  72. package/dist/extension/page-heading.js +170 -0
  73. package/dist/extension/page-links.js +199 -0
  74. package/dist/extension/parse-check-client.js +70 -0
  75. package/dist/extension/parse-check.js +161 -0
  76. package/dist/extension/parse-sandbox-host.js +172 -0
  77. package/dist/extension/parse-sandbox.js +175 -0
  78. package/dist/extension/popup-commands-open.js +41 -0
  79. package/dist/extension/popup-view.js +387 -0
  80. package/dist/extension/popup.js +703 -0
  81. package/dist/extension/prism-userscript.js +53 -0
  82. package/dist/extension/refresh-error.js +136 -0
  83. package/dist/extension/refresh-targets.js +160 -0
  84. package/dist/extension/related-versions.js +1144 -0
  85. package/dist/extension/resize-observer-loop.js +19 -0
  86. package/dist/extension/row-cache.js +387 -0
  87. package/dist/extension/script-blobs.js +413 -0
  88. package/dist/extension/script-details.js +658 -0
  89. package/dist/extension/script-enablement.js +285 -0
  90. package/dist/extension/script-identity.js +310 -0
  91. package/dist/extension/script-keys.js +54 -0
  92. package/dist/extension/script-log-id.js +155 -0
  93. package/dist/extension/script-log.js +290 -0
  94. package/dist/extension/script-rejection.js +104 -0
  95. package/dist/extension/script-sites.js +158 -0
  96. package/dist/extension/script-store.js +3507 -0
  97. package/dist/extension/script-updater.js +991 -0
  98. package/dist/extension/script-url-hash.js +61 -0
  99. package/dist/extension/select-all.js +37 -0
  100. package/dist/extension/select-open-guard.js +90 -0
  101. package/dist/extension/site-icon.js +1261 -0
  102. package/dist/extension/sm-dev-link.js +302 -0
  103. package/dist/extension/solo-click.js +58 -0
  104. package/dist/extension/sticky-numbers.js +188 -0
  105. package/dist/extension/storage-breakdown.js +253 -0
  106. package/dist/extension/storage-scan.js +86 -0
  107. package/dist/extension/storage-usage.js +194 -0
  108. package/dist/extension/structural-keys.js +29 -0
  109. package/dist/extension/sw-teardown.js +36 -0
  110. package/dist/extension/tab-status.js +403 -0
  111. package/dist/extension/toolbar-summary.js +105 -0
  112. package/dist/extension/user-scripts-access.js +43 -0
  113. package/dist/extension/userscript.js +3672 -0
  114. package/dist/extension/value-store.js +204 -0
  115. package/dist/extension/version-probe-fetch.js +68 -0
  116. package/dist/extension/worker-client.js +109 -0
  117. package/dist/extension/worker-ops.js +171 -0
  118. package/dist/extension/zip-writer.js +24 -0
  119. package/dist/external-files.js +878 -0
  120. package/dist/file-loader.js +436 -0
  121. package/dist/file-locations.js +439 -0
  122. package/dist/generated-wrappers.js +5 -0
  123. package/dist/github-auth.js +148 -0
  124. package/dist/github-urls.js +46 -0
  125. package/dist/gm-api-catalog.js +217 -0
  126. package/dist/gm-connect.js +273 -0
  127. package/dist/gm-xhr-types.js +5 -0
  128. package/dist/http-read.js +142 -0
  129. package/dist/icons/icon-128.png +0 -0
  130. package/dist/icons/icon-16.png +0 -0
  131. package/dist/icons/icon-48.png +0 -0
  132. package/dist/local-file-overrides.js +558 -0
  133. package/dist/manifest.json +38 -0
  134. package/dist/markup-response.js +126 -0
  135. package/dist/match-targets.js +305 -0
  136. package/dist/menu-captions.js +22 -0
  137. package/dist/offscreen.html +39 -0
  138. package/dist/options.html +197 -0
  139. package/dist/parse-check-protocol.js +51 -0
  140. package/dist/parse-location.js +171 -0
  141. package/dist/parse-sandbox.html +56 -0
  142. package/dist/phase-timing.js +155 -0
  143. package/dist/popup.html +197 -0
  144. package/dist/public-suffixes.js +6957 -0
  145. package/dist/run-context.js +31 -0
  146. package/dist/runtime-messages.js +34 -0
  147. package/dist/sandboxed-page.js +35 -0
  148. package/dist/script-build.js +787 -0
  149. package/dist/script-display.js +383 -0
  150. package/dist/script-icon.js +43 -0
  151. package/dist/script-links.js +204 -0
  152. package/dist/script-source-url.js +214 -0
  153. package/dist/script-world.js +65 -0
  154. package/dist/sm-dev-protocol.js +84 -0
  155. package/dist/source-map.js +177 -0
  156. package/dist/stack-link.js +138 -0
  157. package/dist/styles.css +825 -0
  158. package/dist/unsafe-window-use.js +229 -0
  159. package/dist/url-match.js +734 -0
  160. package/dist/userscript-header.js +248 -0
  161. package/dist/userscript.html +1165 -0
  162. package/dist/vendor/fflate.LICENSE +21 -0
  163. package/dist/vendor/fflate.js +2692 -0
  164. package/dist/vendor/prism/prism-line-numbers.css +1 -0
  165. package/dist/vendor/prism/prism-line-numbers.js +1 -0
  166. package/dist/vendor/prism/prism.css +1 -0
  167. package/dist/vendor/prism/prism.js +1946 -0
  168. package/dist/version-compare.js +141 -0
  169. package/dist/version-probe.js +120 -0
  170. package/lib/build-info.json +1 -0
  171. package/lib/bytes.d.ts +3 -0
  172. package/lib/bytes.js +37 -0
  173. package/lib/channel-placeholder.d.ts +1 -0
  174. package/lib/channel-placeholder.js +5 -0
  175. package/lib/collection-scan.d.ts +8 -0
  176. package/lib/collection-scan.js +17 -0
  177. package/lib/composed-source.d.ts +28 -0
  178. package/lib/composed-source.js +205 -0
  179. package/lib/debug-log.d.ts +9 -0
  180. package/lib/debug-log.js +75 -0
  181. package/lib/diagnostic-location.d.ts +8 -0
  182. package/lib/diagnostic-location.js +64 -0
  183. package/lib/eval-hook.d.ts +34 -0
  184. package/lib/eval-hook.js +308 -0
  185. package/lib/external-files.d.ts +111 -0
  186. package/lib/external-files.js +878 -0
  187. package/lib/file-loader.d.ts +48 -0
  188. package/lib/file-loader.js +436 -0
  189. package/lib/file-locations.d.ts +44 -0
  190. package/lib/file-locations.js +439 -0
  191. package/lib/generated-wrappers.d.ts +11 -0
  192. package/lib/generated-wrappers.js +5 -0
  193. package/lib/github-auth.d.ts +12 -0
  194. package/lib/github-auth.js +148 -0
  195. package/lib/github-urls.d.ts +1 -0
  196. package/lib/github-urls.js +46 -0
  197. package/lib/gm-api-catalog.d.ts +24 -0
  198. package/lib/gm-api-catalog.js +217 -0
  199. package/lib/gm-connect.d.ts +34 -0
  200. package/lib/gm-connect.js +273 -0
  201. package/lib/gm-xhr-types.d.ts +68 -0
  202. package/lib/gm-xhr-types.js +5 -0
  203. package/lib/harness/browser-extensions.d.ts +73 -0
  204. package/lib/harness/browser-extensions.js +285 -0
  205. package/lib/harness/browser-lang.d.ts +20 -0
  206. package/lib/harness/browser-lang.js +86 -0
  207. package/lib/harness/browser-launch.d.ts +14 -0
  208. package/lib/harness/browser-launch.js +184 -0
  209. package/lib/harness/checks.d.ts +110 -0
  210. package/lib/harness/checks.js +321 -0
  211. package/lib/harness/cli.d.ts +2 -0
  212. package/lib/harness/cli.js +2259 -0
  213. package/lib/harness/command-args.d.ts +91 -0
  214. package/lib/harness/command-args.js +369 -0
  215. package/lib/harness/command-lines.d.ts +80 -0
  216. package/lib/harness/command-lines.js +180 -0
  217. package/lib/harness/command-list.d.ts +206 -0
  218. package/lib/harness/command-list.js +1475 -0
  219. package/lib/harness/console-commands.d.ts +463 -0
  220. package/lib/harness/console-commands.js +3216 -0
  221. package/lib/harness/download-watch.d.ts +21 -0
  222. package/lib/harness/download-watch.js +156 -0
  223. package/lib/harness/extension-backend.d.ts +41 -0
  224. package/lib/harness/extension-backend.js +100 -0
  225. package/lib/harness/extension-host.d.ts +112 -0
  226. package/lib/harness/extension-host.js +552 -0
  227. package/lib/harness/extension-launch.d.ts +67 -0
  228. package/lib/harness/extension-launch.js +285 -0
  229. package/lib/harness/extension-link.d.ts +315 -0
  230. package/lib/harness/extension-link.js +607 -0
  231. package/lib/harness/external-manager.d.ts +146 -0
  232. package/lib/harness/external-manager.js +414 -0
  233. package/lib/harness/fixture.d.ts +165 -0
  234. package/lib/harness/fixture.js +461 -0
  235. package/lib/harness/frame-sessions.d.ts +71 -0
  236. package/lib/harness/frame-sessions.js +248 -0
  237. package/lib/harness/frames.d.ts +68 -0
  238. package/lib/harness/frames.js +216 -0
  239. package/lib/harness/help-format.d.ts +17 -0
  240. package/lib/harness/help-format.js +127 -0
  241. package/lib/harness/host.d.ts +352 -0
  242. package/lib/harness/host.js +423 -0
  243. package/lib/harness/index.d.ts +8 -0
  244. package/lib/harness/index.js +10 -0
  245. package/lib/harness/input-file.d.ts +18 -0
  246. package/lib/harness/input-file.js +61 -0
  247. package/lib/harness/json-output.d.ts +565 -0
  248. package/lib/harness/json-output.js +71 -0
  249. package/lib/harness/manager-actions.d.ts +21 -0
  250. package/lib/harness/manager-actions.js +129 -0
  251. package/lib/harness/manager-commands.d.ts +142 -0
  252. package/lib/harness/manager-commands.js +1196 -0
  253. package/lib/harness/manager-fetch.d.ts +33 -0
  254. package/lib/harness/manager-fetch.js +239 -0
  255. package/lib/harness/managers.d.ts +24 -0
  256. package/lib/harness/managers.js +27 -0
  257. package/lib/harness/output-style.d.ts +125 -0
  258. package/lib/harness/output-style.js +322 -0
  259. package/lib/harness/page-commands.d.ts +134 -0
  260. package/lib/harness/page-commands.js +1141 -0
  261. package/lib/harness/page-output.d.ts +67 -0
  262. package/lib/harness/page-output.js +139 -0
  263. package/lib/harness/page-watch.d.ts +171 -0
  264. package/lib/harness/page-watch.js +607 -0
  265. package/lib/harness/parse-check-node.d.ts +3 -0
  266. package/lib/harness/parse-check-node.js +132 -0
  267. package/lib/harness/path-args.d.ts +22 -0
  268. package/lib/harness/path-args.js +148 -0
  269. package/lib/harness/playwright-chromium.d.ts +16 -0
  270. package/lib/harness/playwright-chromium.js +86 -0
  271. package/lib/harness/prepare.d.ts +168 -0
  272. package/lib/harness/prepare.js +364 -0
  273. package/lib/harness/prompt-editor.d.ts +17 -0
  274. package/lib/harness/prompt-editor.js +354 -0
  275. package/lib/harness/prompt-history.d.ts +13 -0
  276. package/lib/harness/prompt-history.js +89 -0
  277. package/lib/harness/rebuild-advice.d.ts +6 -0
  278. package/lib/harness/rebuild-advice.js +39 -0
  279. package/lib/harness/run-log.d.ts +47 -0
  280. package/lib/harness/run-log.js +140 -0
  281. package/lib/harness/run-logs.d.ts +132 -0
  282. package/lib/harness/run-logs.js +241 -0
  283. package/lib/harness/run.d.ts +194 -0
  284. package/lib/harness/run.js +1973 -0
  285. package/lib/harness/runs.d.ts +229 -0
  286. package/lib/harness/runs.js +726 -0
  287. package/lib/harness/save-html.d.ts +39 -0
  288. package/lib/harness/save-html.js +89 -0
  289. package/lib/harness/saved-pages.d.ts +120 -0
  290. package/lib/harness/saved-pages.js +275 -0
  291. package/lib/harness/script-mark.d.ts +17 -0
  292. package/lib/harness/script-mark.js +56 -0
  293. package/lib/harness/snapshot.d.ts +143 -0
  294. package/lib/harness/snapshot.js +474 -0
  295. package/lib/harness/stuck-tabs.d.ts +19 -0
  296. package/lib/harness/stuck-tabs.js +131 -0
  297. package/lib/harness/tab-refs.d.ts +20 -0
  298. package/lib/harness/tab-refs.js +80 -0
  299. package/lib/harness/tampermonkey.d.ts +71 -0
  300. package/lib/harness/tampermonkey.js +356 -0
  301. package/lib/harness/tm-ids.d.ts +18 -0
  302. package/lib/harness/tm-ids.js +88 -0
  303. package/lib/harness/violentmonkey.d.ts +34 -0
  304. package/lib/harness/violentmonkey.js +162 -0
  305. package/lib/harness/wait.d.ts +77 -0
  306. package/lib/harness/wait.js +458 -0
  307. package/lib/http-read.d.ts +30 -0
  308. package/lib/http-read.js +142 -0
  309. package/lib/local-file-overrides.d.ts +35 -0
  310. package/lib/local-file-overrides.js +558 -0
  311. package/lib/manifest.json +38 -0
  312. package/lib/markup-response.d.ts +11 -0
  313. package/lib/markup-response.js +126 -0
  314. package/lib/match-targets.d.ts +18 -0
  315. package/lib/match-targets.js +305 -0
  316. package/lib/menu-captions.d.ts +1 -0
  317. package/lib/menu-captions.js +22 -0
  318. package/lib/parse-check-protocol.d.ts +27 -0
  319. package/lib/parse-check-protocol.js +51 -0
  320. package/lib/parse-location.d.ts +12 -0
  321. package/lib/parse-location.js +171 -0
  322. package/lib/phase-timing.d.ts +12 -0
  323. package/lib/phase-timing.js +155 -0
  324. package/lib/public-suffixes.d.ts +1 -0
  325. package/lib/public-suffixes.js +6957 -0
  326. package/lib/run-context.d.ts +2 -0
  327. package/lib/run-context.js +31 -0
  328. package/lib/runtime-messages.d.ts +10 -0
  329. package/lib/runtime-messages.js +34 -0
  330. package/lib/sandboxed-page.d.ts +5 -0
  331. package/lib/sandboxed-page.js +35 -0
  332. package/lib/script-build.d.ts +111 -0
  333. package/lib/script-build.js +787 -0
  334. package/lib/script-display.d.ts +51 -0
  335. package/lib/script-display.js +383 -0
  336. package/lib/script-icon.d.ts +16 -0
  337. package/lib/script-icon.js +43 -0
  338. package/lib/script-links.d.ts +24 -0
  339. package/lib/script-links.js +204 -0
  340. package/lib/script-source-url.d.ts +8 -0
  341. package/lib/script-source-url.js +214 -0
  342. package/lib/script-world.d.ts +6 -0
  343. package/lib/script-world.js +65 -0
  344. package/lib/sm-dev-protocol.d.ts +251 -0
  345. package/lib/sm-dev-protocol.js +84 -0
  346. package/lib/source-map.d.ts +32 -0
  347. package/lib/source-map.js +177 -0
  348. package/lib/stack-link.d.ts +15 -0
  349. package/lib/stack-link.js +138 -0
  350. package/lib/unsafe-window-use.d.ts +1 -0
  351. package/lib/unsafe-window-use.js +229 -0
  352. package/lib/url-match.d.ts +40 -0
  353. package/lib/url-match.js +734 -0
  354. package/lib/userscript-header.d.ts +33 -0
  355. package/lib/userscript-header.js +248 -0
  356. package/lib/version-compare.d.ts +6 -0
  357. package/lib/version-compare.js +141 -0
  358. package/lib/version-probe.d.ts +17 -0
  359. package/lib/version-probe.js +120 -0
  360. package/package.json +55 -3
  361. package/skills/SourceMonkey-dev/SKILL.md +868 -0
  362. package/skills/SourceMonkey-dev/references/cdp.md +293 -0
  363. package/skills/SourceMonkey-dev/references/commands.md +297 -0
  364. package/skills/SourceMonkey-dev/references/other-managers.md +63 -0
  365. package/skills/SourceMonkey-dev/references/specs.md +46 -0
  366. package/skills/SourceMonkey-friction/SKILL.md +103 -0
  367. package/skills/SourceMonkey-friction/references/template.md +59 -0
@@ -0,0 +1,463 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import type { BrowserContext, Dialog, Page } from '@playwright/test';
3
+ import { type JsonLayout } from './json-output.js';
4
+ import { type InstalledManager } from './browser-extensions.js';
5
+ import { type ManagerName } from './managers.js';
6
+ import type { HarnessHost } from './host.js';
7
+ import type { PageAttachment } from './page-watch.js';
8
+ import { type ManagerControl } from './manager-commands.js';
9
+ import { type ParsedArgs } from './command-args.js';
10
+ import { type PreparedScript } from './prepare.js';
11
+ import { type RunLog } from './run-logs.js';
12
+ import { MISTAKE_PREFIX } from './output-style.js';
13
+ import { type SavedPageHeader } from './save-html.js';
14
+ import { type SavedPageFile, type SavedPageStart } from './saved-pages.js';
15
+ import { type ScriptRoots } from './checks.js';
16
+ /**
17
+ * A tab the run controls: its own, or one a controlled tab opened.
18
+ * Named `T<n>` in every list and command.
19
+ */
20
+ export interface ControlledTab {
21
+ /** T1 is the run's own tab; the tabs it opens count up from 2. */
22
+ n: number;
23
+ page: Page;
24
+ /** The page as the host knows it, to tell this tab's reports apart. */
25
+ link: PageAttachment;
26
+ /** Opened with `newtab --noscript`, or by such a tab: no scripts run in it. */
27
+ noScript?: boolean;
28
+ /** Serving a saved page, from `--from-saved`. */
29
+ saved?: SavedPageFile;
30
+ /** The page's JavaScript dialogs, for `accept` and `dismiss`. */
31
+ dialogs?: DialogTracker;
32
+ /** The number of the tab that opened this one. */
33
+ openedBy?: number;
34
+ /**
35
+ * Its CDP target id, for a debugging session alongside the run to
36
+ * name the same tab. Unset if it closed before it could be read.
37
+ */
38
+ targetId?: string | null;
39
+ /**
40
+ * Its last load failed, or its scripts never reported (said already),
41
+ * so the waits after it don't wait on it again.
42
+ */
43
+ stalled?: boolean;
44
+ }
45
+ /** ` [targetId=...]`, the tab's CDP id, for the end of a line. */
46
+ export declare function targetIdSuffix(targetId: string | null | undefined): string;
47
+ /**
48
+ * A SourceMonkey-managed script, which the run didn't push: named by
49
+ * its script number in SourceMonkey (`E12`), the same in every run.
50
+ */
51
+ export interface OtherScript {
52
+ label: string;
53
+ name: string;
54
+ collection: string;
55
+ /** What the toolbar badge says of it on the tab it was listed for. */
56
+ status: string;
57
+ values(): Promise<Record<string, unknown>>;
58
+ setValues(values: Record<string, unknown>): Promise<void>;
59
+ }
60
+ export interface ConsoleContext {
61
+ host: HarnessHost;
62
+ /** The controlled tabs still open, T1 first. */
63
+ tabs: () => ControlledTab[];
64
+ /** The tab the page commands act on. Starts as T1; `tabs` changes it. */
65
+ tab?: ControlledTab;
66
+ /**
67
+ * Open a new controlled tab, at `url` or blank, for `newtab`.
68
+ * Absent where the caller can't open one.
69
+ */
70
+ newTab?: (url?: string, options?: {
71
+ noScript?: boolean;
72
+ saved?: SavedPageStart;
73
+ timeoutMs?: number;
74
+ }) => Promise<ControlledTab>;
75
+ /** Switch a tab to running no scripts, or back, for `open --noscript` / `--script`. */
76
+ setTabScripts?: (tab: ControlledTab, noScript: boolean) => Promise<void>;
77
+ /** Load another script from disk, for `load`. */
78
+ loadScript?: (file: string, timeoutMs?: number) => Promise<void>;
79
+ /** Re-read scripts from disk (all, when none are named), for `update`. */
80
+ updateScripts?: (scripts?: PreparedScript[], timeoutMs?: number) => Promise<void>;
81
+ /** The scripts this run pushed, in load order. */
82
+ scripts: PreparedScript[];
83
+ /** SourceMonkey-managed scripts (see `OtherScript`), or another manager's. */
84
+ others?: {
85
+ /** How their list is headed, before ` on T1`: `SourceMonkey-managed scripts`. */
86
+ kind?: string;
87
+ /** Those on the tab's page, as its toolbar badge lists them. */
88
+ onTab(tab: ControlledTab): Promise<OtherScript[]>;
89
+ /** One already listed, by its label (`E2`). */
90
+ byLabel(label: string): OtherScript | undefined;
91
+ /** One installed anywhere, picked from `script list`'s rows, by the extension's id. */
92
+ installed(id: string, label: string, name: string, collection: string): OtherScript;
93
+ /** `set` on one changes the person's own data, so needs `--force`. */
94
+ guarded: boolean;
95
+ };
96
+ /**
97
+ * Under another manager, which reports nothing: whether a script is
98
+ * active on a tab is predicted from its rules.
99
+ */
100
+ predicted?: boolean;
101
+ /**
102
+ * Under another manager: which of the run's scripts are off there, by
103
+ * the manager's id, all of them while its switch is off. Read again
104
+ * (`refresh`) before each command that shows what a tab runs.
105
+ */
106
+ predictedOff?: {
107
+ refresh(): Promise<void>;
108
+ has(extensionId: string | undefined): boolean;
109
+ };
110
+ /**
111
+ * Each tab's iframes and the scripts in each, read again
112
+ * (`loadFrames`) before each command that shows them. Without it,
113
+ * scripts show for the top frame only.
114
+ */
115
+ frames?: Map<ControlledTab, FrameView[]>;
116
+ /** One of `others` picked for `get` and `set` (`scripts E1`), in place of `current`. */
117
+ currentOther?: OtherScript;
118
+ /**
119
+ * The script `get` and `set` act on. Starts as the first; `scripts`
120
+ * changes it.
121
+ */
122
+ current?: PreparedScript;
123
+ /**
124
+ * Typed at a terminal prompt, rather than piped. A person can see
125
+ * what is registered, so `menu` never waits for a late one.
126
+ */
127
+ interactive?: boolean;
128
+ out: (line: string) => void;
129
+ /**
130
+ * The running command prints its result as JSON (`--json`), set
131
+ * while it runs. Only for a command with a JSON form.
132
+ */
133
+ json?: boolean;
134
+ /** The running command's own `--json=single` or `=multi`. */
135
+ jsonLayout?: JsonLayout;
136
+ /** Ends the run, as Ctrl-C does. */
137
+ stop: () => void;
138
+ /** The id other shells know the run by (`--run`), for `status`. */
139
+ runId?: string;
140
+ /** The run's log file (see run-log.ts), for `status`. */
141
+ log?: string;
142
+ /** Where a temp browser saves downloads, for `status`. */
143
+ downloadsDir?: string;
144
+ /** The run's browser, for `status`: `connected to browser 127.0.0.1:9233`. */
145
+ browser?: string;
146
+ /** The same, for `status --json`. */
147
+ browserInfo?: {
148
+ address: string;
149
+ owned: boolean;
150
+ headless: boolean;
151
+ };
152
+ /** The run's test collection's id, once a script was pushed, for `status --json`. */
153
+ testCollection?: () => string | undefined;
154
+ /**
155
+ * Where the scripts run, for `status`: `SourceMonkey extension, test
156
+ * collection D2-a3f9`. Read as `status` runs.
157
+ */
158
+ backend?: () => string;
159
+ /** The userscript manager the run works with (`--manager`); SourceMonkey when unset. */
160
+ managerName?: ManagerName;
161
+ /** ` --existing-browser [--browser <address>]` for advice to run sm-dev against the run's browser (see `browserArg`). */
162
+ browserArg?: string;
163
+ /** The managers in the browser now, for `status`; null when unknown. */
164
+ managers?: () => Promise<InstalledManager[] | null>;
165
+ /** The run's log lines, for `logs` and `wait log` (see run-logs.ts). */
166
+ logs?: RunLog;
167
+ /**
168
+ * The log's position when the previous command (that wasn't only a
169
+ * look, like `status`) began, for `wait log`: a line the command set
170
+ * off, logged while it waited for the page to settle, still counts.
171
+ * Unset before the first.
172
+ */
173
+ previousStart?: number;
174
+ /** SourceMonkey's collections and installed scripts, for `collection list` and `script list`. */
175
+ manager?: ManagerControl;
176
+ /** The extension's id for one of `scripts`, once pushed, for `script list`. */
177
+ extensionIdOf?: (script: PreparedScript) => string | undefined;
178
+ /** Where `validate` and `match` find local copies of `@require`s: the run's own. */
179
+ roots?: ScriptRoots;
180
+ }
181
+ /**
182
+ * What's wrong with a run command's words, before it runs, or null (for
183
+ * a name that is no run command too: that is said elsewhere). `input`:
184
+ * the command as typed, its name first (a block's lines after a line
185
+ * break), or as a sender's words. `flag`: the flag it's about, so one
186
+ * that belongs before the command can be said to.
187
+ */
188
+ export declare function runCommandMistake(input: {
189
+ line: string;
190
+ } | {
191
+ words: string[];
192
+ }): {
193
+ error: string;
194
+ flag?: string;
195
+ } | null;
196
+ export declare function withoutQuery(url: string): string;
197
+ export declare function waitingReminders(ctx: ConsoleContext, before: WaitingState, said: readonly string[]): string[];
198
+ export interface WaitingState {
199
+ prompts: Set<string>;
200
+ dialogs: Map<ControlledTab, unknown>;
201
+ }
202
+ export declare function waitingState(ctx: ConsoleContext): WaitingState;
203
+ /**
204
+ * The run command, and its subcommand, whose help `--help` asks for
205
+ * (`click --help`, `script save --help`), or null when it isn't asked;
206
+ * an error for words that name no subcommand.
207
+ */
208
+ export declare function runCommandHelp(input: {
209
+ line: string;
210
+ } | {
211
+ words: string[];
212
+ }): {
213
+ command: string;
214
+ subcommand?: string;
215
+ } | {
216
+ error: string;
217
+ } | null;
218
+ /**
219
+ * Which of the commands for what's installed a command is (`collection
220
+ * C3 show`, `script list`), in any spelling, with its verb, or null for
221
+ * another command. These need SourceMonkey but no run.
222
+ */
223
+ export declare function managerCommandOf(words: string[]): {
224
+ command: 'collection' | 'script';
225
+ verb: string | undefined;
226
+ } | null;
227
+ /**
228
+ * A command line's words, as the prompt splits them (quotes kept
229
+ * together), for telling which command it is and where it runs.
230
+ */
231
+ export declare function commandWords(line: string): string[];
232
+ /**
233
+ * Whether a command line only inspects, so its output goes back to the
234
+ * client that sent it alone, rather than into the run's stream too. `tabs`, `scripts` and `menu` inspect when they list, and
235
+ * change things when they pick or fire.
236
+ */
237
+ export declare function onlyInspects(line: string): boolean;
238
+ /**
239
+ * Whether a command line has a JSON form (`--json`): one of
240
+ * `JSON_COMMANDS`, in a form that only looks (`tabs`, not `tabs T2`).
241
+ */
242
+ export declare function hasJsonForm(line: string): boolean;
243
+ /**
244
+ * Where a running command's output goes instead of the run's stream,
245
+ * while it runs: an inspecting command answers the client that sent it
246
+ * alone. Output the page or the scripts produce meanwhile
247
+ * isn't the command's, and still goes to the stream. `live` goes false
248
+ * when the command ends, so anything it started that prints later goes
249
+ * to the stream rather than a closed connection.
250
+ */
251
+ export declare const commandOutput: AsyncLocalStorage<{
252
+ line: (line: string) => void;
253
+ live: boolean;
254
+ }>;
255
+ /** How a line saying a command was invalid starts. */
256
+ export { MISTAKE_PREFIX };
257
+ /**
258
+ * Set while a command runs, in its own async work: what it prints is
259
+ * its reply, not something the page or a script printed on its own,
260
+ * which `wait log` looks for. Lines from the page and scripts arrive
261
+ * through events outside it. `inspects`: the command only looks, so
262
+ * its reply is no part of the run's log either.
263
+ */
264
+ export declare const inCommand: AsyncLocalStorage<{
265
+ inspects: boolean;
266
+ }>;
267
+ /**
268
+ * Run one typed line. Returns once its effect has been applied, so an
269
+ * agent driving this over a pipe can send the next line knowing the
270
+ * previous one is done. For a line a client sent: `cwd` is
271
+ * where the files it names are, and `words` are the sender's own words
272
+ * (the line is them joined by spaces), which page commands take as
273
+ * they are rather than splitting the line.
274
+ */
275
+ export declare function runConsoleCommand(line: string, ctx: ConsoleContext, { cwd, words }?: {
276
+ cwd?: string;
277
+ words?: string[];
278
+ }): Promise<number | boolean | void>;
279
+ /** `runLogLabel` marked up, for output: the log's path as one. */
280
+ export declare function runLogLabelUi(file: string, id: string | undefined): string;
281
+ /**
282
+ * The `collection` and `script` commands for what's installed (`collection`
283
+ * alone lists). `parsed`: its words as command-args.ts reads them, the
284
+ * verb as `form` (`list`), what it acts on as `subject` (`C3` in
285
+ * `collection C3 show`). `cwd`: where a path `script install` is given
286
+ * is from.
287
+ */
288
+ export declare function managerCommand(ctx: Pick<ConsoleContext, 'manager' | 'out' | 'json'> & Partial<ConsoleContext>, command: string, parsed: Pick<ParsedArgs, 'form' | 'subject' | 'words' | 'flags'>, cwd?: string): Promise<boolean | void>;
289
+ /**
290
+ * Warns when a saved page was saved with userscripts running: their
291
+ * changes are in it, so running them again may apply them twice.
292
+ * Nothing to say for a tab that runs none.
293
+ */
294
+ export declare function warnSavedUserscripts(out: (line: string) => void, given: string, header: SavedPageHeader, noScript: boolean): void;
295
+ /**
296
+ * Makes `tab` serve `saved` from now on: its URL gets the file, read
297
+ * fresh on each load. It lasts until another saved page replaces it;
298
+ * loading another URL in the tab goes to the live site meanwhile.
299
+ */
300
+ /**
301
+ * Starts serving a saved page in `tab` (`serveSaved`), first warning of
302
+ * the userscripts whose changes its file has, unless `runsNone`: the
303
+ * tab runs no scripts, or none are loaded.
304
+ */
305
+ export declare function serveSavedPage(tab: ControlledTab, saved: SavedPageStart, out: (line: string) => void, runsNone: boolean): Promise<void>;
306
+ export declare function serveSaved(tab: ControlledTab, saved: SavedPageFile, out: (line: string) => void): Promise<void>;
307
+ /** One of a tab's iframes, with the run's scripts running in it. */
308
+ export interface FrameView {
309
+ /** Its id's number: `F3` is 3. */
310
+ n: number;
311
+ /** Its parent's number, or null for a frame in the top frame. */
312
+ parent: number | null;
313
+ /** 1 for a frame in the top frame. */
314
+ depth: number;
315
+ url: string;
316
+ scripts: PreparedScript[];
317
+ /** The extension's ids for its live documents, where it says. */
318
+ documents: string[];
319
+ /** Read with `loadFrames`' details: its <iframe> isn't visible (no size, hidden). */
320
+ hidden?: true;
321
+ /** Read with `loadFrames`' details: its CDP frame id, in its target. */
322
+ frameId?: string;
323
+ /** Read with `loadFrames`' details: its CDP target, when it runs in a process of its own. */
324
+ targetId?: string;
325
+ }
326
+ /**
327
+ * The tabs of `tabs` that can be reloaded now. One waiting on a dialog
328
+ * would hang its reload, so it is left for the person, and named.
329
+ */
330
+ export declare function reloadable(tabs: ControlledTab[], out: (line: string) => void): ControlledTab[];
331
+ /**
332
+ * Reload one tab, saying so if it fails. False when it failed, or its
333
+ * scripts never reported (said already), so nothing waits on it more.
334
+ */
335
+ export declare function reloadTab(tab: ControlledTab, host: HarnessHost, out: (line: string) => void, timeoutMs?: number): Promise<boolean>;
336
+ /** Navigate one tab to `url`, as `reloadTab` reloads it. */
337
+ export declare function gotoInTab(tab: ControlledTab, host: HarnessHost, url: string, out: (line: string) => void, timeoutMs?: number): Promise<boolean>;
338
+ /** A script `--all` or `newtab all` opened no tab for, and why. */
339
+ export declare function skippedScriptLine(n: number, script: PreparedScript, reason: string): string;
340
+ /**
341
+ * Keeps Playwright from dismissing dialogs in `context`'s pages.
342
+ *
343
+ * - Playwright dismisses a dialog nobody listens for, on the page or its
344
+ * context, in every tab it's attached to: on a connected browser, the
345
+ * person's own tabs too.
346
+ * - And when the dialog is gone before its dismiss lands, the error is
347
+ * unhandled, and ends the process.
348
+ * - A listener that does nothing leaves each dialog to whoever does
349
+ * answer it: the person, or the run's DialogTracker in its own tabs.
350
+ * Also for a Playwright client that isn't the run's own.
351
+ */
352
+ export declare function leaveDialogsOpen(context: BrowserContext): void;
353
+ /**
354
+ * The page's `alert`, `confirm`, `prompt` and `beforeunload` dialogs.
355
+ * Playwright dismisses a dialog nobody listens for, which would answer
356
+ * a script's `prompt` with Cancel before anyone saw it. So each one is
357
+ * reported and left open, for the person at the browser or a typed
358
+ * `accept` / `dismiss`. Only when neither can answer (a headless
359
+ * browser, no command input) is it dismissed, since it would otherwise
360
+ * hang the page for good.
361
+ */
362
+ export declare class DialogTracker {
363
+ private readonly say;
364
+ private readonly visible;
365
+ private readonly tabRef;
366
+ /** The dialog open now, if any. */
367
+ current: Dialog | null;
368
+ /**
369
+ * Whether typed commands are, or are about to be, read, so `accept`
370
+ * can answer. Set before the page loads when they will be, or a
371
+ * prompt the script opens on load would be dismissed first.
372
+ */
373
+ commandsListening: boolean;
374
+ private waiters;
375
+ private openedCount;
376
+ private closedCount;
377
+ private currentOrdinal;
378
+ private constructor();
379
+ /**
380
+ * `say`: where a dialog opening is told (a run logs it as an event).
381
+ * `visible`: whether the browser is on screen, for a person to
382
+ * answer. `commandsComing`: whether typed commands will be read.
383
+ * `tabRef`: the tab's name for `accept` and `dismiss` to take, when
384
+ * the run has several tabs and a bare one could reach another.
385
+ */
386
+ static attach(page: Page, say: (text: string) => void, { visible, commandsComing, tabRef }: {
387
+ visible: boolean;
388
+ commandsComing?: boolean;
389
+ tabRef?: () => string | undefined;
390
+ }): Promise<DialogTracker>;
391
+ /**
392
+ * `work`, or true as soon as a dialog opens while it runs. A menu
393
+ * command that opens a dialog blocks the page, and the push that
394
+ * fired it with it, until the dialog is answered.
395
+ */
396
+ untilDialog(work: Promise<boolean>): Promise<boolean>;
397
+ /** The open dialog, now claimed by whoever answers it. */
398
+ take(): Dialog | null;
399
+ putBack(dialog: Dialog): void;
400
+ private closed;
401
+ private opened;
402
+ }
403
+ /**
404
+ * For the global --json: sends other log messages to stderr from now
405
+ * on, and lays results out on one line or multi-line (`layout`),
406
+ * rather than by whether stdout is a terminal.
407
+ */
408
+ export declare function setJsonOutput(layout?: JsonLayout): void;
409
+ /**
410
+ * Print one line of run output. With a prompt showing, the prompt and
411
+ * whatever is half-typed are erased, the line printed above them, and
412
+ * both redrawn with the cursor where it was, so streaming output never
413
+ * lands in the middle of a command being edited.
414
+ */
415
+ export declare function writeOutputLine(line: string): void;
416
+ /**
417
+ * Runs command lines one at a time, from whichever source: typed ones
418
+ * and ones sent from other shells take turns, so two never interleave.
419
+ * `hooks` bracket the line's own turn, not its wait for one, so output
420
+ * captured between them is that command's.
421
+ */
422
+ /**
423
+ * Runs a command line, resolving to false when the command failed in
424
+ * a way that should stop a line of several (a `wait` that timed out).
425
+ */
426
+ export type CommandRunner = (line: string, hooks?: {
427
+ start?: () => void;
428
+ end?: () => void;
429
+ cwd?: string;
430
+ words?: string[];
431
+ answer?: (line: string) => void;
432
+ interactive?: boolean;
433
+ json?: boolean;
434
+ }) => Promise<number>;
435
+ export declare function commandRunner(ctx: ConsoleContext): CommandRunner;
436
+ /**
437
+ * Whether dialogs wait for a typed (or sent) `accept`, rather than
438
+ * being dismissed in a headless run. On while commands are read.
439
+ */
440
+ export declare function setCommandsListening(tabs: ControlledTab[], listening: boolean): void;
441
+ /** What the prompt needs from whoever runs its commands. */
442
+ export interface PromptIO {
443
+ /** Prints a line, drawn around the prompt (see writeOutputLine). */
444
+ out: (line: string) => void;
445
+ /**
446
+ * Leaves: Ctrl-D, or Ctrl-C on an empty line. `now`: without waiting
447
+ * for the command running, as a second Ctrl-C asks.
448
+ */
449
+ exit: (now?: boolean) => void;
450
+ }
451
+ /**
452
+ * The `> ` prompt of `sm-dev --interactive`, reading the terminal: line
453
+ * editing and history (readline's own keys: arrows, Ctrl-A/E, Ctrl-U
454
+ * and so on), Tab completion of command names, and `... ` inside an
455
+ * `{{` block (see command-lines.ts), edited as one buffer at a terminal
456
+ * (see prompt-editor.ts). A block is one history entry, and history is
457
+ * kept across sessions (see prompt-history.ts). Ctrl-C clears the
458
+ * typed command, and on an empty line it or Ctrl-D leaves. Each command goes to `runLine` once typed, in order.
459
+ * Returns a function that closes the prompt.
460
+ */
461
+ export declare function readPromptCommands(io: PromptIO, runLine: (line: string, hooks?: {
462
+ start?: () => void;
463
+ }) => Promise<unknown>): () => void;