browser-debugger-cli 0.6.5 → 0.6.7

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 (223) hide show
  1. package/README.md +48 -269
  2. package/dist/commands/__tests__/helpJson.contract.test.d.ts +12 -0
  3. package/dist/commands/__tests__/helpJson.contract.test.d.ts.map +1 -0
  4. package/dist/commands/__tests__/helpJson.contract.test.js +121 -0
  5. package/dist/commands/__tests__/helpJson.contract.test.js.map +1 -0
  6. package/dist/commands/__tests__/machineReadableHelp.contract.test.js +26 -7
  7. package/dist/commands/__tests__/machineReadableHelp.contract.test.js.map +1 -1
  8. package/dist/commands/cdp.d.ts.map +1 -1
  9. package/dist/commands/cdp.js.map +1 -1
  10. package/dist/commands/cleanup.d.ts.map +1 -1
  11. package/dist/commands/cleanup.js +17 -91
  12. package/dist/commands/cleanup.js.map +1 -1
  13. package/dist/commands/console.d.ts.map +1 -1
  14. package/dist/commands/console.js.map +1 -1
  15. package/dist/commands/details.d.ts.map +1 -1
  16. package/dist/commands/details.js +3 -1
  17. package/dist/commands/details.js.map +1 -1
  18. package/dist/commands/dom/DomElementResolver.d.ts +138 -0
  19. package/dist/commands/dom/DomElementResolver.d.ts.map +1 -0
  20. package/dist/commands/dom/DomElementResolver.js +173 -0
  21. package/dist/commands/dom/DomElementResolver.js.map +1 -0
  22. package/dist/commands/dom/a11y.d.ts.map +1 -1
  23. package/dist/commands/dom/a11y.js +37 -33
  24. package/dist/commands/dom/a11y.js.map +1 -1
  25. package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
  26. package/dist/commands/dom/evalHelpers.js +1 -1
  27. package/dist/commands/dom/evalHelpers.js.map +1 -1
  28. package/dist/commands/dom/formFillHelpers.d.ts +68 -2
  29. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  30. package/dist/commands/dom/formFillHelpers.js +216 -70
  31. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  32. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  33. package/dist/commands/dom/formInteraction.js +128 -15
  34. package/dist/commands/dom/formInteraction.js.map +1 -1
  35. package/dist/commands/dom/helpers.d.ts +11 -2
  36. package/dist/commands/dom/helpers.d.ts.map +1 -1
  37. package/dist/commands/dom/helpers.js +50 -1
  38. package/dist/commands/dom/helpers.js.map +1 -1
  39. package/dist/commands/dom/index.d.ts.map +1 -1
  40. package/dist/commands/dom/index.js +105 -52
  41. package/dist/commands/dom/index.js.map +1 -1
  42. package/dist/commands/dom/keyMapping.d.ts +56 -0
  43. package/dist/commands/dom/keyMapping.d.ts.map +1 -0
  44. package/dist/commands/dom/keyMapping.js +110 -0
  45. package/dist/commands/dom/keyMapping.js.map +1 -0
  46. package/dist/commands/dom/reactEventHelpers.d.ts +19 -20
  47. package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
  48. package/dist/commands/dom/reactEventHelpers.js +73 -80
  49. package/dist/commands/dom/reactEventHelpers.js.map +1 -1
  50. package/dist/commands/helpJson.d.ts +165 -0
  51. package/dist/commands/helpJson.d.ts.map +1 -0
  52. package/dist/commands/helpJson.js +252 -0
  53. package/dist/commands/helpJson.js.map +1 -0
  54. package/dist/commands/machineReadableHelp.d.ts +21 -2
  55. package/dist/commands/machineReadableHelp.d.ts.map +1 -1
  56. package/dist/commands/machineReadableHelp.js +95 -60
  57. package/dist/commands/machineReadableHelp.js.map +1 -1
  58. package/dist/commands/network.d.ts.map +1 -1
  59. package/dist/commands/network.js.map +1 -1
  60. package/dist/commands/peek.d.ts.map +1 -1
  61. package/dist/commands/peek.js +20 -13
  62. package/dist/commands/peek.js.map +1 -1
  63. package/dist/commands/shared/CommandRunner.d.ts +4 -10
  64. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  65. package/dist/commands/shared/CommandRunner.js +2 -2
  66. package/dist/commands/shared/CommandRunner.js.map +1 -1
  67. package/dist/commands/shared/commonOptions.d.ts +0 -15
  68. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  69. package/dist/commands/shared/commonOptions.js +0 -32
  70. package/dist/commands/shared/commonOptions.js.map +1 -1
  71. package/dist/commands/shared/optionTypes.d.ts +237 -0
  72. package/dist/commands/shared/optionTypes.d.ts.map +1 -0
  73. package/dist/commands/shared/optionTypes.js +20 -0
  74. package/dist/commands/shared/optionTypes.js.map +1 -0
  75. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  76. package/dist/commands/shared/startHelpers.js +3 -3
  77. package/dist/commands/shared/startHelpers.js.map +1 -1
  78. package/dist/commands/start.d.ts.map +1 -1
  79. package/dist/commands/start.js +8 -6
  80. package/dist/commands/start.js.map +1 -1
  81. package/dist/commands/status.d.ts.map +1 -1
  82. package/dist/commands/status.js.map +1 -1
  83. package/dist/commands/stop.d.ts.map +1 -1
  84. package/dist/commands/stop.js +17 -43
  85. package/dist/commands/stop.js.map +1 -1
  86. package/dist/commands/tail.d.ts.map +1 -1
  87. package/dist/commands/tail.js +49 -59
  88. package/dist/commands/tail.js.map +1 -1
  89. package/dist/connection/types.d.ts +2 -1
  90. package/dist/connection/types.d.ts.map +1 -1
  91. package/dist/constants.d.ts +19 -1
  92. package/dist/constants.d.ts.map +1 -1
  93. package/dist/constants.js +45 -2
  94. package/dist/constants.js.map +1 -1
  95. package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
  96. package/dist/daemon/handlers/responseHandler.js +1 -0
  97. package/dist/daemon/handlers/responseHandler.js.map +1 -1
  98. package/dist/daemon/ipcServer.js +8 -8
  99. package/dist/daemon/ipcServer.js.map +1 -1
  100. package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
  101. package/dist/daemon/lifecycle/signalHandlers.js +19 -3
  102. package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
  103. package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
  104. package/dist/daemon/lifecycle/workerCleanup.js +5 -2
  105. package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
  106. package/dist/daemon/patternDefinitions.d.ts +0 -13
  107. package/dist/daemon/patternDefinitions.d.ts.map +1 -1
  108. package/dist/daemon/patternDefinitions.js +0 -17
  109. package/dist/daemon/patternDefinitions.js.map +1 -1
  110. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  111. package/dist/daemon/worker/commandRegistry.js +1 -0
  112. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  113. package/dist/index.js +34 -2
  114. package/dist/index.js.map +1 -1
  115. package/dist/ipc/__tests__/jsonl.unit.test.js +5 -5
  116. package/dist/ipc/__tests__/jsonl.unit.test.js.map +1 -1
  117. package/dist/ipc/protocol/commands.d.ts +2 -0
  118. package/dist/ipc/protocol/commands.d.ts.map +1 -1
  119. package/dist/ipc/protocol/commands.js.map +1 -1
  120. package/dist/ipc/session/queries.d.ts +2 -0
  121. package/dist/ipc/session/queries.d.ts.map +1 -1
  122. package/dist/ipc/utils/responseValidator.d.ts +7 -1
  123. package/dist/ipc/utils/responseValidator.d.ts.map +1 -1
  124. package/dist/ipc/utils/responseValidator.js +6 -1
  125. package/dist/ipc/utils/responseValidator.js.map +1 -1
  126. package/dist/session/QueryCacheManager.d.ts +140 -0
  127. package/dist/session/QueryCacheManager.d.ts.map +1 -0
  128. package/dist/session/QueryCacheManager.js +233 -0
  129. package/dist/session/QueryCacheManager.js.map +1 -0
  130. package/dist/session/cleanup.d.ts +63 -1
  131. package/dist/session/cleanup.d.ts.map +1 -1
  132. package/dist/session/cleanup.js +191 -65
  133. package/dist/session/cleanup.js.map +1 -1
  134. package/dist/session/queryCache.d.ts +25 -14
  135. package/dist/session/queryCache.d.ts.map +1 -1
  136. package/dist/session/queryCache.js +31 -60
  137. package/dist/session/queryCache.js.map +1 -1
  138. package/dist/telemetry/__tests__/roleInference.unit.test.d.ts +9 -0
  139. package/dist/telemetry/__tests__/roleInference.unit.test.d.ts.map +1 -0
  140. package/dist/telemetry/__tests__/roleInference.unit.test.js +138 -0
  141. package/dist/telemetry/__tests__/roleInference.unit.test.js.map +1 -0
  142. package/dist/telemetry/dom.d.ts +1 -0
  143. package/dist/telemetry/dom.d.ts.map +1 -1
  144. package/dist/telemetry/dom.js +9 -4
  145. package/dist/telemetry/dom.js.map +1 -1
  146. package/dist/telemetry/filters.d.ts +3 -0
  147. package/dist/telemetry/filters.d.ts.map +1 -1
  148. package/dist/telemetry/filters.js +25 -3
  149. package/dist/telemetry/filters.js.map +1 -1
  150. package/dist/telemetry/network.d.ts.map +1 -1
  151. package/dist/telemetry/network.js +35 -6
  152. package/dist/telemetry/network.js.map +1 -1
  153. package/dist/telemetry/roleInference.d.ts +50 -0
  154. package/dist/telemetry/roleInference.d.ts.map +1 -0
  155. package/dist/telemetry/roleInference.js +163 -0
  156. package/dist/telemetry/roleInference.js.map +1 -0
  157. package/dist/telemetry/utils.d.ts +0 -57
  158. package/dist/telemetry/utils.d.ts.map +1 -1
  159. package/dist/telemetry/utils.js +0 -71
  160. package/dist/telemetry/utils.js.map +1 -1
  161. package/dist/types/dom.d.ts +11 -0
  162. package/dist/types/dom.d.ts.map +1 -1
  163. package/dist/types.d.ts +2 -0
  164. package/dist/types.d.ts.map +1 -1
  165. package/dist/ui/formatters/a11y.d.ts +13 -3
  166. package/dist/ui/formatters/a11y.d.ts.map +1 -1
  167. package/dist/ui/formatters/a11y.js +18 -3
  168. package/dist/ui/formatters/a11y.js.map +1 -1
  169. package/dist/ui/formatters/preview.d.ts +4 -0
  170. package/dist/ui/formatters/preview.d.ts.map +1 -1
  171. package/dist/ui/formatters/preview.js +26 -43
  172. package/dist/ui/formatters/preview.js.map +1 -1
  173. package/dist/ui/formatters/sessionFormatters.d.ts.map +1 -1
  174. package/dist/ui/formatters/sessionFormatters.js +2 -0
  175. package/dist/ui/formatters/sessionFormatters.js.map +1 -1
  176. package/dist/ui/logging/index.d.ts +1 -1
  177. package/dist/ui/logging/index.d.ts.map +1 -1
  178. package/dist/ui/logging/index.js +1 -1
  179. package/dist/ui/logging/index.js.map +1 -1
  180. package/dist/ui/logging/logger.d.ts +21 -0
  181. package/dist/ui/logging/logger.d.ts.map +1 -1
  182. package/dist/ui/logging/logger.js +24 -6
  183. package/dist/ui/logging/logger.js.map +1 -1
  184. package/dist/ui/messages/commands.d.ts +0 -14
  185. package/dist/ui/messages/commands.d.ts.map +1 -1
  186. package/dist/ui/messages/commands.js +0 -18
  187. package/dist/ui/messages/commands.js.map +1 -1
  188. package/dist/ui/messages/errors.d.ts +0 -16
  189. package/dist/ui/messages/errors.d.ts.map +1 -1
  190. package/dist/ui/messages/errors.js +0 -18
  191. package/dist/ui/messages/errors.js.map +1 -1
  192. package/dist/ui/messages/hints.d.ts +0 -10
  193. package/dist/ui/messages/hints.d.ts.map +1 -1
  194. package/dist/ui/messages/hints.js +0 -12
  195. package/dist/ui/messages/hints.js.map +1 -1
  196. package/dist/utils/decisionTrees.d.ts +0 -17
  197. package/dist/utils/decisionTrees.d.ts.map +1 -1
  198. package/dist/utils/decisionTrees.js +5 -21
  199. package/dist/utils/decisionTrees.js.map +1 -1
  200. package/dist/utils/errorMapping.d.ts +60 -0
  201. package/dist/utils/errorMapping.d.ts.map +1 -0
  202. package/dist/utils/errorMapping.js +97 -0
  203. package/dist/utils/errorMapping.js.map +1 -0
  204. package/dist/utils/file.d.ts +27 -0
  205. package/dist/utils/file.d.ts.map +1 -0
  206. package/dist/utils/file.js +37 -0
  207. package/dist/utils/file.js.map +1 -0
  208. package/dist/utils/levenshtein.d.ts +0 -17
  209. package/dist/utils/levenshtein.d.ts.map +1 -1
  210. package/dist/utils/levenshtein.js +0 -31
  211. package/dist/utils/levenshtein.js.map +1 -1
  212. package/dist/utils/taskMappings.d.ts +0 -17
  213. package/dist/utils/taskMappings.d.ts.map +1 -1
  214. package/dist/utils/taskMappings.js +5 -21
  215. package/dist/utils/taskMappings.js.map +1 -1
  216. package/dist/utils/typeGuards.d.ts +62 -0
  217. package/dist/utils/typeGuards.d.ts.map +1 -0
  218. package/dist/utils/typeGuards.js +94 -0
  219. package/dist/utils/typeGuards.js.map +1 -0
  220. package/dist/utils/url.d.ts.map +1 -1
  221. package/dist/utils/url.js +15 -2
  222. package/dist/utils/url.js.map +1 -1
  223. package/package.json +1 -1
@@ -18,9 +18,9 @@
18
18
  */
19
19
  export const REACT_FILL_SCRIPT = `
20
20
  (function(selector, value, options) {
21
- const el = document.querySelector(selector);
21
+ const allMatches = document.querySelectorAll(selector);
22
22
 
23
- if (!el) {
23
+ if (allMatches.length === 0) {
24
24
  return {
25
25
  success: false,
26
26
  error: 'Element not found',
@@ -28,6 +28,26 @@ export const REACT_FILL_SCRIPT = `
28
28
  };
29
29
  }
30
30
 
31
+ let el;
32
+ const index = options.index;
33
+
34
+ // If index is provided, use it directly (1-based)
35
+ if (typeof index === 'number' && index > 0) {
36
+ if (index > allMatches.length) {
37
+ return {
38
+ success: false,
39
+ error: 'Index out of range',
40
+ selector: selector,
41
+ matchCount: allMatches.length,
42
+ requestedIndex: index,
43
+ suggestion: 'Use --index between 1 and ' + allMatches.length
44
+ };
45
+ }
46
+ el = allMatches[index - 1];
47
+ } else {
48
+ el = allMatches[0];
49
+ }
50
+
31
51
  const tagName = el.tagName.toLowerCase();
32
52
  const inputType = el.type?.toLowerCase();
33
53
 
@@ -109,14 +129,15 @@ export const REACT_FILL_SCRIPT = `
109
129
  * JavaScript function to click an element.
110
130
  *
111
131
  * @remarks
112
- * Simple click implementation that works with buttons, links, and custom components.
113
- * When selector matches multiple elements, prioritizes visible ones.
132
+ * Handles both direct selector matching and indexed selection.
133
+ * When index is provided, selects the nth matching element (1-based).
134
+ * When selector matches multiple elements without index, prioritizes visible ones.
114
135
  */
115
136
  export const CLICK_ELEMENT_SCRIPT = `
116
- (function(selector) {
117
- let el = document.querySelector(selector);
137
+ (function(selector, index) {
138
+ const allMatches = document.querySelectorAll(selector);
118
139
 
119
- if (!el) {
140
+ if (allMatches.length === 0) {
120
141
  return {
121
142
  success: false,
122
143
  error: 'Element not found',
@@ -124,8 +145,27 @@ export const CLICK_ELEMENT_SCRIPT = `
124
145
  };
125
146
  }
126
147
 
127
- const allMatches = document.querySelectorAll(selector);
128
- if (allMatches.length > 1) {
148
+ let el;
149
+
150
+ // If index is provided, use it directly (1-based)
151
+ if (typeof index === 'number' && index > 0) {
152
+ if (index > allMatches.length) {
153
+ return {
154
+ success: false,
155
+ error: 'Index out of range',
156
+ selector: selector,
157
+ matchCount: allMatches.length,
158
+ requestedIndex: index,
159
+ suggestion: 'Use --index between 1 and ' + allMatches.length
160
+ };
161
+ }
162
+ el = allMatches[index - 1];
163
+ } else if (allMatches.length === 1) {
164
+ // Single match - use it directly
165
+ el = allMatches[0];
166
+ } else {
167
+ // Multiple matches without index - find first visible one
168
+ el = allMatches[0];
129
169
  for (const candidate of allMatches) {
130
170
  const style = window.getComputedStyle(candidate);
131
171
  const rect = candidate.getBoundingClientRect();
@@ -166,81 +206,34 @@ export const CLICK_ELEMENT_SCRIPT = `
166
206
  success: true,
167
207
  selector: selector,
168
208
  elementType: tagName,
169
- clickable: isClickable
209
+ clickable: isClickable,
210
+ matchCount: allMatches.length,
211
+ selectedIndex: typeof index === 'number' ? index : undefined
170
212
  };
171
213
  })
172
214
  `;
173
215
  /**
174
- * JavaScript function to get multiple elements by selector.
216
+ * Type guard for FillResult.
175
217
  *
176
- * @remarks
177
- * Used when --index is specified to select from multiple matches.
218
+ * @param value - Value to check
219
+ * @returns True if value is a valid FillResult
178
220
  */
179
- export const GET_ELEMENT_BY_INDEX_SCRIPT = `
180
- (function(selector, index) {
181
- const elements = document.querySelectorAll(selector);
182
-
183
- if (elements.length === 0) {
184
- return {
185
- success: false,
186
- error: 'No elements found',
187
- selector: selector,
188
- matchCount: 0
189
- };
190
- }
191
-
192
- if (index < 1 || index > elements.length) {
193
- return {
194
- success: false,
195
- error: 'Index out of range',
196
- selector: selector,
197
- matchCount: elements.length,
198
- requestedIndex: index,
199
- suggestion: \`Use --index between 1 and \${elements.length}\`
200
- };
201
- }
202
-
203
- const el = elements[index - 1]; // Convert to 0-based
204
-
205
- function buildUniquePath(element) {
206
- if (element.id) {
207
- return \`#\${CSS.escape(element.id)}\`;
208
- }
209
-
210
- const path = [];
211
- let current = element;
212
-
213
- while (current && current !== document.documentElement) {
214
- let selector = current.tagName.toLowerCase();
215
-
216
- if (current.parentElement) {
217
- const siblings = Array.from(current.parentElement.children);
218
- const sameTagSiblings = siblings.filter(
219
- (sibling) => sibling.tagName === current!.tagName
220
- );
221
-
222
- if (sameTagSiblings.length > 1) {
223
- const index = sameTagSiblings.indexOf(current) + 1;
224
- selector += \`:nth-of-type(\${index})\`;
225
- }
226
- }
227
-
228
- path.unshift(selector);
229
- current = current.parentElement;
230
- }
231
-
232
- return 'html > ' + path.join(' > ');
233
- }
234
-
235
- const uniqueSelector = buildUniquePath(el);
236
-
237
- return {
238
- success: true,
239
- selector: selector,
240
- matchCount: elements.length,
241
- selectedIndex: index,
242
- uniqueSelector: uniqueSelector
243
- };
244
- })
245
- `;
221
+ export function isFillResult(value) {
222
+ if (typeof value !== 'object' || value === null)
223
+ return false;
224
+ const obj = value;
225
+ return typeof obj['success'] === 'boolean';
226
+ }
227
+ /**
228
+ * Type guard for ClickResult.
229
+ *
230
+ * @param value - Value to check
231
+ * @returns True if value is a valid ClickResult
232
+ */
233
+ export function isClickResult(value) {
234
+ if (typeof value !== 'object' || value === null)
235
+ return false;
236
+ const obj = value;
237
+ return typeof obj['success'] === 'boolean';
238
+ }
246
239
  //# sourceMappingURL=reactEventHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactEventHelpers.js","sourceRoot":"","sources":["../../../src/commands/dom/reactEventHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFhC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE1C,CAAC"}
1
+ {"version":3,"file":"reactEventHelpers.js","sourceRoot":"","sources":["../../../src/commands/dom/reactEventHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4GhC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EnC,CAAC;AAyCF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Machine-readable help generation using Commander.js introspection API.
3
+ */
4
+ import type { Command } from 'commander';
5
+ import { type DecisionTree } from '../utils/decisionTrees.js';
6
+ import { type TaskMapping } from '../utils/taskMappings.js';
7
+ /**
8
+ * Option metadata for machine-readable help.
9
+ */
10
+ export interface OptionMetadata {
11
+ /** Option flags (e.g., "-j, --json") */
12
+ flags: string;
13
+ /** Option description */
14
+ description: string;
15
+ /** Whether option is required */
16
+ required: boolean;
17
+ /** Whether option has an optional value */
18
+ optional: boolean;
19
+ /** Default value if any */
20
+ defaultValue?: unknown;
21
+ /** Description of default value */
22
+ defaultValueDescription?: string;
23
+ /** Allowed choices if restricted */
24
+ choices?: readonly string[];
25
+ }
26
+ /**
27
+ * Argument metadata for machine-readable help.
28
+ */
29
+ export interface ArgumentMetadata {
30
+ /** Argument name */
31
+ name: string;
32
+ /** Argument description */
33
+ description: string;
34
+ /** Whether argument is required */
35
+ required: boolean;
36
+ /** Whether argument accepts multiple values */
37
+ variadic: boolean;
38
+ /** Default value if any */
39
+ defaultValue?: unknown;
40
+ /** Allowed choices if restricted */
41
+ choices?: readonly string[];
42
+ }
43
+ /**
44
+ * Command metadata for machine-readable help.
45
+ */
46
+ export interface CommandMetadata {
47
+ /** Command name */
48
+ name: string;
49
+ /** Command aliases */
50
+ aliases: readonly string[];
51
+ /** Command description */
52
+ description: string;
53
+ /** Command usage string */
54
+ usage: string;
55
+ /** Command arguments */
56
+ arguments: ArgumentMetadata[];
57
+ /** Command options */
58
+ options: OptionMetadata[];
59
+ /** Subcommands */
60
+ subcommands: CommandMetadata[];
61
+ }
62
+ /**
63
+ * Runtime state information for dynamic command availability.
64
+ */
65
+ export interface RuntimeState {
66
+ /** Whether a session is currently active */
67
+ sessionActive: boolean;
68
+ /** Whether the daemon is running */
69
+ daemonRunning: boolean;
70
+ /** Commands available in current state */
71
+ availableCommands: string[];
72
+ }
73
+ /**
74
+ * Tool capabilities summary for agent discovery.
75
+ */
76
+ export interface Capabilities {
77
+ /** CDP protocol capabilities */
78
+ cdp: {
79
+ /** Number of CDP domains */
80
+ domains: number;
81
+ /** Number of CDP methods (approximate) */
82
+ methods: string;
83
+ };
84
+ /** High-level command capabilities */
85
+ highLevel: {
86
+ /** List of high-level commands available */
87
+ commands: string[];
88
+ /** Domain coverage areas */
89
+ coverage: string[];
90
+ };
91
+ }
92
+ /**
93
+ * Root machine-readable help structure.
94
+ */
95
+ export interface MachineReadableHelp {
96
+ /** CLI name */
97
+ name: string;
98
+ /** CLI version */
99
+ version: string;
100
+ /** CLI description */
101
+ description: string;
102
+ /** Root command metadata */
103
+ command: CommandMetadata;
104
+ /** Exit code documentation */
105
+ exitCodes: {
106
+ /** Exit code value */
107
+ code: number;
108
+ /** Exit code name */
109
+ name: string;
110
+ /** Exit code description */
111
+ description: string;
112
+ }[];
113
+ /** Task-to-command mappings with CDP alternatives */
114
+ taskMappings: Record<string, TaskMapping>;
115
+ /** Current runtime state */
116
+ runtimeState: RuntimeState;
117
+ /** Intent-based decision trees */
118
+ decisionTrees: Record<string, DecisionTree>;
119
+ /** Tool capabilities summary */
120
+ capabilities: Capabilities;
121
+ }
122
+ /**
123
+ * Generates machine-readable help from a Commander program.
124
+ *
125
+ * Includes comprehensive metadata for agent discovery:
126
+ * - Command structure and options
127
+ * - Exit codes with semantic meanings
128
+ * - Task-to-command mappings with CDP alternatives
129
+ * - Runtime state and command availability
130
+ * - Intent-based decision trees
131
+ * - Capabilities summary
132
+ *
133
+ * @param program - Commander program instance
134
+ * @returns Machine-readable help structure
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * import { program } from 'commander';
139
+ * import { generateMachineReadableHelp } from './help/machineReadableHelp.js';
140
+ *
141
+ * const help = generateMachineReadableHelp(program);
142
+ * console.log(JSON.stringify(help, null, 2));
143
+ * ```
144
+ */
145
+ export declare function generateMachineReadableHelp(program: Command): MachineReadableHelp;
146
+ /**
147
+ * Generates machine-readable help for a specific subcommand.
148
+ *
149
+ * Returns the same structure as generateMachineReadableHelp but with
150
+ * the command field focused on the requested subcommand. If the subcommand
151
+ * is not found, falls back to full root help.
152
+ *
153
+ * @param program - Root Commander program instance
154
+ * @param commandPath - Array of command names (e.g., ['dom', 'query'])
155
+ * @returns Machine-readable help structure for the subcommand
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * // Get help for 'bdg dom query'
160
+ * const help = generateSubcommandHelp(program, ['dom', 'query']);
161
+ * console.log(help.command.name); // 'query'
162
+ * ```
163
+ */
164
+ export declare function generateSubcommandHelp(program: Command, commandPath: string[]): MachineReadableHelp;
165
+ //# sourceMappingURL=helpJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpJson.d.ts","sourceRoot":"","sources":["../../src/commands/helpJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Machine-readable help generation using Commander.js introspection API.
3
+ */
4
+ import { getAllDomainSummaries } from '../cdp/schema.js';
5
+ import { isDaemonRunning } from '../daemon/launcher.js';
6
+ import { readPid } from '../session/pid.js';
7
+ import { getAllDecisionTrees } from '../utils/decisionTrees.js';
8
+ import { filterDefined } from '../utils/objects.js';
9
+ import { isProcessAlive } from '../utils/process.js';
10
+ import { getAllTaskMappings } from '../utils/taskMappings.js';
11
+ /**
12
+ * Converts a Commander Option to OptionMetadata.
13
+ *
14
+ * @param option - Commander option instance
15
+ * @returns Option metadata
16
+ */
17
+ function convertOption(option) {
18
+ return filterDefined({
19
+ flags: option.flags,
20
+ description: option.description,
21
+ required: option.required,
22
+ optional: option.optional,
23
+ defaultValue: option.defaultValue,
24
+ defaultValueDescription: option.defaultValueDescription,
25
+ choices: option.argChoices,
26
+ });
27
+ }
28
+ /**
29
+ * Converts a Commander Argument to ArgumentMetadata.
30
+ *
31
+ * @param argument - Commander argument instance
32
+ * @returns Argument metadata
33
+ */
34
+ function convertArgument(argument) {
35
+ return filterDefined({
36
+ name: argument.name(),
37
+ description: argument.description,
38
+ required: argument.required,
39
+ variadic: argument.variadic,
40
+ defaultValue: argument.defaultValue,
41
+ choices: argument.argChoices,
42
+ });
43
+ }
44
+ /**
45
+ * Recursively converts a Commander Command to CommandMetadata.
46
+ *
47
+ * @param command - Commander command instance
48
+ * @returns Command metadata
49
+ */
50
+ function convertCommand(command) {
51
+ return {
52
+ name: command.name(),
53
+ aliases: command.aliases(),
54
+ description: command.description(),
55
+ usage: command.usage(),
56
+ arguments: command.registeredArguments.map(convertArgument),
57
+ options: command.options.map(convertOption),
58
+ subcommands: command.commands.map(convertCommand),
59
+ };
60
+ }
61
+ /**
62
+ * Checks if a session is currently active.
63
+ *
64
+ * @returns True if session is active, false otherwise
65
+ */
66
+ function isSessionActive() {
67
+ const sessionPid = readPid();
68
+ if (sessionPid === null) {
69
+ return false;
70
+ }
71
+ return isProcessAlive(sessionPid);
72
+ }
73
+ /**
74
+ * Generates runtime state information.
75
+ *
76
+ * Checks current daemon and session status to provide state-aware
77
+ * command availability information.
78
+ *
79
+ * @returns Runtime state object
80
+ */
81
+ function generateRuntimeState() {
82
+ const daemonRunning = isDaemonRunning();
83
+ const sessionActive = isSessionActive();
84
+ const availableCommands = [];
85
+ if (!daemonRunning && !sessionActive) {
86
+ availableCommands.push('bdg <url>', 'cleanup', '--help', '--version');
87
+ }
88
+ else if (daemonRunning && sessionActive) {
89
+ availableCommands.push('peek', 'tail', 'details', 'dom', 'network', 'console', 'cdp', 'status', 'stop');
90
+ }
91
+ else if (daemonRunning && !sessionActive) {
92
+ availableCommands.push('bdg <url>', 'cleanup', 'status');
93
+ }
94
+ return {
95
+ sessionActive,
96
+ daemonRunning,
97
+ availableCommands,
98
+ };
99
+ }
100
+ /**
101
+ * Extracts unique command strings from task mappings.
102
+ *
103
+ * Flattens all command arrays from task mappings and deduplicates them.
104
+ *
105
+ * @param taskMappings - Task mapping registry
106
+ * @returns Sorted array of unique command strings
107
+ */
108
+ function extractCommandList(taskMappings) {
109
+ const allCommands = Object.values(taskMappings).flatMap((mapping) => mapping.commands);
110
+ const uniqueCommands = [...new Set(allCommands)];
111
+ return uniqueCommands.sort();
112
+ }
113
+ /**
114
+ * Exit code documentation for machine-readable help.
115
+ */
116
+ const EXIT_CODE_DOCS = [
117
+ { code: 0, name: 'SUCCESS', description: 'Operation completed successfully' },
118
+ { code: 1, name: 'GENERIC_FAILURE', description: 'Generic failure' },
119
+ { code: 80, name: 'INVALID_URL', description: 'Invalid URL format provided' },
120
+ { code: 81, name: 'INVALID_ARGUMENTS', description: 'Invalid command arguments' },
121
+ { code: 82, name: 'PERMISSION_DENIED', description: 'Insufficient permissions' },
122
+ { code: 83, name: 'RESOURCE_NOT_FOUND', description: 'Required resource not found' },
123
+ { code: 84, name: 'RESOURCE_BUSY', description: 'Resource is currently in use' },
124
+ {
125
+ code: 85,
126
+ name: 'OPERATION_NOT_PERMITTED',
127
+ description: 'Operation not permitted in current state',
128
+ },
129
+ { code: 86, name: 'DAEMON_ALREADY_RUNNING', description: 'Daemon is already running' },
130
+ { code: 100, name: 'CHROME_LAUNCH_FAILURE', description: 'Failed to launch Chrome browser' },
131
+ {
132
+ code: 101,
133
+ name: 'CDP_CONNECTION_FAILURE',
134
+ description: 'Failed to connect to Chrome DevTools Protocol',
135
+ },
136
+ { code: 102, name: 'CDP_TIMEOUT', description: 'CDP operation timed out' },
137
+ { code: 110, name: 'IPC_ERROR', description: 'Inter-process communication error' },
138
+ ];
139
+ /**
140
+ * Generates capabilities summary.
141
+ *
142
+ * Dynamically calculates CDP and high-level command capabilities
143
+ * from protocol schema and task mappings.
144
+ *
145
+ * @returns Capabilities object
146
+ */
147
+ function generateCapabilities() {
148
+ const domainSummaries = getAllDomainSummaries();
149
+ const taskMappings = getAllTaskMappings();
150
+ const totalMethods = domainSummaries.reduce((sum, domain) => sum + domain.commandCount, 0);
151
+ const commandList = extractCommandList(taskMappings);
152
+ return {
153
+ cdp: {
154
+ domains: domainSummaries.length,
155
+ methods: totalMethods.toString(),
156
+ },
157
+ highLevel: {
158
+ commands: commandList,
159
+ coverage: ['dom', 'network', 'console', 'session', 'monitoring'],
160
+ },
161
+ };
162
+ }
163
+ /**
164
+ * Generates machine-readable help from a Commander program.
165
+ *
166
+ * Includes comprehensive metadata for agent discovery:
167
+ * - Command structure and options
168
+ * - Exit codes with semantic meanings
169
+ * - Task-to-command mappings with CDP alternatives
170
+ * - Runtime state and command availability
171
+ * - Intent-based decision trees
172
+ * - Capabilities summary
173
+ *
174
+ * @param program - Commander program instance
175
+ * @returns Machine-readable help structure
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * import { program } from 'commander';
180
+ * import { generateMachineReadableHelp } from './help/machineReadableHelp.js';
181
+ *
182
+ * const help = generateMachineReadableHelp(program);
183
+ * console.log(JSON.stringify(help, null, 2));
184
+ * ```
185
+ */
186
+ export function generateMachineReadableHelp(program) {
187
+ return {
188
+ name: program.name(),
189
+ version: program.version() ?? 'unknown',
190
+ description: program.description(),
191
+ command: convertCommand(program),
192
+ exitCodes: [...EXIT_CODE_DOCS],
193
+ taskMappings: getAllTaskMappings(),
194
+ runtimeState: generateRuntimeState(),
195
+ decisionTrees: getAllDecisionTrees(),
196
+ capabilities: generateCapabilities(),
197
+ };
198
+ }
199
+ /**
200
+ * Finds a subcommand by traversing the command path.
201
+ *
202
+ * @param program - Root Commander program instance
203
+ * @param commandPath - Array of command names to traverse (e.g., ['dom', 'query'])
204
+ * @returns The target Command if found, null otherwise
205
+ */
206
+ function findSubcommand(program, commandPath) {
207
+ let current = program;
208
+ for (const name of commandPath) {
209
+ const found = current.commands.find((cmd) => cmd.name() === name || cmd.aliases().includes(name));
210
+ if (!found) {
211
+ return null;
212
+ }
213
+ current = found;
214
+ }
215
+ return current;
216
+ }
217
+ /**
218
+ * Generates machine-readable help for a specific subcommand.
219
+ *
220
+ * Returns the same structure as generateMachineReadableHelp but with
221
+ * the command field focused on the requested subcommand. If the subcommand
222
+ * is not found, falls back to full root help.
223
+ *
224
+ * @param program - Root Commander program instance
225
+ * @param commandPath - Array of command names (e.g., ['dom', 'query'])
226
+ * @returns Machine-readable help structure for the subcommand
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * // Get help for 'bdg dom query'
231
+ * const help = generateSubcommandHelp(program, ['dom', 'query']);
232
+ * console.log(help.command.name); // 'query'
233
+ * ```
234
+ */
235
+ export function generateSubcommandHelp(program, commandPath) {
236
+ const targetCommand = findSubcommand(program, commandPath);
237
+ if (!targetCommand) {
238
+ return generateMachineReadableHelp(program);
239
+ }
240
+ return {
241
+ name: program.name(),
242
+ version: program.version() ?? 'unknown',
243
+ description: program.description(),
244
+ command: convertCommand(targetCommand),
245
+ exitCodes: [...EXIT_CODE_DOCS],
246
+ taskMappings: getAllTaskMappings(),
247
+ runtimeState: generateRuntimeState(),
248
+ decisionTrees: getAllDecisionTrees(),
249
+ capabilities: generateCapabilities(),
250
+ };
251
+ }
252
+ //# sourceMappingURL=helpJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpJson.js","sourceRoot":"","sources":["../../src/commands/helpJson.ts"],"names":[],"mappings":"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"}
@@ -83,8 +83,8 @@ export interface Capabilities {
83
83
  };
84
84
  /** High-level command capabilities */
85
85
  highLevel: {
86
- /** Number of high-level commands */
87
- commands: number;
86
+ /** List of high-level commands available */
87
+ commands: string[];
88
88
  /** Domain coverage areas */
89
89
  coverage: string[];
90
90
  };
@@ -143,4 +143,23 @@ export interface MachineReadableHelp {
143
143
  * ```
144
144
  */
145
145
  export declare function generateMachineReadableHelp(program: Command): MachineReadableHelp;
146
+ /**
147
+ * Generates machine-readable help for a specific subcommand.
148
+ *
149
+ * Returns the same structure as generateMachineReadableHelp but with
150
+ * the command field focused on the requested subcommand. If the subcommand
151
+ * is not found, falls back to full root help.
152
+ *
153
+ * @param program - Root Commander program instance
154
+ * @param commandPath - Array of command names (e.g., ['dom', 'query'])
155
+ * @returns Machine-readable help structure for the subcommand
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * // Get help for 'bdg dom query'
160
+ * const help = generateSubcommandHelp(program, ['dom', 'query']);
161
+ * console.log(help.command.name); // 'query'
162
+ * ```
163
+ */
164
+ export declare function generateSubcommandHelp(program: Command, commandPath: string[]): MachineReadableHelp;
146
165
  //# sourceMappingURL=machineReadableHelp.d.ts.map