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,565 @@
1
+ /** Starts a line that carries one command's JSON result. */
2
+ export declare const JSON_RESULT = "\0sm-dev:json ";
3
+ /** How a result is laid out: on one line, or over several. */
4
+ export type JsonLayout = 'single' | 'multi';
5
+ /** The mistake in a `--json=` value, or null for none. */
6
+ export declare function jsonLayoutMistake(value: string): string | null;
7
+ /** Whether a line carries a result. */
8
+ export declare function isJsonLine(line: string): boolean;
9
+ /**
10
+ * A result line's data (the fields after `command`) and its command's
11
+ * own layout, or null for another line.
12
+ */
13
+ export declare function jsonResultData(line: string): {
14
+ data: Record<string, unknown>;
15
+ layout?: JsonLayout;
16
+ } | null;
17
+ /** A result line marked with its command's own layout, which wins over the client's. */
18
+ export declare function withLayout(line: string, layout: JsonLayout): string;
19
+ /** Starts a line the client prints to stderr rather than stdout. */
20
+ export declare const STDERR_LINE = "\0sm-dev:stderr ";
21
+ /**
22
+ * The commands with a JSON form, by name. `scripts`, `tabs` and `menu`
23
+ * only when they list (see `onlyInspects`), not when they pick or fire;
24
+ * `collection` and `script` with each verb, not `script <script>`
25
+ * (`hasJsonForm`).
26
+ */
27
+ export declare const JSON_COMMANDS: string[];
28
+ /** The line carrying `command`'s result, `data`'s fields after `command`. */
29
+ export declare function jsonResult(command: string, data: object): string;
30
+ /**
31
+ * How a marked line prints: where it goes and its text, or null for a
32
+ * plain line. A result is laid out as its command's `--json=` said,
33
+ * else as `layout` (the client's), else multi-line when stdout is a
34
+ * terminal and one line otherwise, so a program can split the output on
35
+ * newlines.
36
+ */
37
+ export declare function markedLine(line: string, layout: JsonLayout): {
38
+ stderr: boolean;
39
+ text: string;
40
+ } | null;
41
+ /** Short form of a collection, inside other objects. */
42
+ export interface CollectionRef {
43
+ /** `C2`, or a run's test collection's run (`D1`). */
44
+ id?: string;
45
+ name: string;
46
+ }
47
+ /** A collection in the manager. */
48
+ export interface Collection {
49
+ /** `C2`, or a run's test collection's run (`D1`). */
50
+ id?: string;
51
+ /** Its id inside the manager (a UUID in SourceMonkey), not the extension's. */
52
+ internalId: string;
53
+ name: string;
54
+ kind: 'container' | 'directory' | 'manifest';
55
+ /** A directory's or manifest's location; none for a container. */
56
+ location?: string;
57
+ /** A run's test collection: the run's id (`D1`). */
58
+ runCollection?: string;
59
+ enabled: boolean;
60
+ status: 'ok' | 'load-failed';
61
+ /** Why it failed to load. */
62
+ error?: string;
63
+ scriptCount: number;
64
+ /**
65
+ * In `collection list` and `show`: a local collection's files that
66
+ * differ from what it loaded, so a refresh would load them. Absent
67
+ * when none do.
68
+ */
69
+ onDisk?: {
70
+ modified: number;
71
+ deleted: number;
72
+ added: number;
73
+ manifest?: true;
74
+ };
75
+ }
76
+ export interface Tab {
77
+ /** `T1`. */
78
+ id: string;
79
+ url: string;
80
+ /** The CDP target id. */
81
+ targetId?: string;
82
+ /** The tab the page commands act on. */
83
+ selected: boolean;
84
+ /** Opened with --noscript: it runs no scripts. */
85
+ noScript?: boolean;
86
+ /** The saved .html file it serves its URL from, with --from-saved. */
87
+ savedFrom?: string;
88
+ /** Serving a saved page with --offline. */
89
+ offline?: boolean;
90
+ /** The tab that opened it. */
91
+ openedBy?: string;
92
+ /** A dialog waiting for an answer. */
93
+ dialog?: {
94
+ kind: string;
95
+ message: string;
96
+ };
97
+ /** The ids of the run's scripts running in its top frame. */
98
+ scripts: string[];
99
+ /** Its iframes, each after its parent; absent for none. */
100
+ frames?: Frame[];
101
+ }
102
+ /** One of a tab's iframes. */
103
+ export interface Frame {
104
+ /** `F3`: unique in the run. */
105
+ id: string;
106
+ /** The tab's id for a frame in its top frame, else the parent frame's. */
107
+ parent: string;
108
+ url: string;
109
+ /** The ids of the run's scripts running in it; under another manager, expected in it. */
110
+ scripts: string[];
111
+ /** Its <iframe> isn't visible: no size, or hidden. */
112
+ hidden?: true;
113
+ /** Its CDP frame id, in its target. */
114
+ frameId?: string;
115
+ /** Its CDP target, when Chrome runs it in a process of its own (a frame from another site); the same id as `frameId`. */
116
+ targetId?: string;
117
+ }
118
+ export type ScriptStatus = 'ok' | 'invalid';
119
+ /**
120
+ * What a script is doing on one tab. The run's scripts are `running`
121
+ * or `not-running`; a SourceMonkey-managed script has the toolbar
122
+ * badge's states.
123
+ */
124
+ export type TabState = 'running' | 'not-running' | 'manual' | 'error' | 'refused' | 'not-started' | 'unexpected' | 'changed' | 'kept-out' | 'unknown' | 'expected' | 'not-expected';
125
+ export interface TabActivity {
126
+ tab: string;
127
+ /** `running` when it runs in any of the tab's frames. */
128
+ state: TabState;
129
+ /**
130
+ * Where in the tab it runs, by frame id, the tab's own id for its top
131
+ * frame. Absent when that's the top frame only.
132
+ */
133
+ frames?: string[];
134
+ }
135
+ /** A script: one the run loaded (`1`), or one installed in SourceMonkey (`E1`). */
136
+ export interface Script {
137
+ /** Absent in `script list` for a run's script: only its run knows its number. */
138
+ id?: string;
139
+ /** Under another manager, a run's script in `scripts` and `status`: its E-id in the manager. */
140
+ installedAs?: string;
141
+ kind: 'run' | 'installed';
142
+ name: string;
143
+ /** The run's scripts: the path it was loaded from. */
144
+ file?: string;
145
+ /** Installed scripts: the collection holding it. */
146
+ collection?: CollectionRef;
147
+ /** Installed scripts, in `script list`: its id inside the manager (a UUID in SourceMonkey). */
148
+ internalId?: string;
149
+ namespace?: string;
150
+ version?: string;
151
+ /** Installed scripts, in `script list`: where it is loaded from. */
152
+ location?: string;
153
+ enabled?: boolean;
154
+ /** The run's scripts, and installed ones in `script list`. */
155
+ status?: ScriptStatus;
156
+ /** Why it is invalid. */
157
+ error?: string;
158
+ /** Why its last refresh failed, while its last good copy still runs. */
159
+ refreshError?: string;
160
+ /**
161
+ * Installed scripts, in `script list` and `show`: its local file
162
+ * changed or went since it was loaded, so a refresh would load that.
163
+ */
164
+ onDisk?: 'modified' | 'deleted';
165
+ /** The script `get` and `set` act on. */
166
+ selected?: boolean;
167
+ /** Under another manager, in `script list` and `show`: the live run whose script it is (`D1`). */
168
+ run?: string;
169
+ /** Under another manager: left by a run that ended (`D1`). */
170
+ leftBy?: string;
171
+ /** In `scripts` and `status`: what it is doing on each tab. */
172
+ tabs?: TabActivity[];
173
+ }
174
+ /** `status`'s extra per-script facts, for the run's scripts. */
175
+ export interface StatusScript extends Script {
176
+ /** On the selected tab, where there is one. */
177
+ menuCommands?: number;
178
+ values?: number;
179
+ /** On the selected tab, or every tab when there is none. */
180
+ errors?: number;
181
+ lastError?: string;
182
+ /** Its permission prompts waiting for an answer (`connect`). */
183
+ permissionPrompts?: {
184
+ host: string;
185
+ method: string;
186
+ url: string;
187
+ }[];
188
+ }
189
+ /** A userscript manager, by `--manager`'s full name. */
190
+ export type ManagerName = 'sourcemonkey' | 'tampermonkey' | 'violentmonkey';
191
+ /** A manager extension in the browser, enabled or not. */
192
+ export interface BrowserManager {
193
+ manager: ManagerName;
194
+ /** As the extension names itself (`Tampermonkey BETA`). */
195
+ name: string;
196
+ version: string;
197
+ /** Its extension id. */
198
+ id: string;
199
+ enabled: boolean;
200
+ /** Its "Allow User Scripts" is on, which it needs to run scripts. */
201
+ userScripts: boolean;
202
+ }
203
+ export interface RunSummary {
204
+ /** `D1`. */
205
+ id: string;
206
+ pid: number;
207
+ /** ISO 8601. */
208
+ started?: string;
209
+ browser: {
210
+ address: string;
211
+ owned: boolean;
212
+ headless: boolean;
213
+ };
214
+ /** The manager the run works with (`--manager`). */
215
+ manager?: ManagerName;
216
+ tabCount?: number;
217
+ /** The loaded scripts' paths. */
218
+ scriptFiles?: string[];
219
+ }
220
+ export interface ListData {
221
+ runs: RunSummary[];
222
+ }
223
+ /**
224
+ * How the client came to the run `status` shows: it started it, attached
225
+ * to it, or picked it some other way (`--run`, or an earlier command
226
+ * on the line); or, with none of its own, another active run.
227
+ */
228
+ export type RunConnection = 'started' | 'attached' | 'selected' | 'other';
229
+ export interface StatusData {
230
+ run?: RunSummary & {
231
+ connection?: RunConnection;
232
+ /** Started with `--detach`, so it outlives the client that started it. */
233
+ detached?: boolean;
234
+ /** Whether the browser has SourceMonkey; absent when it couldn't be told. */
235
+ sourceMonkey?: 'installed' | 'disabled' | 'absent';
236
+ /** The managers in the browser; absent when they couldn't be told. */
237
+ managers?: BrowserManager[];
238
+ /** The run's test collection, once a script was pushed. */
239
+ testCollection?: string;
240
+ /** The run's log file. */
241
+ log?: string;
242
+ /** Where a temp browser saves downloads. */
243
+ downloads?: string;
244
+ };
245
+ tabs: Tab[];
246
+ /** The selected tab, whose states `scripts` gives first. */
247
+ tab?: string;
248
+ scripts: StatusScript[];
249
+ }
250
+ /** The browser `status` shows with no run: the `--existing-browser` or `--open-browser` one, and its managers. */
251
+ export interface BrowserStatus {
252
+ address: string;
253
+ /** Whether a browser answers there. */
254
+ answering: boolean;
255
+ /** Chrome's version, when it answers. */
256
+ version?: string;
257
+ headless?: boolean;
258
+ /** The manager `--manager` picks. */
259
+ manager: ManagerName;
260
+ /** The managers in it; absent when they couldn't be told. */
261
+ managers?: BrowserManager[];
262
+ }
263
+ /**
264
+ * `status` with no run picked (no --run, start or attach): the browser
265
+ * the line names (with `--existing-browser` or `--open-browser`), and
266
+ * every active run's status, each with `connection: "other"`.
267
+ */
268
+ export interface StatusRunsData {
269
+ browser?: BrowserStatus;
270
+ runs: StatusData[];
271
+ }
272
+ export interface TabsData {
273
+ tabs: Tab[];
274
+ }
275
+ export interface FramesData {
276
+ tabs: {
277
+ tab: string;
278
+ url: string;
279
+ /** The scripts in its top frame. */
280
+ scripts: string[];
281
+ /** Its iframes; with a frame named, that one and those in it. */
282
+ frames: Frame[];
283
+ }[];
284
+ }
285
+ export interface ScriptsData {
286
+ /** The selected tab. */
287
+ tab?: string;
288
+ /** The run's scripts, then the installed scripts on the selected tab. */
289
+ scripts: Script[];
290
+ }
291
+ export interface ValuesData {
292
+ /** With a tab named (`values T2`): only the scripts running there. */
293
+ tab?: string;
294
+ scripts: {
295
+ script: string;
296
+ name: string;
297
+ values: Record<string, unknown>;
298
+ }[];
299
+ }
300
+ export interface GetData {
301
+ script: string;
302
+ key: string;
303
+ found: boolean;
304
+ value?: unknown;
305
+ }
306
+ export interface MatchPage {
307
+ url: string;
308
+ tab?: string;
309
+ matches: boolean;
310
+ /** The rules that matched it. */
311
+ matchedBy: string[];
312
+ /** The rules that excluded it; absent for none. */
313
+ excludedBy?: string[];
314
+ /** With --frames: the tab's iframes, each checked by its own URL. */
315
+ frames?: MatchFrame[];
316
+ }
317
+ export interface MatchFrame {
318
+ id: string;
319
+ parent: string;
320
+ url: string;
321
+ /** False too for a script with @noframes. */
322
+ matches: boolean;
323
+ matchedBy: string[];
324
+ excludedBy?: string[];
325
+ /** Its rules match, but @noframes keeps it out of frames. */
326
+ noframes?: true;
327
+ }
328
+ export interface MatchData {
329
+ results: {
330
+ /** The script's id in a run, else its file or URL. */
331
+ script: string;
332
+ name: string;
333
+ /** False for a script that can't run anywhere. */
334
+ valid: boolean;
335
+ /** Why it can't. */
336
+ error?: string;
337
+ pages: MatchPage[];
338
+ }[];
339
+ }
340
+ export interface ValidateData {
341
+ results: {
342
+ /** The script's file or URL. */
343
+ script: string;
344
+ verdict: 'ok' | 'invalid' | 'unchecked';
345
+ /** Why it is invalid, or couldn't be checked. */
346
+ error?: string;
347
+ /** Absent when there are none. */
348
+ warnings?: string[];
349
+ }[];
350
+ }
351
+ export interface MenuData {
352
+ tabs: {
353
+ tab: string;
354
+ url: string;
355
+ /**
356
+ * `builtin: 'run'` marks a manual script's "Run this script", listed
357
+ * first under it whether or not it has run.
358
+ */
359
+ commands: {
360
+ id: string;
361
+ script: string;
362
+ name: string;
363
+ builtin?: 'run';
364
+ /** Registered in an iframe: the frame's id (`F3`). */
365
+ frame?: string;
366
+ }[];
367
+ }[];
368
+ }
369
+ export interface LogsData {
370
+ /** The tab asked for; absent for `all`. */
371
+ tab?: string;
372
+ /** The script asked for. */
373
+ script?: string;
374
+ lines: LogLine[];
375
+ /** The position reached, as a log ID, for the next `--since`. */
376
+ until: number;
377
+ }
378
+ /** A log line (see docs/sm-dev-logs.md). */
379
+ export interface LogLine {
380
+ /** Its log ID: when it arrived, in microseconds since the epoch. */
381
+ id: number;
382
+ /** ISO 8601. */
383
+ time: string;
384
+ tab?: string;
385
+ /** From an iframe of the tab: its id (`F3`). */
386
+ frame?: string;
387
+ script?: string;
388
+ source: 'sm' | 'event' | 'script' | 'page';
389
+ /** Other sources it belongs to: a script's throw is `event`, also `sm` and `script`. */
390
+ also?: ('sm' | 'event' | 'script' | 'page')[];
391
+ /** The console type, the Log entry's level, or the event's name. */
392
+ kind: string;
393
+ text: string;
394
+ }
395
+ export interface ProbeData {
396
+ /** The tab probed, and its page. */
397
+ tab: string;
398
+ url: string;
399
+ selectors: {
400
+ selector: string;
401
+ /** Absent when the selector is invalid. */
402
+ count?: number;
403
+ /** Why the selector is invalid. */
404
+ error?: string;
405
+ /**
406
+ * With --css or --html, for matches in an iframe: its id (`F2`).
407
+ * Their `css` works within it (`--frame F2`).
408
+ */
409
+ frame?: string;
410
+ /** With --css or --html: the first matches. */
411
+ matches?: {
412
+ css?: string;
413
+ html?: string;
414
+ }[];
415
+ }[];
416
+ }
417
+ export interface CollectionListData {
418
+ collections: Collection[];
419
+ }
420
+ export interface ScriptListData {
421
+ /** When one was named. */
422
+ collection?: CollectionRef;
423
+ scripts: Script[];
424
+ }
425
+ /** `collection show`: the collection with its scripts. */
426
+ export interface CollectionShowData {
427
+ collection: Collection & {
428
+ scripts: Script[];
429
+ };
430
+ }
431
+ /** `collection enable`, `disable` and `rename`: the collection after. */
432
+ export interface CollectionChangeData {
433
+ collection: Collection;
434
+ }
435
+ export interface CollectionRefreshData {
436
+ /** As it is after. */
437
+ collection: Collection;
438
+ /** Its scripts that were added or loaded different text. */
439
+ updated: Script[];
440
+ /** How many loaded the same text. */
441
+ unchanged: number;
442
+ /** Its scripts that are gone, as they were. */
443
+ removed: Script[];
444
+ /** Under another manager: its scripts that couldn't be refreshed, each with `refreshError`. */
445
+ failed?: Script[];
446
+ }
447
+ /** `script enable`, `disable`, `move` and `uninstall`: the script after (or as it was, `removed`). */
448
+ export interface ScriptChangeData {
449
+ script: Script;
450
+ /** `script uninstall`: it is gone. */
451
+ removed?: true;
452
+ /**
453
+ * `script enable`, `move` and `install`: its other copies that were
454
+ * running, turned off, as the viewer does.
455
+ */
456
+ turnedOff?: Script[];
457
+ /** It is enabled, but its collection is disabled, so it doesn't run. */
458
+ collectionDisabled?: true;
459
+ }
460
+ export interface ScriptRefreshData {
461
+ script: Script;
462
+ /** It loaded different text. */
463
+ updated: boolean;
464
+ }
465
+ export interface ScriptInstallData extends Pick<ScriptChangeData, 'turnedOff' | 'collectionDisabled'> {
466
+ script: Script;
467
+ /** It was already installed there, so nothing changed. */
468
+ already?: true;
469
+ /** Under another manager: it replaced the script with the same name and namespace. */
470
+ replaced?: true;
471
+ }
472
+ export interface ScriptPrintData {
473
+ /** Its id, absent for another run's script. */
474
+ script?: string;
475
+ name: string;
476
+ /**
477
+ * With `--file`, the file printed: a `@require`, `@resource` or
478
+ * `@icon` by its URL, or a site icon by its name (`site-icons/github.com.svg`).
479
+ */
480
+ file?: {
481
+ kind: 'require' | 'resource' | 'icon';
482
+ url: string;
483
+ name?: string;
484
+ } | {
485
+ kind: 'site-icon';
486
+ path: string;
487
+ sites: string[];
488
+ };
489
+ /** The installed text; absent with `--out`. */
490
+ text?: string;
491
+ /** With `--out`, the file written, absolute. */
492
+ out?: string;
493
+ }
494
+ export interface ScriptSaveData {
495
+ /** Its id, absent for another run's script. */
496
+ script?: string;
497
+ name: string;
498
+ /** The directory saved into, absolute. */
499
+ dir: string;
500
+ /** Each file written; `path` is relative to `dir`. */
501
+ files: {
502
+ kind: 'script' | 'require' | 'resource' | 'icon';
503
+ url?: string;
504
+ name?: string;
505
+ path: string;
506
+ }[];
507
+ /** With `--include site-icons`: the script's site icons, in the order a page shows them. */
508
+ siteIcons?: SiteIcon[];
509
+ /** What wasn't saved, and why. */
510
+ notes?: string[];
511
+ }
512
+ /** One of a script's site icons, as a page shows it. */
513
+ export interface SiteIcon {
514
+ /** Where `script save` writes it, relative to its directory; absent for none found (the globe). */
515
+ path?: string;
516
+ /** Where it came from; absent for none found, or for one cached before that was kept. */
517
+ source?: 'favicon-store' | 'page' | 'favicon.ico' | 'google';
518
+ /** The sites it stands for, by the URL it links to. */
519
+ sites: string[];
520
+ }
521
+ /** A `@require` or `@resource`. */
522
+ export interface FileStatus {
523
+ /** As the header gives it. */
524
+ url: string;
525
+ /** `not-loaded` when the script failed to load. Absent when the manager doesn't say. */
526
+ status?: 'ok' | 'not-loaded';
527
+ /** The local file read in its place. */
528
+ local?: string;
529
+ }
530
+ /** A script in full, for `script show`. */
531
+ export interface ScriptDetails extends Script {
532
+ description?: string;
533
+ author?: string;
534
+ /** When its current text was loaded, ISO 8601. */
535
+ updatedAt?: string;
536
+ matching: {
537
+ match: string[];
538
+ include: string[];
539
+ exclude: string[];
540
+ excludeMatch: string[];
541
+ };
542
+ /** `document-idle` when the header gives none. */
543
+ runAt: string;
544
+ grants: string[];
545
+ requires: FileStatus[];
546
+ resources: (FileStatus & {
547
+ name: string;
548
+ })[];
549
+ /**
550
+ * Its own `@icon`, resolved; `path` is where `script save` writes it,
551
+ * and `local` the local file read in its place.
552
+ */
553
+ icon?: {
554
+ url: string;
555
+ path?: string;
556
+ local?: string;
557
+ };
558
+ /** Its site icons, in page order; absent until they have been looked up. */
559
+ siteIcons?: SiteIcon[];
560
+ /** Absent when the manager doesn't say. */
561
+ valueCount?: number;
562
+ }
563
+ export interface ScriptShowData {
564
+ script: ScriptDetails;
565
+ }
@@ -0,0 +1,71 @@
1
+ // `--json` output: the shapes each command's result takes, and how a
2
+ // result travels from the run to the client that prints it.
3
+ //
4
+ // The types here are the spec's (docs/sm-dev-json.md): change them
5
+ // together. Field names and enum meanings are fixed once released;
6
+ // fields and enum values can be added.
7
+ //
8
+ // A result is a line like any other on its way to the client, marked
9
+ // by `JSON_RESULT` so the client can print it multi-line at a terminal
10
+ // and on one line into a pipe. A command's other lines in JSON mode
11
+ // are marked `STDERR_LINE`, so stdout keeps only the JSON.
12
+ /** Starts a line that carries one command's JSON result. */
13
+ export const JSON_RESULT = '\u0000sm-dev:json ';
14
+ /** The mistake in a `--json=` value, or null for none. */
15
+ export function jsonLayoutMistake(value) {
16
+ return value === 'single' || value === 'multi' ? null : 'The --json flag takes single or multi, e.g. --json=multi';
17
+ }
18
+ // A result line, and the layout its command's own `--json=` gave.
19
+ const RESULT_LINE = /^\u0000sm-dev:json(?::(single|multi))? /;
20
+ /** Whether a line carries a result. */
21
+ export function isJsonLine(line) {
22
+ return RESULT_LINE.test(line);
23
+ }
24
+ /**
25
+ * A result line's data (the fields after `command`) and its command's
26
+ * own layout, or null for another line.
27
+ */
28
+ export function jsonResultData(line) {
29
+ const result = RESULT_LINE.exec(line);
30
+ if (!result)
31
+ return null;
32
+ const { command: _command, ...data } = JSON.parse(line.slice(result[0].length));
33
+ return { data, ...(result[1] ? { layout: result[1] } : {}) };
34
+ }
35
+ /** A result line marked with its command's own layout, which wins over the client's. */
36
+ export function withLayout(line, layout) {
37
+ return line.replace(RESULT_LINE, `\u0000sm-dev:json:${layout} `);
38
+ }
39
+ /** Starts a line the client prints to stderr rather than stdout. */
40
+ export const STDERR_LINE = '\u0000sm-dev:stderr ';
41
+ /**
42
+ * The commands with a JSON form, by name. `scripts`, `tabs` and `menu`
43
+ * only when they list (see `onlyInspects`), not when they pick or fire;
44
+ * `collection` and `script` with each verb, not `script <script>`
45
+ * (`hasJsonForm`).
46
+ */
47
+ export const JSON_COMMANDS = [
48
+ 'list', 'status', 'scripts', 'tabs', 'frames', 'values', 'get', 'match', 'validate', 'menu', 'logs', 'probe', 'collection', 'script',
49
+ ];
50
+ /** The line carrying `command`'s result, `data`'s fields after `command`. */
51
+ export function jsonResult(command, data) {
52
+ return JSON_RESULT + JSON.stringify({ command, ...data });
53
+ }
54
+ /**
55
+ * How a marked line prints: where it goes and its text, or null for a
56
+ * plain line. A result is laid out as its command's `--json=` said,
57
+ * else as `layout` (the client's), else multi-line when stdout is a
58
+ * terminal and one line otherwise, so a program can split the output on
59
+ * newlines.
60
+ */
61
+ export function markedLine(line, layout) {
62
+ const result = RESULT_LINE.exec(line);
63
+ if (result) {
64
+ const json = line.slice(result[0].length);
65
+ const own = result[1];
66
+ return { stderr: false, text: (own ?? layout) === 'multi' ? JSON.stringify(JSON.parse(json), null, 2) : json };
67
+ }
68
+ if (line.startsWith(STDERR_LINE))
69
+ return { stderr: true, text: line.slice(STDERR_LINE.length) };
70
+ return null;
71
+ }
@@ -0,0 +1,21 @@
1
+ import { type ManagerName } from './managers.js';
2
+ export type ManagerVerb = 'fetch' | 'install' | 'enable' | 'disable';
3
+ export interface ManagerActionOptions {
4
+ verb: ManagerVerb;
5
+ manager: ManagerName;
6
+ /** The browser's CDP endpoint; not needed for `fetch`. */
7
+ endpoint?: string;
8
+ /** ` --existing-browser [--browser <address>]` for advice (see `browserArg`). */
9
+ browserArg?: string;
10
+ /** The runs using SourceMonkey in that browser, which `disable` can't turn it off under. */
11
+ runsUsing?: string[];
12
+ /** Results, for stdout. */
13
+ out: (line: string) => void;
14
+ /** Progress, warnings and failures, for stderr. */
15
+ note: (line: string) => void;
16
+ }
17
+ /** A failure the person made in asking, rather than one doing it. */
18
+ export declare class ManagerUsageError extends Error {
19
+ }
20
+ /** Does one verb. Returns false when it failed, having said why. */
21
+ export declare function managerAction(o: ManagerActionOptions): Promise<boolean>;