@vforsh/argus 0.1.10 → 0.1.12

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 (146) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/argus.js +4781 -4880
  3. package/dist/bin.js +4 -47
  4. package/dist/bin.js.map +1 -1
  5. package/dist/cdp/sendCdpCommand.d.ts +11 -0
  6. package/dist/cdp/sendCdpCommand.d.ts.map +1 -0
  7. package/dist/cdp/sendCdpCommand.js +103 -0
  8. package/dist/cdp/sendCdpCommand.js.map +1 -0
  9. package/dist/cli/program.d.ts.map +1 -1
  10. package/dist/cli/program.js +2 -1
  11. package/dist/cli/program.js.map +1 -1
  12. package/dist/cli/register/domCommandBuilder.d.ts +22 -0
  13. package/dist/cli/register/domCommandBuilder.d.ts.map +1 -0
  14. package/dist/cli/register/domCommandBuilder.js +33 -0
  15. package/dist/cli/register/domCommandBuilder.js.map +1 -0
  16. package/dist/cli/register/index.d.ts +4 -0
  17. package/dist/cli/register/index.d.ts.map +1 -0
  18. package/dist/cli/register/index.js +45 -0
  19. package/dist/cli/register/index.js.map +1 -0
  20. package/dist/cli/register/registerDom.d.ts.map +1 -1
  21. package/dist/cli/register/registerDom.js +138 -121
  22. package/dist/cli/register/registerDom.js.map +1 -1
  23. package/dist/commands/chrome/browser.d.ts +5 -0
  24. package/dist/commands/chrome/browser.d.ts.map +1 -0
  25. package/dist/commands/chrome/browser.js +71 -0
  26. package/dist/commands/chrome/browser.js.map +1 -0
  27. package/dist/commands/chrome/processes.d.ts +24 -0
  28. package/dist/commands/chrome/processes.d.ts.map +1 -0
  29. package/dist/commands/chrome/processes.js +115 -0
  30. package/dist/commands/chrome/processes.js.map +1 -0
  31. package/dist/commands/chrome/shared.d.ts +31 -0
  32. package/dist/commands/chrome/shared.d.ts.map +1 -0
  33. package/dist/commands/chrome/shared.js +48 -0
  34. package/dist/commands/chrome/shared.js.map +1 -0
  35. package/dist/commands/chrome/targets.d.ts +26 -0
  36. package/dist/commands/chrome/targets.d.ts.map +1 -0
  37. package/dist/commands/chrome/targets.js +240 -0
  38. package/dist/commands/chrome/targets.js.map +1 -0
  39. package/dist/commands/chrome.d.ts +6 -63
  40. package/dist/commands/chrome.d.ts.map +1 -1
  41. package/dist/commands/chrome.js +3 -609
  42. package/dist/commands/chrome.js.map +1 -1
  43. package/dist/commands/chromeStart.d.ts.map +1 -1
  44. package/dist/commands/chromeStart.js +14 -44
  45. package/dist/commands/chromeStart.js.map +1 -1
  46. package/dist/commands/dom/shared.d.ts +12 -0
  47. package/dist/commands/dom/shared.d.ts.map +1 -0
  48. package/dist/commands/dom/shared.js +42 -0
  49. package/dist/commands/dom/shared.js.map +1 -0
  50. package/dist/commands/domAdd.d.ts.map +1 -1
  51. package/dist/commands/domAdd.js +11 -27
  52. package/dist/commands/domAdd.js.map +1 -1
  53. package/dist/commands/domClick.d.ts.map +1 -1
  54. package/dist/commands/domClick.js +14 -40
  55. package/dist/commands/domClick.js.map +1 -1
  56. package/dist/commands/domFill.d.ts.map +1 -1
  57. package/dist/commands/domFill.js +10 -31
  58. package/dist/commands/domFill.js.map +1 -1
  59. package/dist/commands/domFocus.d.ts.map +1 -1
  60. package/dist/commands/domFocus.js +11 -26
  61. package/dist/commands/domFocus.js.map +1 -1
  62. package/dist/commands/domHover.d.ts.map +1 -1
  63. package/dist/commands/domHover.js +11 -26
  64. package/dist/commands/domHover.js.map +1 -1
  65. package/dist/commands/domInfo.d.ts.map +1 -1
  66. package/dist/commands/domInfo.js +10 -25
  67. package/dist/commands/domInfo.js.map +1 -1
  68. package/dist/commands/domModify.d.ts.map +1 -1
  69. package/dist/commands/domModify.js +14 -26
  70. package/dist/commands/domModify.js.map +1 -1
  71. package/dist/commands/domRemove.d.ts.map +1 -1
  72. package/dist/commands/domRemove.js +10 -25
  73. package/dist/commands/domRemove.js.map +1 -1
  74. package/dist/commands/domScroll.d.ts.map +1 -1
  75. package/dist/commands/domScroll.js +7 -33
  76. package/dist/commands/domScroll.js.map +1 -1
  77. package/dist/commands/domScrollTo.d.ts.map +1 -1
  78. package/dist/commands/domScrollTo.js +7 -33
  79. package/dist/commands/domScrollTo.js.map +1 -1
  80. package/dist/commands/domSetFile.d.ts.map +1 -1
  81. package/dist/commands/domSetFile.js +14 -36
  82. package/dist/commands/domSetFile.js.map +1 -1
  83. package/dist/commands/domTree.d.ts.map +1 -1
  84. package/dist/commands/domTree.js +10 -25
  85. package/dist/commands/domTree.js.map +1 -1
  86. package/dist/commands/extension/setup.js +1 -1
  87. package/dist/commands/extension/setup.js.map +1 -1
  88. package/dist/commands/list.d.ts.map +1 -1
  89. package/dist/commands/list.js +3 -5
  90. package/dist/commands/list.js.map +1 -1
  91. package/dist/commands/logs.d.ts.map +1 -1
  92. package/dist/commands/logs.js +10 -57
  93. package/dist/commands/logs.js.map +1 -1
  94. package/dist/commands/net.d.ts.map +1 -1
  95. package/dist/commands/net.js +8 -22
  96. package/dist/commands/net.js.map +1 -1
  97. package/dist/commands/netTail.d.ts.map +1 -1
  98. package/dist/commands/netTail.js +11 -25
  99. package/dist/commands/netTail.js.map +1 -1
  100. package/dist/commands/page.d.ts.map +1 -1
  101. package/dist/commands/page.js +1 -99
  102. package/dist/commands/page.js.map +1 -1
  103. package/dist/commands/start.d.ts +1 -1
  104. package/dist/commands/start.d.ts.map +1 -1
  105. package/dist/commands/start.js +19 -86
  106. package/dist/commands/start.js.map +1 -1
  107. package/dist/commands/startShared.d.ts +32 -0
  108. package/dist/commands/startShared.d.ts.map +1 -0
  109. package/dist/commands/startShared.js +74 -0
  110. package/dist/commands/startShared.js.map +1 -0
  111. package/dist/commands/tail.d.ts.map +1 -1
  112. package/dist/commands/tail.js +8 -43
  113. package/dist/commands/tail.js.map +1 -1
  114. package/dist/commands/trace.d.ts.map +1 -1
  115. package/dist/commands/trace.js +7 -9
  116. package/dist/commands/trace.js.map +1 -1
  117. package/dist/commands/watcherSession.d.ts +29 -0
  118. package/dist/commands/watcherSession.d.ts.map +1 -0
  119. package/dist/commands/watcherSession.js +64 -0
  120. package/dist/commands/watcherSession.js.map +1 -0
  121. package/dist/commands/watcherStart.d.ts +1 -1
  122. package/dist/commands/watcherStart.d.ts.map +1 -1
  123. package/dist/commands/watcherStart.js +23 -89
  124. package/dist/commands/watcherStart.js.map +1 -1
  125. package/dist/config/argusConfig.d.ts.map +1 -1
  126. package/dist/config/argusConfig.js +69 -81
  127. package/dist/config/argusConfig.js.map +1 -1
  128. package/dist/eval/evalClient.js +5 -14
  129. package/dist/eval/evalClient.js.map +1 -1
  130. package/dist/httpClient.d.ts +1 -12
  131. package/dist/httpClient.d.ts.map +1 -1
  132. package/dist/httpClient.js +1 -84
  133. package/dist/httpClient.js.map +1 -1
  134. package/dist/runtime-code/strings.js +9 -1
  135. package/dist/runtime-code/strings.js.map +1 -1
  136. package/dist/watchers/queryParams.d.ts +34 -0
  137. package/dist/watchers/queryParams.d.ts.map +1 -0
  138. package/dist/watchers/queryParams.js +80 -0
  139. package/dist/watchers/queryParams.js.map +1 -0
  140. package/dist/watchers/requestWatcher.d.ts +16 -1
  141. package/dist/watchers/requestWatcher.d.ts.map +1 -1
  142. package/dist/watchers/requestWatcher.js +47 -9
  143. package/dist/watchers/requestWatcher.js.map +1 -1
  144. package/dist/watchers/resolveWatcher.js +2 -3
  145. package/dist/watchers/resolveWatcher.js.map +1 -1
  146. package/package.json +1 -1
@@ -9,73 +9,83 @@ import { runDomScroll } from '../../commands/domScroll.js';
9
9
  import { runDomScrollTo } from '../../commands/domScrollTo.js';
10
10
  import { runDomModifyAttr, runDomModifyClass, runDomModifyStyle, runDomModifyText, runDomModifyHtml } from '../../commands/domModify.js';
11
11
  import { resolveTestId } from '../../commands/resolveTestId.js';
12
+ import { registerDomSelectorCommand } from './domCommandBuilder.js';
12
13
  export function registerDom(program) {
13
14
  const dom = program.command('dom').alias('html').description('Inspect DOM elements in the connected page');
14
- dom.command('tree')
15
- .argument('[id]', 'Watcher id to query')
16
- .description('Fetch a DOM subtree rooted at element(s) matching a CSS selector')
17
- .option('--selector <css>', 'CSS selector to match element(s)')
18
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
19
- .option('--depth <n>', 'Max depth to traverse (default: 2)')
20
- .option('--max-nodes <n>', 'Max total nodes to return (default: 5000)')
21
- .option('--all', 'Allow multiple matches (default: error if >1 match)')
22
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
23
- .option('--json', 'Output JSON for automation')
24
- .addHelpText('after', '\nExamples:\n $ argus dom tree app --selector "body"\n $ argus dom tree app --testid "main-content"\n $ argus dom tree app --selector "div" --all --depth 3\n $ argus dom tree app --selector "#root" --json\n')
25
- .action(async (id, options) => {
26
- if (!resolveTestId(options))
27
- return;
28
- await runDomTree(id, options);
15
+ registerDomSelectorCommand(dom, {
16
+ name: 'tree',
17
+ description: 'Fetch a DOM subtree rooted at element(s) matching a CSS selector',
18
+ examples: [
19
+ 'argus dom tree app --selector "body"',
20
+ 'argus dom tree app --testid "main-content"',
21
+ 'argus dom tree app --selector "div" --all --depth 3',
22
+ 'argus dom tree app --selector "#root" --json',
23
+ ],
24
+ textOption: {
25
+ flags: '--text <string>',
26
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
27
+ },
28
+ configure: (command) => {
29
+ command.option('--depth <n>', 'Max depth to traverse (default: 2)');
30
+ command.option('--max-nodes <n>', 'Max total nodes to return (default: 5000)');
31
+ },
32
+ action: runDomTree,
29
33
  });
30
- dom.command('info')
31
- .argument('[id]', 'Watcher id to query')
32
- .description('Fetch detailed info for element(s) matching a CSS selector')
33
- .option('--selector <css>', 'CSS selector to match element(s)')
34
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
35
- .option('--all', 'Allow multiple matches (default: error if >1 match)')
36
- .option('--outer-html-max <n>', 'Max characters for outerHTML (default: 50000)')
37
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
38
- .option('--json', 'Output JSON for automation')
39
- .addHelpText('after', '\nExamples:\n $ argus dom info app --selector "body"\n $ argus dom info app --selector "div" --all\n $ argus dom info app --selector "#root" --json\n')
40
- .action(async (id, options) => {
41
- if (!resolveTestId(options))
42
- return;
43
- await runDomInfo(id, options);
34
+ registerDomSelectorCommand(dom, {
35
+ name: 'info',
36
+ description: 'Fetch detailed info for element(s) matching a CSS selector',
37
+ examples: [
38
+ 'argus dom info app --selector "body"',
39
+ 'argus dom info app --selector "div" --all',
40
+ 'argus dom info app --selector "#root" --json',
41
+ ],
42
+ textOption: {
43
+ flags: '--text <string>',
44
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
45
+ },
46
+ configure: (command) => {
47
+ command.option('--outer-html-max <n>', 'Max characters for outerHTML (default: 50000)');
48
+ },
49
+ action: runDomInfo,
44
50
  });
45
- dom.command('focus')
46
- .argument('[id]', 'Watcher id to query')
47
- .description('Focus element(s) matching a CSS selector')
48
- .option('--selector <css>', 'CSS selector to match element(s)')
49
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
50
- .option('--all', 'Allow multiple matches (default: error if >1 match)')
51
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
52
- .option('--json', 'Output JSON for automation')
53
- .addHelpText('after', '\nExamples:\n $ argus dom focus app --selector "#input"\n $ argus dom focus app --testid "search-box"\n $ argus dom focus app --selector ".item" --all\n')
54
- .action(async (id, options) => {
55
- if (!resolveTestId(options))
56
- return;
57
- await runDomFocus(id, options);
51
+ registerDomSelectorCommand(dom, {
52
+ name: 'focus',
53
+ description: 'Focus element(s) matching a CSS selector',
54
+ examples: [
55
+ 'argus dom focus app --selector "#input"',
56
+ 'argus dom focus app --testid "search-box"',
57
+ 'argus dom focus app --selector ".item" --all',
58
+ ],
59
+ textOption: {
60
+ flags: '--text <string>',
61
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
62
+ },
63
+ action: runDomFocus,
58
64
  });
59
- dom.command('add')
60
- .argument('[id]', 'Watcher id to query')
61
- .description('Insert HTML into the page relative to matched element(s)')
62
- .option('--selector <css>', 'CSS selector for target element(s)')
63
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
64
- .option('--html <string>', 'HTML to insert (use "-" for stdin)')
65
- .option('--html-file <path>', 'Read HTML to insert from a file')
66
- .option('--html-stdin', 'Read HTML to insert from stdin (same as --html -)')
67
- .option('--position <pos>', 'Insert position: beforebegin, afterbegin, beforeend, afterend (aliases: before, after, prepend, append)', 'beforeend')
68
- .option('--nth <index>', 'Insert at the zero-based match index')
69
- .option('--first', 'Insert at the first match (same as --nth 0)')
70
- .option('--expect <n>', 'Expect N matches before inserting')
71
- .option('--text', 'Insert text content (uses insertAdjacentText)')
72
- .option('--all', 'Insert at all matches (default: error if >1 match)')
73
- .option('--json', 'Output JSON for automation')
74
- .addHelpText('after', '\nExamples:\n $ argus dom add app --selector "#container" --html "<div>Hello</div>"\n $ argus dom add app --selector "body" --position append --html "<script src=\'debug.js\'></script>"\n $ argus dom add app --selector ".item" --all --position afterend --html "<hr>"\n $ argus dom add app --selector "#root" --html-file ./snippet.html\n $ cat snippet.html | argus dom add app --selector "#root" --html -\n $ argus dom add app --selector ".item" --nth 2 --html "<hr>"\n $ argus dom add app --selector "#banner" --text --html "Preview mode"\n')
75
- .action(async (id, options) => {
76
- if (!resolveTestId(options))
77
- return;
78
- await runDomAdd(id, options);
65
+ registerDomSelectorCommand(dom, {
66
+ name: 'add',
67
+ description: 'Insert HTML into the page relative to matched element(s)',
68
+ examples: [
69
+ 'argus dom add app --selector "#container" --html "<div>Hello</div>"',
70
+ 'argus dom add app --selector "body" --position append --html "<script src=\'debug.js\'></script>"',
71
+ 'argus dom add app --selector ".item" --all --position afterend --html "<hr>"',
72
+ 'argus dom add app --selector "#root" --html-file ./snippet.html',
73
+ 'cat snippet.html | argus dom add app --selector "#root" --html -',
74
+ 'argus dom add app --selector ".item" --nth 2 --html "<hr>"',
75
+ 'argus dom add app --selector "#banner" --text --html "Preview mode"',
76
+ ],
77
+ textOption: undefined,
78
+ configure: (command) => {
79
+ command.option('--html <string>', 'HTML to insert (use "-" for stdin)');
80
+ command.option('--html-file <path>', 'Read HTML to insert from a file');
81
+ command.option('--html-stdin', 'Read HTML to insert from stdin (same as --html -)');
82
+ command.option('--position <pos>', 'Insert position: beforebegin, afterbegin, beforeend, afterend (aliases: before, after, prepend, append)', 'beforeend');
83
+ command.option('--nth <index>', 'Insert at the zero-based match index');
84
+ command.option('--first', 'Insert at the first match (same as --nth 0)');
85
+ command.option('--expect <n>', 'Expect N matches before inserting');
86
+ command.option('--text', 'Insert text content (uses insertAdjacentText)');
87
+ },
88
+ action: runDomAdd,
79
89
  });
80
90
  dom.command('add-script')
81
91
  .argument('[id]', 'Watcher id to query')
@@ -110,69 +120,75 @@ Examples:
110
120
  json: options.json,
111
121
  });
112
122
  });
113
- dom.command('remove')
114
- .argument('[id]', 'Watcher id to query')
115
- .description('Remove elements from the page')
116
- .option('--selector <css>', 'CSS selector for elements to remove')
117
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
118
- .option('--all', 'Remove all matches (default: error if >1 match)')
119
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
120
- .option('--json', 'Output JSON for automation')
121
- .addHelpText('after', '\nExamples:\n $ argus dom remove app --selector ".debug-overlay"\n $ argus dom remove app --selector "[data-testid=\'temp\']" --all\n')
122
- .action(async (id, options) => {
123
- if (!resolveTestId(options))
124
- return;
125
- await runDomRemove(id, options);
123
+ registerDomSelectorCommand(dom, {
124
+ name: 'remove',
125
+ description: 'Remove elements from the page',
126
+ examples: ['argus dom remove app --selector ".debug-overlay"', 'argus dom remove app --selector "[data-testid=\'temp\']" --all'],
127
+ textOption: {
128
+ flags: '--text <string>',
129
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
130
+ },
131
+ action: runDomRemove,
126
132
  });
127
133
  registerDomModify(dom);
128
- dom.command('set-file')
129
- .alias('upload')
130
- .argument('[id]', 'Watcher id to query')
131
- .description('Set file(s) on a <input type="file"> element via CDP')
132
- .option('--selector <css>', 'CSS selector for file input element(s)')
133
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
134
- .requiredOption('--file <path...>', 'File path(s) to set on the input (repeatable)')
135
- .option('--all', 'Allow multiple matches (default: error if >1 match)')
136
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
137
- .option('--wait <duration>', 'Wait for selector to appear (e.g. 5s, 500ms)')
138
- .option('--json', 'Output JSON for automation')
139
- .addHelpText('after', '\nExamples:\n $ argus dom set-file app --selector "input[type=file]" --file ./build.zip\n $ argus dom set-file app --selector "#upload" --file a.png --file b.png\n $ argus dom set-file app --selector "input[type=file]" --file ./build.zip --wait 5s\n')
140
- .action(async (id, options) => {
141
- if (!resolveTestId(options))
142
- return;
143
- await runDomSetFile(id, options);
134
+ registerDomSelectorCommand(dom, {
135
+ name: 'set-file',
136
+ alias: 'upload',
137
+ description: 'Set file(s) on a <input type="file"> element via CDP',
138
+ examples: [
139
+ 'argus dom set-file app --selector "input[type=file]" --file ./build.zip',
140
+ 'argus dom set-file app --selector "#upload" --file a.png --file b.png',
141
+ 'argus dom set-file app --selector "input[type=file]" --file ./build.zip --wait 5s',
142
+ ],
143
+ textOption: {
144
+ flags: '--text <string>',
145
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
146
+ },
147
+ waitOption: true,
148
+ configure: (command) => {
149
+ command.requiredOption('--file <path...>', 'File path(s) to set on the input (repeatable)');
150
+ },
151
+ action: runDomSetFile,
144
152
  });
145
- dom.command('scroll')
146
- .argument('[id]', 'Watcher id to query')
147
- .description('Emulate a touch scroll gesture (fires real scroll/wheel events)')
148
- .option('--selector <css>', 'CSS selector — scroll at element center')
149
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
150
- .option('--pos <x,y>', 'Viewport coordinates to scroll at (mutually exclusive with selector)')
151
- .requiredOption('--by <dx,dy>', 'Scroll delta (positive y = scroll down)')
152
- .option('--all', 'Allow multiple matches (default: error if >1 match)')
153
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
154
- .option('--json', 'Output JSON for automation')
155
- .addHelpText('after', '\nExamples:\n $ argus dom scroll app --by 0,300\n $ argus dom scroll app --selector ".panel" --by 0,200\n $ argus dom scroll app --testid "feed" --by 0,500\n $ argus dom scroll app --pos 400,300 --by 0,200\n')
156
- .action(async (id, options) => {
157
- if (!resolveTestId(options))
158
- return;
159
- await runDomScroll(id, options);
153
+ registerDomSelectorCommand(dom, {
154
+ name: 'scroll',
155
+ description: 'Emulate a touch scroll gesture (fires real scroll/wheel events)',
156
+ examples: [
157
+ 'argus dom scroll app --by 0,300',
158
+ 'argus dom scroll app --selector ".panel" --by 0,200',
159
+ 'argus dom scroll app --testid "feed" --by 0,500',
160
+ 'argus dom scroll app --pos 400,300 --by 0,200',
161
+ ],
162
+ textOption: {
163
+ flags: '--text <string>',
164
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
165
+ },
166
+ configure: (command) => {
167
+ command.option('--pos <x,y>', 'Viewport coordinates to scroll at (mutually exclusive with selector)');
168
+ command.requiredOption('--by <dx,dy>', 'Scroll delta (positive y = scroll down)');
169
+ },
170
+ action: runDomScroll,
160
171
  });
161
- dom.command('scroll-to')
162
- .argument('[id]', 'Watcher id to query')
163
- .description('Scroll the viewport or elements into view / to a position')
164
- .option('--selector <css>', 'CSS selector to match element(s)')
165
- .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
166
- .option('--to <x,y>', 'Scroll to absolute position (viewport or element)')
167
- .option('--by <x,y>', 'Scroll by delta (viewport or element)')
168
- .option('--all', 'Allow multiple matches (default: error if >1 match)')
169
- .option('--text <string>', 'Filter by textContent (trimmed). Supports /regex/flags syntax')
170
- .option('--json', 'Output JSON for automation')
171
- .addHelpText('after', '\nExamples:\n $ argus dom scroll-to app --selector "#footer"\n $ argus dom scroll-to app --testid "footer"\n $ argus dom scroll-to app --to 0,1000\n $ argus dom scroll-to app --by 0,500\n $ argus dom scroll-to app --selector ".panel" --to 0,1000\n $ argus dom scroll-to app --selector ".panel" --by 0,500\n')
172
- .action(async (id, options) => {
173
- if (!resolveTestId(options))
174
- return;
175
- await runDomScrollTo(id, options);
172
+ registerDomSelectorCommand(dom, {
173
+ name: 'scroll-to',
174
+ description: 'Scroll the viewport or elements into view / to a position',
175
+ examples: [
176
+ 'argus dom scroll-to app --selector "#footer"',
177
+ 'argus dom scroll-to app --testid "footer"',
178
+ 'argus dom scroll-to app --to 0,1000',
179
+ 'argus dom scroll-to app --by 0,500',
180
+ 'argus dom scroll-to app --selector ".panel" --to 0,1000',
181
+ 'argus dom scroll-to app --selector ".panel" --by 0,500',
182
+ ],
183
+ textOption: {
184
+ flags: '--text <string>',
185
+ description: 'Filter by textContent (trimmed). Supports /regex/flags syntax',
186
+ },
187
+ configure: (command) => {
188
+ command.option('--to <x,y>', 'Scroll to absolute position (viewport or element)');
189
+ command.option('--by <x,y>', 'Scroll by delta (viewport or element)');
190
+ },
191
+ action: runDomScrollTo,
176
192
  });
177
193
  }
178
194
  function registerDomModify(dom) {
@@ -181,6 +197,7 @@ function registerDomModify(dom) {
181
197
  .command('attr')
182
198
  .argument('[id]', 'Watcher id to query')
183
199
  .argument('[attrs...]', 'Attributes: name (boolean) or name=value')
200
+ .description('Modify element attributes')
184
201
  .option('--selector <css>', 'CSS selector for target element(s)')
185
202
  .option('--testid <id>', 'Shorthand for --selector "[data-testid=\'<id>\']"')
186
203
  .option('--remove <attrs...>', 'Attributes to remove')
@@ -1 +1 @@
1
- {"version":3,"file":"registerDom.js","sourceRoot":"","sources":["../../../src/cli/register/registerDom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registerDom.js","sourceRoot":"","sources":["../../../src/cli/register/registerDom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ChromeCommandOptions } from './shared.js';
2
+ export declare const runChromeVersion: (options: ChromeCommandOptions) => Promise<void>;
3
+ export declare const runChromeStatus: (options: ChromeCommandOptions) => Promise<void>;
4
+ export declare const runChromeStop: (options: ChromeCommandOptions) => Promise<void>;
5
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/commands/chrome/browser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGvD,eAAO,MAAM,gBAAgB,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,IAAI,CAmBlF,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,IAAI,CAwBjF,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,SAAS,oBAAoB,KAAG,OAAO,CAAC,IAAI,CAgC/E,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { sendCdpCommand } from '../../cdp/sendCdpCommand.js';
2
+ import { createOutput } from '../../output/io.js';
3
+ import { loadChromeVersion, resolveChromeEndpointOrExit } from './shared.js';
4
+ export const runChromeVersion = async (options) => {
5
+ const output = createOutput(options);
6
+ const endpoint = await resolveChromeEndpointOrExit(options, output);
7
+ if (!endpoint) {
8
+ return;
9
+ }
10
+ const response = await loadChromeVersion(endpoint, output);
11
+ if (!response) {
12
+ return;
13
+ }
14
+ if (options.json) {
15
+ output.writeJson(response);
16
+ return;
17
+ }
18
+ output.writeHuman(`Browser: ${response.Browser}`);
19
+ output.writeHuman(`WebSocket: ${response.webSocketDebuggerUrl}`);
20
+ };
21
+ export const runChromeStatus = async (options) => {
22
+ const output = createOutput(options);
23
+ const endpoint = await resolveChromeEndpointOrExit(options, output);
24
+ if (!endpoint) {
25
+ return;
26
+ }
27
+ const response = await loadChromeVersion(endpoint, output);
28
+ if (!response) {
29
+ return;
30
+ }
31
+ if (!response.Browser) {
32
+ output.writeWarn(`invalid response from ${endpoint.host}:${endpoint.port}`);
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ if (options.json) {
37
+ output.writeJson(response);
38
+ return;
39
+ }
40
+ output.writeHuman(`ok ${endpoint.host}:${endpoint.port} ${response.Browser}`);
41
+ };
42
+ export const runChromeStop = async (options) => {
43
+ const output = createOutput(options);
44
+ const endpoint = await resolveChromeEndpointOrExit(options, output);
45
+ if (!endpoint) {
46
+ return;
47
+ }
48
+ const response = await loadChromeVersion(endpoint, output);
49
+ if (!response) {
50
+ return;
51
+ }
52
+ if (!response.webSocketDebuggerUrl) {
53
+ output.writeWarn(`No browser WebSocket endpoint exposed at ${endpoint.host}:${endpoint.port}.`);
54
+ process.exitCode = 1;
55
+ return;
56
+ }
57
+ try {
58
+ await sendCdpCommand(response.webSocketDebuggerUrl, { id: 1, method: 'Browser.close' });
59
+ }
60
+ catch (error) {
61
+ output.writeWarn(`Failed to close Chrome at ${endpoint.host}:${endpoint.port}: ${error instanceof Error ? error.message : error}`);
62
+ process.exitCode = 1;
63
+ return;
64
+ }
65
+ if (options.json) {
66
+ output.writeJson({ closed: true, host: endpoint.host, port: endpoint.port });
67
+ return;
68
+ }
69
+ output.writeHuman(`closed ${endpoint.host}:${endpoint.port}`);
70
+ };
71
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/commands/chrome/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type ChromeListOptions = {
2
+ json?: boolean;
3
+ pages?: boolean;
4
+ };
5
+ export type ChromeInstanceInfo = {
6
+ port: number;
7
+ pid: number;
8
+ browser: string;
9
+ webSocketDebuggerUrl: string;
10
+ targets: number;
11
+ pages: number;
12
+ pageDetails?: Array<{
13
+ title: string;
14
+ url: string;
15
+ }>;
16
+ };
17
+ /** Discover reachable Chrome instances with CDP enabled. */
18
+ export declare const discoverChromeInstances: (options?: {
19
+ pages?: boolean;
20
+ }) => Promise<ChromeInstanceInfo[]>;
21
+ /** Format a Chrome instance as a human-readable line. */
22
+ export declare const formatChromeInstanceLine: (result: ChromeInstanceInfo) => string;
23
+ export declare const runChromeList: (options: ChromeListOptions) => Promise<void>;
24
+ //# sourceMappingURL=processes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../../src/commands/chrome/processes.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEnE,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnD,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,GAAU,UAAU;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,kBAAkB,EAAE,CA6BzG,CAAA;AAED,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,GAAI,QAAQ,kBAAkB,KAAG,MAC8C,CAAA;AAEpH,eAAO,MAAM,aAAa,GAAU,SAAS,iBAAiB,KAAG,OAAO,CAAC,IAAI,CA6B5E,CAAA"}
@@ -0,0 +1,115 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { fetchJson } from '../../httpClient.js';
3
+ import { createOutput } from '../../output/io.js';
4
+ /** Discover reachable Chrome instances with CDP enabled. */
5
+ export const discoverChromeInstances = async (options) => {
6
+ const ports = await discoverChromeCdpPorts();
7
+ if (ports.length === 0)
8
+ return [];
9
+ const results = await Promise.all(ports.map(async ({ port, pid }) => {
10
+ try {
11
+ const [version, targets] = await Promise.all([
12
+ fetchJson(`http://127.0.0.1:${port}/json/version`, { timeoutMs: 2_000 }),
13
+ fetchJson(`http://127.0.0.1:${port}/json/list`, { timeoutMs: 2_000 }),
14
+ ]);
15
+ const userPages = targets.filter((t) => t.type === 'page' && isUserPage(t.url));
16
+ return {
17
+ port,
18
+ pid,
19
+ reachable: true,
20
+ browser: version.Browser,
21
+ webSocketDebuggerUrl: version.webSocketDebuggerUrl,
22
+ targets: targets.length,
23
+ pages: userPages.length,
24
+ ...(options?.pages && { pageDetails: userPages.map((p) => ({ title: p.title, url: p.url })) }),
25
+ };
26
+ }
27
+ catch {
28
+ return { port, pid, reachable: false };
29
+ }
30
+ }));
31
+ return results.filter((result) => result.reachable);
32
+ };
33
+ /** Format a Chrome instance as a human-readable line. */
34
+ export const formatChromeInstanceLine = (result) => `127.0.0.1:${result.port} pid=${result.pid} ${result.browser} ${result.pages} page${result.pages === 1 ? '' : 's'}`;
35
+ export const runChromeList = async (options) => {
36
+ const output = createOutput(options);
37
+ const ports = await discoverChromeCdpPorts();
38
+ if (ports.length === 0) {
39
+ output.writeHuman('No Chrome instances found listening on TCP ports.');
40
+ return;
41
+ }
42
+ const instances = await discoverChromeInstances(options);
43
+ if (instances.length === 0) {
44
+ output.writeHuman('Found Chrome processes listening on TCP, but none responded to CDP.');
45
+ return;
46
+ }
47
+ if (options.json) {
48
+ output.writeJson(instances);
49
+ return;
50
+ }
51
+ for (const result of instances) {
52
+ output.writeHuman(formatChromeInstanceLine(result));
53
+ if (!result.pageDetails) {
54
+ continue;
55
+ }
56
+ for (const page of result.pageDetails) {
57
+ output.writeHuman(` ${page.title} — ${page.url}`);
58
+ }
59
+ }
60
+ };
61
+ /**
62
+ * Chrome-internal URLs that CDP reports as `type: "page"` but are not user-visible tabs.
63
+ * Covers omnibox popups, NTP sub-frames, side panels, and other top-chrome UI surfaces.
64
+ */
65
+ const CHROME_INTERNAL_URL_PATTERN = /^(devtools|chrome-untrusted):\/\/|\.top-chrome\/|^chrome:\/\/newtab-footer\b/;
66
+ const isUserPage = (url) => !CHROME_INTERNAL_URL_PATTERN.test(url);
67
+ /**
68
+ * Match Chrome/Chromium process names in lsof output.
69
+ * With `+c 0`, macOS lsof escapes spaces as `\x20` (e.g. `Google\x20Chrome`).
70
+ */
71
+ const CHROME_NAME_PATTERN = /\b(google(\s|\\x20)*chrome|chromium|chrome)\b/i;
72
+ const discoverChromeCdpPorts = async () => {
73
+ let stdout;
74
+ try {
75
+ stdout = await new Promise((resolve, reject) => {
76
+ execFile('lsof', ['+c', '0', '-iTCP', '-sTCP:LISTEN', '-P', '-n'], { timeout: 5_000 }, (error, out) => {
77
+ if (error) {
78
+ reject(error);
79
+ return;
80
+ }
81
+ resolve(out);
82
+ });
83
+ });
84
+ }
85
+ catch {
86
+ return [];
87
+ }
88
+ const seen = new Set();
89
+ const results = [];
90
+ for (const line of stdout.split('\n')) {
91
+ if (!CHROME_NAME_PATTERN.test(line)) {
92
+ continue;
93
+ }
94
+ const pidMatch = line.match(/\s+(\d+)\s+/);
95
+ if (!pidMatch) {
96
+ continue;
97
+ }
98
+ const pid = parseInt(pidMatch[1], 10);
99
+ if (isNaN(pid)) {
100
+ continue;
101
+ }
102
+ const portMatch = line.match(/:(\d+)\s+\(LISTEN\)/);
103
+ if (!portMatch) {
104
+ continue;
105
+ }
106
+ const port = parseInt(portMatch[1], 10);
107
+ if (isNaN(port) || seen.has(port)) {
108
+ continue;
109
+ }
110
+ seen.add(port);
111
+ results.push({ port, pid });
112
+ }
113
+ return results;
114
+ };
115
+ //# sourceMappingURL=processes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../../src/commands/chrome/processes.ts"],"names":[],"mappings":"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"}