browser-debugger-cli 0.6.11 → 0.7.1

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 (134) hide show
  1. package/README.md +2 -0
  2. package/dist/commands/cdp.d.ts.map +1 -1
  3. package/dist/commands/cdp.js +90 -15
  4. package/dist/commands/cdp.js.map +1 -1
  5. package/dist/commands/dom/DomElementResolver.d.ts.map +1 -1
  6. package/dist/commands/dom/DomElementResolver.js +28 -7
  7. package/dist/commands/dom/DomElementResolver.js.map +1 -1
  8. package/dist/commands/dom/a11y.d.ts.map +1 -1
  9. package/dist/commands/dom/a11y.js +5 -1
  10. package/dist/commands/dom/a11y.js.map +1 -1
  11. package/dist/commands/dom/evalHelpers.js +1 -1
  12. package/dist/commands/dom/evalHelpers.js.map +1 -1
  13. package/dist/commands/dom/form.d.ts +14 -0
  14. package/dist/commands/dom/form.d.ts.map +1 -0
  15. package/dist/commands/dom/form.js +441 -0
  16. package/dist/commands/dom/form.js.map +1 -0
  17. package/dist/commands/dom/formDiscovery.d.ts +26 -0
  18. package/dist/commands/dom/formDiscovery.d.ts.map +1 -0
  19. package/dist/commands/dom/formDiscovery.js +476 -0
  20. package/dist/commands/dom/formDiscovery.js.map +1 -0
  21. package/dist/commands/dom/formFillHelpers.d.ts +72 -0
  22. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  23. package/dist/commands/dom/formFillHelpers.js +241 -5
  24. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  25. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  26. package/dist/commands/dom/formInteraction.js +119 -3
  27. package/dist/commands/dom/formInteraction.js.map +1 -1
  28. package/dist/commands/dom/formTypes.d.ts +75 -0
  29. package/dist/commands/dom/formTypes.d.ts.map +1 -0
  30. package/dist/commands/dom/formTypes.js +7 -0
  31. package/dist/commands/dom/formTypes.js.map +1 -0
  32. package/dist/commands/dom/helpers.d.ts +1 -1
  33. package/dist/commands/dom/helpers.js +1 -1
  34. package/dist/commands/dom/index.d.ts.map +1 -1
  35. package/dist/commands/dom/index.js +7 -2
  36. package/dist/commands/dom/index.js.map +1 -1
  37. package/dist/commands/dom/screenshotResize.d.ts +1 -1
  38. package/dist/commands/dom/screenshotResize.js +1 -1
  39. package/dist/commands/optionBehaviors.d.ts.map +1 -1
  40. package/dist/commands/optionBehaviors.js +37 -0
  41. package/dist/commands/optionBehaviors.js.map +1 -1
  42. package/dist/commands/shared/optionTypes.d.ts +22 -0
  43. package/dist/commands/shared/optionTypes.d.ts.map +1 -1
  44. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  45. package/dist/commands/shared/startHelpers.js +1 -0
  46. package/dist/commands/shared/startHelpers.js.map +1 -1
  47. package/dist/commands/start.d.ts.map +1 -1
  48. package/dist/commands/start.js +25 -6
  49. package/dist/commands/start.js.map +1 -1
  50. package/dist/connection/__tests__/flagsBuilder.unit.test.d.ts +9 -0
  51. package/dist/connection/__tests__/flagsBuilder.unit.test.d.ts.map +1 -0
  52. package/dist/connection/__tests__/flagsBuilder.unit.test.js +94 -0
  53. package/dist/connection/__tests__/flagsBuilder.unit.test.js.map +1 -0
  54. package/dist/connection/cdp.js.map +1 -1
  55. package/dist/connection/launcher/flagsBuilder.d.ts +26 -0
  56. package/dist/connection/launcher/flagsBuilder.d.ts.map +1 -1
  57. package/dist/connection/launcher/flagsBuilder.js +36 -8
  58. package/dist/connection/launcher/flagsBuilder.js.map +1 -1
  59. package/dist/connection/launcher.d.ts.map +1 -1
  60. package/dist/connection/launcher.js +20 -9
  61. package/dist/connection/launcher.js.map +1 -1
  62. package/dist/constants.d.ts.map +1 -1
  63. package/dist/constants.js +1 -0
  64. package/dist/constants.js.map +1 -1
  65. package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
  66. package/dist/daemon/handlers/SessionHandlers.js +1 -0
  67. package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
  68. package/dist/daemon/launcher.d.ts.map +1 -1
  69. package/dist/daemon/launcher.js +8 -2
  70. package/dist/daemon/launcher.js.map +1 -1
  71. package/dist/daemon/lifecycle/chromeConnection.js +1 -1
  72. package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
  73. package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
  74. package/dist/daemon/lifecycle/workerCleanup.js +3 -1
  75. package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
  76. package/dist/daemon/lifecycle/workerConfig.d.ts.map +1 -1
  77. package/dist/daemon/lifecycle/workerConfig.js +3 -0
  78. package/dist/daemon/lifecycle/workerConfig.js.map +1 -1
  79. package/dist/daemon/startSession.d.ts +2 -0
  80. package/dist/daemon/startSession.d.ts.map +1 -1
  81. package/dist/daemon/startSession.js +7 -1
  82. package/dist/daemon/startSession.js.map +1 -1
  83. package/dist/daemon/worker/types.d.ts +2 -0
  84. package/dist/daemon/worker/types.d.ts.map +1 -1
  85. package/dist/ipc/client.d.ts.map +1 -1
  86. package/dist/ipc/client.js +1 -0
  87. package/dist/ipc/client.js.map +1 -1
  88. package/dist/ipc/protocol/messages.d.ts +2 -2
  89. package/dist/ipc/protocol/messages.d.ts.map +1 -1
  90. package/dist/ipc/session/lifecycle.d.ts +4 -0
  91. package/dist/ipc/session/lifecycle.d.ts.map +1 -1
  92. package/dist/session/cleanup.d.ts.map +1 -1
  93. package/dist/session/cleanup.js +50 -4
  94. package/dist/session/cleanup.js.map +1 -1
  95. package/dist/session/paths.d.ts +1 -0
  96. package/dist/session/paths.d.ts.map +1 -1
  97. package/dist/session/paths.js +1 -0
  98. package/dist/session/paths.js.map +1 -1
  99. package/dist/session/port.d.ts +41 -0
  100. package/dist/session/port.d.ts.map +1 -0
  101. package/dist/session/port.js +134 -0
  102. package/dist/session/port.js.map +1 -0
  103. package/dist/types.d.ts +120 -1
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/ui/formatters/form.d.ts +15 -0
  106. package/dist/ui/formatters/form.d.ts.map +1 -0
  107. package/dist/ui/formatters/form.js +314 -0
  108. package/dist/ui/formatters/form.js.map +1 -0
  109. package/dist/ui/messages/errors.d.ts +41 -12
  110. package/dist/ui/messages/errors.d.ts.map +1 -1
  111. package/dist/ui/messages/errors.js +113 -15
  112. package/dist/ui/messages/errors.js.map +1 -1
  113. package/dist/utils/__tests__/shellDetection.unit.test.d.ts +12 -0
  114. package/dist/utils/__tests__/shellDetection.unit.test.d.ts.map +1 -0
  115. package/dist/utils/__tests__/shellDetection.unit.test.js +220 -0
  116. package/dist/utils/__tests__/shellDetection.unit.test.js.map +1 -0
  117. package/dist/utils/decisionTrees.d.ts.map +1 -1
  118. package/dist/utils/decisionTrees.js +5 -0
  119. package/dist/utils/decisionTrees.js.map +1 -1
  120. package/dist/utils/exitCodes.d.ts +2 -0
  121. package/dist/utils/exitCodes.d.ts.map +1 -1
  122. package/dist/utils/exitCodes.js +12 -0
  123. package/dist/utils/exitCodes.js.map +1 -1
  124. package/dist/utils/shellDetection.d.ts +34 -0
  125. package/dist/utils/shellDetection.d.ts.map +1 -0
  126. package/dist/utils/shellDetection.js +94 -0
  127. package/dist/utils/shellDetection.js.map +1 -0
  128. package/dist/utils/taskMappings.d.ts.map +1 -1
  129. package/dist/utils/taskMappings.js +5 -0
  130. package/dist/utils/taskMappings.js.map +1 -1
  131. package/dist/utils/url.d.ts.map +1 -1
  132. package/dist/utils/url.js +14 -0
  133. package/dist/utils/url.js.map +1 -1
  134. package/package.json +5 -5
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Shell Detection Unit Tests
3
+ *
4
+ * Tests shell quote damage detection for selectors and scripts.
5
+ *
6
+ * Following testing philosophy:
7
+ * - Test the BEHAVIOR: "Detects damaged input, provides actionable suggestions"
8
+ * - Test the PROPERTY: "Never throws, always returns valid result"
9
+ * - No mocking needed - pure utility functions
10
+ */
11
+ import assert from 'node:assert/strict';
12
+ import { describe, it } from 'node:test';
13
+ import { detectSelectorQuoteDamage, detectScriptQuoteDamage, hasAttributeSelector, } from '../../utils/shellDetection.js';
14
+ void describe('Shell Detection Utilities', () => {
15
+ void describe('hasAttributeSelector()', () => {
16
+ void it('returns true for attribute selectors', () => {
17
+ assert.equal(hasAttributeSelector('[data-test=value]'), true);
18
+ assert.equal(hasAttributeSelector('[type=submit]'), true);
19
+ assert.equal(hasAttributeSelector('input[name=email]'), true);
20
+ });
21
+ void it('returns false for simple selectors', () => {
22
+ assert.equal(hasAttributeSelector('#id'), false);
23
+ assert.equal(hasAttributeSelector('.class'), false);
24
+ assert.equal(hasAttributeSelector('button'), false);
25
+ assert.equal(hasAttributeSelector('div.class#id'), false);
26
+ });
27
+ void it('returns true for quoted attribute selectors', () => {
28
+ assert.equal(hasAttributeSelector('[data-test="value"]'), true);
29
+ assert.equal(hasAttributeSelector("[type='submit']"), true);
30
+ });
31
+ });
32
+ void describe('detectSelectorQuoteDamage()', () => {
33
+ void describe('detects damaged selectors', () => {
34
+ void it('detects unquoted attribute value', () => {
35
+ const result = detectSelectorQuoteDamage('[data-test=value]');
36
+ assert.equal(result.damaged, true);
37
+ assert.equal(result.type, 'attribute-selector');
38
+ assert.ok(result.details?.includes('data-test'));
39
+ assert.ok(result.details?.includes('value'));
40
+ assert.ok(result.suggestion?.includes('bdg dom query'));
41
+ });
42
+ void it('detects unquoted type attribute', () => {
43
+ const result = detectSelectorQuoteDamage('[type=submit]');
44
+ assert.equal(result.damaged, true);
45
+ assert.ok(result.details?.includes('type'));
46
+ assert.ok(result.details?.includes('submit'));
47
+ });
48
+ void it('detects nested selector with unquoted attribute', () => {
49
+ const result = detectSelectorQuoteDamage('form [name=email]');
50
+ assert.equal(result.damaged, true);
51
+ assert.ok(result.details?.includes('name'));
52
+ });
53
+ });
54
+ void describe('accepts valid selectors', () => {
55
+ void it('accepts properly quoted double quotes', () => {
56
+ const result = detectSelectorQuoteDamage('[data-test="value"]');
57
+ assert.equal(result.damaged, false);
58
+ });
59
+ void it('accepts properly quoted single quotes', () => {
60
+ const result = detectSelectorQuoteDamage("[data-test='value']");
61
+ assert.equal(result.damaged, false);
62
+ });
63
+ void it('accepts simple selectors without attributes', () => {
64
+ assert.equal(detectSelectorQuoteDamage('#id').damaged, false);
65
+ assert.equal(detectSelectorQuoteDamage('.class').damaged, false);
66
+ assert.equal(detectSelectorQuoteDamage('button').damaged, false);
67
+ assert.equal(detectSelectorQuoteDamage('div > p').damaged, false);
68
+ });
69
+ void it('accepts empty selector', () => {
70
+ const result = detectSelectorQuoteDamage('');
71
+ assert.equal(result.damaged, false);
72
+ });
73
+ });
74
+ void describe('suggestion quality', () => {
75
+ void it('provides two-step discovery path', () => {
76
+ const result = detectSelectorQuoteDamage('[data-test=value]');
77
+ assert.ok(result.suggestion?.includes('bdg dom query'));
78
+ assert.ok(result.suggestion?.includes('bdg dom a11y describe 0'));
79
+ });
80
+ void it('includes original selector in suggestion', () => {
81
+ const selector = '[custom-attr=myvalue]';
82
+ const result = detectSelectorQuoteDamage(selector);
83
+ assert.ok(result.suggestion?.includes(selector));
84
+ });
85
+ });
86
+ });
87
+ void describe('detectScriptQuoteDamage()', () => {
88
+ void describe('detects bare function arguments', () => {
89
+ void it('detects querySelector with bare argument', () => {
90
+ const result = detectScriptQuoteDamage('document.querySelector(input)');
91
+ assert.equal(result.damaged, true);
92
+ assert.equal(result.type, 'unquoted-argument');
93
+ assert.ok(result.details?.includes('querySelector'));
94
+ assert.ok(result.details?.includes('input'));
95
+ });
96
+ void it('detects getElementById with bare argument', () => {
97
+ const result = detectScriptQuoteDamage('document.getElementById(myId)');
98
+ assert.equal(result.damaged, true);
99
+ assert.ok(result.details?.includes('getElementById'));
100
+ assert.ok(result.details?.includes('myId'));
101
+ });
102
+ void it('detects closest with bare argument', () => {
103
+ const result = detectScriptQuoteDamage('element.closest(div)');
104
+ assert.equal(result.damaged, true);
105
+ assert.ok(result.details?.includes('closest'));
106
+ assert.ok(result.details?.includes('div'));
107
+ });
108
+ void it('detects getAttribute with bare argument', () => {
109
+ const result = detectScriptQuoteDamage('el.getAttribute(href)');
110
+ assert.equal(result.damaged, true);
111
+ assert.ok(result.details?.includes('getAttribute'));
112
+ assert.ok(result.details?.includes('href'));
113
+ });
114
+ void it('detects classList.add with bare argument', () => {
115
+ const result = detectScriptQuoteDamage('el.classList.add(active)');
116
+ assert.equal(result.damaged, true);
117
+ assert.ok(result.details?.includes('add'));
118
+ assert.ok(result.details?.includes('active'));
119
+ });
120
+ void it('detects matches with bare argument', () => {
121
+ const result = detectScriptQuoteDamage('element.matches(button)');
122
+ assert.equal(result.damaged, true);
123
+ assert.ok(result.details?.includes('matches'));
124
+ });
125
+ });
126
+ void describe('accepts valid scripts', () => {
127
+ void it('accepts properly quoted strings', () => {
128
+ assert.equal(detectScriptQuoteDamage('document.querySelector("input")').damaged, false);
129
+ assert.equal(detectScriptQuoteDamage("document.querySelector('input')").damaged, false);
130
+ assert.equal(detectScriptQuoteDamage('el.getAttribute("href")').damaged, false);
131
+ });
132
+ void it('accepts scripts without function calls', () => {
133
+ assert.equal(detectScriptQuoteDamage('document.title').damaged, false);
134
+ assert.equal(detectScriptQuoteDamage('window.location.href').damaged, false);
135
+ assert.equal(detectScriptQuoteDamage('1 + 2').damaged, false);
136
+ });
137
+ void it('accepts numeric arguments', () => {
138
+ assert.equal(detectScriptQuoteDamage('array.slice(0, 5)').damaged, false);
139
+ assert.equal(detectScriptQuoteDamage('Math.max(1, 2, 3)').damaged, false);
140
+ });
141
+ void it('accepts empty script', () => {
142
+ const result = detectScriptQuoteDamage('');
143
+ assert.equal(result.damaged, false);
144
+ });
145
+ });
146
+ void describe('suggestion quality', () => {
147
+ void it('provides corrected full expression', () => {
148
+ const result = detectScriptQuoteDamage('document.querySelector(input).value');
149
+ assert.ok(result.suggestion?.includes('document.querySelector("input").value'));
150
+ });
151
+ void it('preserves context around damaged part', () => {
152
+ const result = detectScriptQuoteDamage('element.closest(div).textContent');
153
+ assert.ok(result.suggestion?.includes('element.closest("div").textContent'));
154
+ });
155
+ void it('includes bdg dom eval command', () => {
156
+ const result = detectScriptQuoteDamage('func(arg)');
157
+ assert.ok(result.suggestion?.includes('bdg dom eval'));
158
+ });
159
+ });
160
+ void describe('unexpected identifier fallback', () => {
161
+ void it('detects unexpected identifier error pattern', () => {
162
+ const result = detectScriptQuoteDamage("Unexpected identifier 'foo'");
163
+ assert.equal(result.damaged, true);
164
+ assert.ok(result.suggestion?.includes('single quotes'));
165
+ });
166
+ });
167
+ });
168
+ void describe('Type safety and edge cases', () => {
169
+ void it('never throws for any string input', () => {
170
+ const edgeCases = [
171
+ '',
172
+ ' ',
173
+ '[]',
174
+ '()',
175
+ '[=]',
176
+ 'func()',
177
+ '[[nested]]',
178
+ 'a'.repeat(1000),
179
+ '🚀',
180
+ '\n\t',
181
+ 'null',
182
+ 'undefined',
183
+ ];
184
+ for (const input of edgeCases) {
185
+ assert.doesNotThrow(() => {
186
+ detectSelectorQuoteDamage(input);
187
+ detectScriptQuoteDamage(input);
188
+ hasAttributeSelector(input);
189
+ }, `Should not throw for input: ${JSON.stringify(input)}`);
190
+ }
191
+ });
192
+ void it('always returns valid ShellDamageResult structure', () => {
193
+ const inputs = ['[test=value]', '#simple', 'func(arg)', 'valid()'];
194
+ for (const input of inputs) {
195
+ const selectorResult = detectSelectorQuoteDamage(input);
196
+ const scriptResult = detectScriptQuoteDamage(input);
197
+ assert.equal(typeof selectorResult.damaged, 'boolean');
198
+ assert.equal(typeof scriptResult.damaged, 'boolean');
199
+ if (selectorResult.damaged) {
200
+ assert.equal(typeof selectorResult.details, 'string');
201
+ assert.equal(typeof selectorResult.suggestion, 'string');
202
+ }
203
+ if (scriptResult.damaged) {
204
+ assert.equal(typeof scriptResult.details, 'string');
205
+ assert.equal(typeof scriptResult.suggestion, 'string');
206
+ }
207
+ }
208
+ });
209
+ void it('handles special regex characters safely', () => {
210
+ const specialChars = ['[test.value]', '[test*=value]', '[test^=value]', 'func(a|b)'];
211
+ for (const input of specialChars) {
212
+ assert.doesNotThrow(() => {
213
+ detectSelectorQuoteDamage(input);
214
+ detectScriptQuoteDamage(input);
215
+ });
216
+ }
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=shellDetection.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellDetection.unit.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/shellDetection.unit.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decisionTrees.d.ts","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA2JvD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAElE"}
1
+ {"version":3,"file":"decisionTrees.d.ts","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAgKvD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAElE"}
@@ -11,6 +11,11 @@ export const DECISION_TREES = {
11
11
  dom_interaction: {
12
12
  intent: 'Interact with page elements and DOM',
13
13
  steps: [
14
+ {
15
+ question: 'Need to discover forms with semantic labels?',
16
+ yesCommand: 'dom form',
17
+ noAction: 'next',
18
+ },
14
19
  {
15
20
  question: 'Need to capture a screenshot?',
16
21
  yesCommand: 'dom screenshot',
@@ -1 +1 @@
1
- {"version":3,"file":"decisionTrees.js","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decisionTrees.js","sourceRoot":"","sources":["../../src/utils/decisionTrees.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,8 @@ export declare const EXIT_CODES: {
42
42
  readonly RESOURCE_BUSY: 85;
43
43
  readonly DAEMON_ALREADY_RUNNING: 86;
44
44
  readonly STALE_CACHE: 87;
45
+ readonly NO_FORMS_FOUND: 88;
46
+ readonly FORM_IN_IFRAME: 89;
45
47
  readonly CHROME_LAUNCH_FAILURE: 100;
46
48
  readonly CDP_CONNECTION_FAILURE: 101;
47
49
  readonly CDP_TIMEOUT: 102;
@@ -1 +1 @@
1
- {"version":3,"file":"exitCodes.d.ts","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;CAkBb,CAAC;AAEX;;GAEG;AACH,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,aAAa,EA8EtD,CAAC"}
1
+ {"version":3,"file":"exitCodes.d.ts","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;CAoBb,CAAC;AAEX;;GAEG;AACH,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,aAAa,EAwFtD,CAAC"}
@@ -42,6 +42,8 @@ export const EXIT_CODES = {
42
42
  RESOURCE_BUSY: 85,
43
43
  DAEMON_ALREADY_RUNNING: 86,
44
44
  STALE_CACHE: 87,
45
+ NO_FORMS_FOUND: 88,
46
+ FORM_IN_IFRAME: 89,
45
47
  CHROME_LAUNCH_FAILURE: 100,
46
48
  CDP_CONNECTION_FAILURE: 101,
47
49
  CDP_TIMEOUT: 102,
@@ -103,6 +105,16 @@ export const EXIT_CODE_REGISTRY = [
103
105
  name: 'STALE_CACHE',
104
106
  description: 'Cache invalidated by navigation or DOM changes',
105
107
  },
108
+ {
109
+ code: EXIT_CODES.NO_FORMS_FOUND,
110
+ name: 'NO_FORMS_FOUND',
111
+ description: 'No forms discovered on the page',
112
+ },
113
+ {
114
+ code: EXIT_CODES.FORM_IN_IFRAME,
115
+ name: 'FORM_IN_IFRAME',
116
+ description: 'Form is inside an iframe (cross-origin or same-origin)',
117
+ },
106
118
  {
107
119
  code: EXIT_CODES.CHROME_LAUNCH_FAILURE,
108
120
  name: 'CHROME_LAUNCH_FAILURE',
@@ -1 +1 @@
1
- {"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../../src/utils/exitCodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shell quote damage detection utilities.
3
+ *
4
+ * Detects when shell quote handling has corrupted selectors or scripts,
5
+ * providing actionable suggestions for recovery.
6
+ */
7
+ export interface ShellDamageResult {
8
+ damaged: boolean;
9
+ type?: 'attribute-selector' | 'unquoted-argument';
10
+ details?: string;
11
+ suggestion?: string;
12
+ }
13
+ /**
14
+ * Checks if a selector contains attribute syntax.
15
+ *
16
+ * @param selector - CSS selector to check
17
+ * @returns True if selector contains attribute syntax
18
+ */
19
+ export declare function hasAttributeSelector(selector: string): boolean;
20
+ /**
21
+ * Detects shell quote damage in CSS selectors.
22
+ *
23
+ * @param selector - The selector as received by the command
24
+ * @returns Detection result with details and suggestions
25
+ */
26
+ export declare function detectSelectorQuoteDamage(selector: string): ShellDamageResult;
27
+ /**
28
+ * Detects shell quote damage in JavaScript expressions.
29
+ *
30
+ * @param script - The script as received by the command
31
+ * @returns Detection result with details and suggestions
32
+ */
33
+ export declare function detectScriptQuoteDamage(script: string): ShellDamageResult;
34
+ //# sourceMappingURL=shellDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellDetection.d.ts","sourceRoot":"","sources":["../../src/utils/shellDetection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAOzE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Shell quote damage detection utilities.
3
+ *
4
+ * Detects when shell quote handling has corrupted selectors or scripts,
5
+ * providing actionable suggestions for recovery.
6
+ */
7
+ const ATTRIBUTE_SELECTOR_PATTERN = /\[[\w-]+=/.source;
8
+ const QUOTED_ATTRIBUTE_PATTERN = /\[[\w-]+=['"][^'"]*['"]\]/;
9
+ const UNQUOTED_ATTRIBUTE_PATTERN = /\[([\w-]+)=([\w-]+)\]/;
10
+ const BARE_ARGUMENT_PATTERN = /(\w+)\(\s*([a-zA-Z][\w-]*)\s*\)/;
11
+ const UNEXPECTED_IDENTIFIER_PATTERN = /Unexpected identifier ['"]?(\w+)['"]?/;
12
+ function noDamage() {
13
+ return { damaged: false };
14
+ }
15
+ function buildSelectorSuggestion(selector) {
16
+ return `Use the two-step pattern:\n 1. bdg dom query '${selector}'\n 2. bdg dom a11y describe 0`;
17
+ }
18
+ function checkUnquotedAttribute(selector) {
19
+ if (QUOTED_ATTRIBUTE_PATTERN.test(selector)) {
20
+ return noDamage();
21
+ }
22
+ const match = UNQUOTED_ATTRIBUTE_PATTERN.exec(selector);
23
+ if (!match) {
24
+ return noDamage();
25
+ }
26
+ const [, attr, value] = match;
27
+ return {
28
+ damaged: true,
29
+ type: 'attribute-selector',
30
+ details: `Received [${attr}=${value}] - quotes appear stripped`,
31
+ suggestion: buildSelectorSuggestion(selector),
32
+ };
33
+ }
34
+ function checkBareArgument(script) {
35
+ const match = BARE_ARGUMENT_PATTERN.exec(script);
36
+ if (!match) {
37
+ return noDamage();
38
+ }
39
+ const [matchedPart, funcName, bareArg] = match;
40
+ const fixedPart = `${funcName}("${bareArg}")`;
41
+ const fixedScript = script.replace(matchedPart, fixedPart);
42
+ return {
43
+ damaged: true,
44
+ type: 'unquoted-argument',
45
+ details: `${funcName}(${bareArg}) - quotes stripped by shell`,
46
+ suggestion: `Try: bdg dom eval '${fixedScript}'`,
47
+ };
48
+ }
49
+ function checkUnexpectedIdentifier(script) {
50
+ if (!UNEXPECTED_IDENTIFIER_PATTERN.test(script)) {
51
+ return noDamage();
52
+ }
53
+ return {
54
+ damaged: true,
55
+ type: 'unquoted-argument',
56
+ details: 'Unexpected identifier suggests quotes were stripped',
57
+ suggestion: "Use single quotes around the script: bdg dom eval '...'",
58
+ };
59
+ }
60
+ /**
61
+ * Checks if a selector contains attribute syntax.
62
+ *
63
+ * @param selector - CSS selector to check
64
+ * @returns True if selector contains attribute syntax
65
+ */
66
+ export function hasAttributeSelector(selector) {
67
+ return new RegExp(ATTRIBUTE_SELECTOR_PATTERN).test(selector);
68
+ }
69
+ /**
70
+ * Detects shell quote damage in CSS selectors.
71
+ *
72
+ * @param selector - The selector as received by the command
73
+ * @returns Detection result with details and suggestions
74
+ */
75
+ export function detectSelectorQuoteDamage(selector) {
76
+ if (!hasAttributeSelector(selector)) {
77
+ return noDamage();
78
+ }
79
+ return checkUnquotedAttribute(selector);
80
+ }
81
+ /**
82
+ * Detects shell quote damage in JavaScript expressions.
83
+ *
84
+ * @param script - The script as received by the command
85
+ * @returns Detection result with details and suggestions
86
+ */
87
+ export function detectScriptQuoteDamage(script) {
88
+ const bareArgResult = checkBareArgument(script);
89
+ if (bareArgResult.damaged) {
90
+ return bareArgResult;
91
+ }
92
+ return checkUnexpectedIdentifier(script);
93
+ }
94
+ //# sourceMappingURL=shellDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellDetection.js","sourceRoot":"","sources":["../../src/utils/shellDetection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"taskMappings.d.ts","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA6JrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAEhE"}
1
+ {"version":3,"file":"taskMappings.d.ts","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAmKrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAEhE"}
@@ -25,6 +25,11 @@ export const TASK_MAPPINGS = {
25
25
  description: 'Execute arbitrary JavaScript in page context',
26
26
  cdpAlternative: 'Runtime.evaluate',
27
27
  },
28
+ discover_forms: {
29
+ commands: ['dom form'],
30
+ description: 'Discover forms with semantic labels, state, and validation',
31
+ cdpAlternative: 'Runtime.evaluate with form/input queries + Accessibility.getPartialAXTree',
32
+ },
28
33
  fill_form_input: {
29
34
  commands: ['dom fill'],
30
35
  description: 'Fill form input field by selector',
@@ -1 +1 @@
1
- {"version":3,"file":"taskMappings.js","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taskMappings.js","sourceRoot":"","sources":["../../src/utils/taskMappings.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoCH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBhD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CA0FA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAUtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBhD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAmGA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAUtD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D"}
package/dist/utils/url.js CHANGED
@@ -1,6 +1,12 @@
1
1
  /**
2
2
  * URL normalization, validation, and parsing utilities.
3
3
  */
4
+ /**
5
+ * Dangerous URL protocols that must be explicitly blocked.
6
+ *
7
+ * These protocols can execute arbitrary code and are security risks.
8
+ */
9
+ const DANGEROUS_PROTOCOLS = ['vbscript:', 'jscript:'];
4
10
  /**
5
11
  * Valid URL protocols for Chrome navigation.
6
12
  *
@@ -146,6 +152,14 @@ export function validateUrl(url) {
146
152
  }
147
153
  try {
148
154
  const parsed = new URL(normalized);
155
+ // Explicitly block dangerous protocols (CodeQL js/incomplete-url-scheme-check)
156
+ if (DANGEROUS_PROTOCOLS.includes(parsed.protocol)) {
157
+ return {
158
+ valid: false,
159
+ error: `Blocked dangerous protocol: '${parsed.protocol}'`,
160
+ suggestion: 'This protocol is not allowed for security reasons',
161
+ };
162
+ }
149
163
  if (!VALID_PROTOCOLS.includes(parsed.protocol)) {
150
164
  return {
151
165
  valid: false,
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browser-debugger-cli",
3
- "version": "0.6.11",
3
+ "version": "0.7.1",
4
4
  "description": "DevTools telemetry in your terminal. For humans and agents. Direct WebSocket to Chrome's debugging port.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,15 +46,15 @@
46
46
  "dependencies": {
47
47
  "chrome-launcher": "^1.2.1",
48
48
  "commander": "^14.0.2",
49
- "devtools-protocol": "^0.0.1548823",
49
+ "devtools-protocol": "^0.0.1551306",
50
50
  "ws": "^8.18.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@eslint/js": "^9.39.0",
54
54
  "@types/node": "^24.10.1",
55
55
  "@types/ws": "^8.5.10",
56
- "@typescript-eslint/eslint-plugin": "^8.46.2",
57
- "@typescript-eslint/parser": "^8.46.2",
56
+ "@typescript-eslint/eslint-plugin": "^8.48.0",
57
+ "@typescript-eslint/parser": "^8.48.0",
58
58
  "c8": "^10.1.3",
59
59
  "concurrently": "^9.2.1",
60
60
  "eslint": "^9.39.0",
@@ -68,7 +68,7 @@
68
68
  "husky": "^9.1.7",
69
69
  "knip": "^5.67.1",
70
70
  "lint-staged": "^16.2.6",
71
- "prettier": "^3.6.2",
71
+ "prettier": "^3.7.3",
72
72
  "tsc-alias": "^1.8.9",
73
73
  "tsx": "^4.19.0",
74
74
  "typescript": "^5.6.0"