browser-debugger-cli 0.6.8 → 0.6.10

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/dist/__tests__/telemetry/filterDsl.unit.test.d.ts +12 -0
  2. package/dist/__tests__/telemetry/filterDsl.unit.test.d.ts.map +1 -0
  3. package/dist/__tests__/telemetry/filterDsl.unit.test.js +374 -0
  4. package/dist/__tests__/telemetry/filterDsl.unit.test.js.map +1 -0
  5. package/dist/__tests__/telemetry/filterPresets.unit.test.d.ts +10 -0
  6. package/dist/__tests__/telemetry/filterPresets.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/telemetry/filterPresets.unit.test.js +89 -0
  8. package/dist/__tests__/telemetry/filterPresets.unit.test.js.map +1 -0
  9. package/dist/commands/cleanup.js +1 -1
  10. package/dist/commands/cleanup.js.map +1 -1
  11. package/dist/commands/console.d.ts +9 -0
  12. package/dist/commands/console.d.ts.map +1 -1
  13. package/dist/commands/console.js +60 -28
  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 +20 -9
  17. package/dist/commands/details.js.map +1 -1
  18. package/dist/commands/dom/DomElementResolver.d.ts +23 -7
  19. package/dist/commands/dom/DomElementResolver.d.ts.map +1 -1
  20. package/dist/commands/dom/DomElementResolver.js +64 -16
  21. package/dist/commands/dom/DomElementResolver.js.map +1 -1
  22. package/dist/commands/dom/a11y.d.ts.map +1 -1
  23. package/dist/commands/dom/a11y.js +30 -18
  24. package/dist/commands/dom/a11y.js.map +1 -1
  25. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  26. package/dist/commands/dom/formFillHelpers.js +64 -2
  27. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  28. package/dist/commands/dom/formInteraction.js +4 -4
  29. package/dist/commands/dom/formInteraction.js.map +1 -1
  30. package/dist/commands/dom/helpers.d.ts +38 -2
  31. package/dist/commands/dom/helpers.d.ts.map +1 -1
  32. package/dist/commands/dom/helpers.js +104 -3
  33. package/dist/commands/dom/helpers.js.map +1 -1
  34. package/dist/commands/dom/index.d.ts +1 -1
  35. package/dist/commands/dom/index.d.ts.map +1 -1
  36. package/dist/commands/dom/index.js +407 -151
  37. package/dist/commands/dom/index.js.map +1 -1
  38. package/dist/commands/helpJson.d.ts.map +1 -1
  39. package/dist/commands/helpJson.js +27 -10
  40. package/dist/commands/helpJson.js.map +1 -1
  41. package/dist/commands/network/har.d.ts +14 -0
  42. package/dist/commands/network/har.d.ts.map +1 -0
  43. package/dist/commands/network/har.js +97 -0
  44. package/dist/commands/network/har.js.map +1 -0
  45. package/dist/commands/network/index.d.ts +18 -0
  46. package/dist/commands/network/index.d.ts.map +1 -0
  47. package/dist/commands/network/index.js +27 -0
  48. package/dist/commands/network/index.js.map +1 -0
  49. package/dist/commands/network/list.d.ts +14 -0
  50. package/dist/commands/network/list.d.ts.map +1 -0
  51. package/dist/commands/network/list.js +269 -0
  52. package/dist/commands/network/list.js.map +1 -0
  53. package/dist/commands/network/shared.d.ts +56 -0
  54. package/dist/commands/network/shared.d.ts.map +1 -0
  55. package/dist/commands/network/shared.js +174 -0
  56. package/dist/commands/network/shared.js.map +1 -0
  57. package/dist/commands/network.js +4 -4
  58. package/dist/commands/network.js.map +1 -1
  59. package/dist/commands/peek.d.ts.map +1 -1
  60. package/dist/commands/peek.js +12 -11
  61. package/dist/commands/peek.js.map +1 -1
  62. package/dist/commands/shared/CommandRunner.d.ts +19 -0
  63. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  64. package/dist/commands/shared/CommandRunner.js +30 -0
  65. package/dist/commands/shared/CommandRunner.js.map +1 -1
  66. package/dist/commands/shared/commonOptions.d.ts +8 -24
  67. package/dist/commands/shared/commonOptions.d.ts.map +1 -1
  68. package/dist/commands/shared/commonOptions.js +9 -25
  69. package/dist/commands/shared/commonOptions.js.map +1 -1
  70. package/dist/commands/shared/followMode.d.ts +50 -0
  71. package/dist/commands/shared/followMode.d.ts.map +1 -0
  72. package/dist/commands/shared/followMode.js +58 -0
  73. package/dist/commands/shared/followMode.js.map +1 -0
  74. package/dist/commands/shared/optionTypes.d.ts +38 -0
  75. package/dist/commands/shared/optionTypes.d.ts.map +1 -1
  76. package/dist/commands/shared/startHelpers.d.ts +2 -10
  77. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  78. package/dist/commands/shared/startHelpers.js +9 -4
  79. package/dist/commands/shared/startHelpers.js.map +1 -1
  80. package/dist/commands/start.d.ts.map +1 -1
  81. package/dist/commands/start.js +3 -1
  82. package/dist/commands/start.js.map +1 -1
  83. package/dist/commands/status.js +5 -5
  84. package/dist/commands/status.js.map +1 -1
  85. package/dist/commands/stop.js +1 -1
  86. package/dist/commands/stop.js.map +1 -1
  87. package/dist/commands/tail.d.ts.map +1 -1
  88. package/dist/commands/tail.js +7 -16
  89. package/dist/commands/tail.js.map +1 -1
  90. package/dist/commands/types.d.ts +11 -5
  91. package/dist/commands/types.d.ts.map +1 -1
  92. package/dist/commands.js +1 -1
  93. package/dist/commands.js.map +1 -1
  94. package/dist/connection/diagnostics.d.ts +9 -0
  95. package/dist/connection/diagnostics.d.ts.map +1 -1
  96. package/dist/connection/diagnostics.js +13 -0
  97. package/dist/connection/diagnostics.js.map +1 -1
  98. package/dist/connection/handlers.d.ts +1 -8
  99. package/dist/connection/handlers.d.ts.map +1 -1
  100. package/dist/connection/handlers.js.map +1 -1
  101. package/dist/connection/launcher/binaryResolver.d.ts.map +1 -1
  102. package/dist/connection/launcher/binaryResolver.js +1 -14
  103. package/dist/connection/launcher/binaryResolver.js.map +1 -1
  104. package/dist/connection/launcher.d.ts.map +1 -1
  105. package/dist/connection/launcher.js +3 -15
  106. package/dist/connection/launcher.js.map +1 -1
  107. package/dist/connection/pageReadiness.d.ts.map +1 -1
  108. package/dist/connection/pageReadiness.js +12 -8
  109. package/dist/connection/pageReadiness.js.map +1 -1
  110. package/dist/connection/typed-cdp.d.ts +3 -5
  111. package/dist/connection/typed-cdp.d.ts.map +1 -1
  112. package/dist/connection/typed-cdp.js +1 -1
  113. package/dist/connection/typed-cdp.js.map +1 -1
  114. package/dist/constants.d.ts +15 -0
  115. package/dist/constants.d.ts.map +1 -1
  116. package/dist/constants.js +18 -0
  117. package/dist/constants.js.map +1 -1
  118. package/dist/daemon/__tests__/commandRegistry.contract.test.js +6 -2
  119. package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
  120. package/dist/daemon/handlers/CommandHandlers.d.ts +5 -0
  121. package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
  122. package/dist/daemon/handlers/CommandHandlers.js +6 -1
  123. package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
  124. package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
  125. package/dist/daemon/handlers/QueryHandlers.js +3 -1
  126. package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
  127. package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
  128. package/dist/daemon/handlers/responseHandler.js +10 -0
  129. package/dist/daemon/handlers/responseHandler.js.map +1 -1
  130. package/dist/daemon/worker/TelemetryStore.d.ts +2 -1
  131. package/dist/daemon/worker/TelemetryStore.d.ts.map +1 -1
  132. package/dist/daemon/worker/TelemetryStore.js +4 -0
  133. package/dist/daemon/worker/TelemetryStore.js.map +1 -1
  134. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  135. package/dist/daemon/worker/commandRegistry.js +150 -55
  136. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  137. package/dist/daemon/worker/plugins.d.ts.map +1 -1
  138. package/dist/daemon/worker/plugins.js +8 -1
  139. package/dist/daemon/worker/plugins.js.map +1 -1
  140. package/dist/ipc/client.d.ts +10 -1
  141. package/dist/ipc/client.d.ts.map +1 -1
  142. package/dist/ipc/client.js +12 -2
  143. package/dist/ipc/client.js.map +1 -1
  144. package/dist/ipc/session/queries.d.ts +2 -0
  145. package/dist/ipc/session/queries.d.ts.map +1 -1
  146. package/dist/session/QueryCacheManager.d.ts +1 -1
  147. package/dist/session/QueryCacheManager.d.ts.map +1 -1
  148. package/dist/telemetry/__tests__/remoteObject.unit.test.d.ts +2 -0
  149. package/dist/telemetry/__tests__/remoteObject.unit.test.d.ts.map +1 -0
  150. package/dist/telemetry/__tests__/remoteObject.unit.test.js +261 -0
  151. package/dist/telemetry/__tests__/remoteObject.unit.test.js.map +1 -0
  152. package/dist/telemetry/console.d.ts +8 -8
  153. package/dist/telemetry/console.d.ts.map +1 -1
  154. package/dist/telemetry/console.js +129 -52
  155. package/dist/telemetry/console.js.map +1 -1
  156. package/dist/telemetry/filterDsl.d.ts +45 -0
  157. package/dist/telemetry/filterDsl.d.ts.map +1 -0
  158. package/dist/telemetry/filterDsl.js +299 -0
  159. package/dist/telemetry/filterDsl.js.map +1 -0
  160. package/dist/telemetry/filterPresets.d.ts +35 -0
  161. package/dist/telemetry/filterPresets.d.ts.map +1 -0
  162. package/dist/telemetry/filterPresets.js +76 -0
  163. package/dist/telemetry/filterPresets.js.map +1 -0
  164. package/dist/telemetry/navigation.d.ts.map +1 -1
  165. package/dist/telemetry/navigation.js +7 -0
  166. package/dist/telemetry/navigation.js.map +1 -1
  167. package/dist/telemetry/network.d.ts +12 -1
  168. package/dist/telemetry/network.d.ts.map +1 -1
  169. package/dist/telemetry/network.js +132 -8
  170. package/dist/telemetry/network.js.map +1 -1
  171. package/dist/telemetry/objectExpander.d.ts +35 -0
  172. package/dist/telemetry/objectExpander.d.ts.map +1 -0
  173. package/dist/telemetry/objectExpander.js +165 -0
  174. package/dist/telemetry/objectExpander.js.map +1 -0
  175. package/dist/telemetry/remoteObject.d.ts +7 -24
  176. package/dist/telemetry/remoteObject.d.ts.map +1 -1
  177. package/dist/telemetry/remoteObject.js +124 -65
  178. package/dist/telemetry/remoteObject.js.map +1 -1
  179. package/dist/telemetry/remoteObjectUtils.d.ts +40 -0
  180. package/dist/telemetry/remoteObjectUtils.d.ts.map +1 -0
  181. package/dist/telemetry/remoteObjectUtils.js +75 -0
  182. package/dist/telemetry/remoteObjectUtils.js.map +1 -0
  183. package/dist/telemetry/roleInference.d.ts +1 -1
  184. package/dist/telemetry/roleInference.d.ts.map +1 -1
  185. package/dist/types.d.ts +143 -0
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/ui/formatters/a11y.d.ts +1 -1
  188. package/dist/ui/formatters/a11y.d.ts.map +1 -1
  189. package/dist/ui/formatters/console.d.ts +14 -2
  190. package/dist/ui/formatters/console.d.ts.map +1 -1
  191. package/dist/ui/formatters/console.js +38 -7
  192. package/dist/ui/formatters/console.js.map +1 -1
  193. package/dist/ui/formatters/dom.d.ts +9 -18
  194. package/dist/ui/formatters/dom.d.ts.map +1 -1
  195. package/dist/ui/formatters/dom.js +55 -22
  196. package/dist/ui/formatters/dom.js.map +1 -1
  197. package/dist/ui/formatters/networkList.d.ts +19 -0
  198. package/dist/ui/formatters/networkList.d.ts.map +1 -0
  199. package/dist/ui/formatters/networkList.js +86 -0
  200. package/dist/ui/formatters/networkList.js.map +1 -0
  201. package/dist/ui/formatters/preview.d.ts +18 -0
  202. package/dist/ui/formatters/preview.d.ts.map +1 -1
  203. package/dist/ui/formatters/preview.js +13 -5
  204. package/dist/ui/formatters/preview.js.map +1 -1
  205. package/dist/ui/logging/logger.d.ts +1 -1
  206. package/dist/ui/logging/logger.d.ts.map +1 -1
  207. package/dist/ui/logging/logger.js.map +1 -1
  208. package/dist/ui/messages/networkMessages.d.ts +24 -0
  209. package/dist/ui/messages/networkMessages.d.ts.map +1 -0
  210. package/dist/ui/messages/networkMessages.js +30 -0
  211. package/dist/ui/messages/networkMessages.js.map +1 -0
  212. package/dist/utils/exitCodes.d.ts +2 -0
  213. package/dist/utils/exitCodes.d.ts.map +1 -1
  214. package/dist/utils/exitCodes.js +2 -0
  215. package/dist/utils/exitCodes.js.map +1 -1
  216. package/dist/utils/taskMappings.d.ts.map +1 -1
  217. package/dist/utils/taskMappings.js +2 -2
  218. package/dist/utils/taskMappings.js.map +1 -1
  219. package/dist/utils/typeGuards.d.ts +11 -4
  220. package/dist/utils/typeGuards.d.ts.map +1 -1
  221. package/dist/utils/typeGuards.js +1 -17
  222. package/dist/utils/typeGuards.js.map +1 -1
  223. package/package.json +4 -4
@@ -1,11 +1,12 @@
1
1
  import { Option } from 'commander';
2
2
  import { jsonOption } from '../commands/shared/commonOptions.js';
3
3
  import { handleDaemonConnectionError } from '../commands/shared/daemonErrorHandler.js';
4
+ import { setupFollowMode } from '../commands/shared/followMode.js';
4
5
  import { getErrorMessage } from '../connection/errors.js';
5
6
  import { getPeek } from '../ipc/client.js';
6
7
  import { validateIPCResponse } from '../ipc/index.js';
7
8
  import { CommandError } from '../ui/errors/index.js';
8
- import { formatConsole, formatConsoleFollow, } from '../ui/formatters/console.js';
9
+ import { formatConsole, formatConsoleFollow, LEVEL_MAP, } from '../ui/formatters/console.js';
9
10
  import { followingConsoleMessage, stoppedFollowingConsoleMessage, noConsoleDataMessage, } from '../ui/messages/consoleMessages.js';
10
11
  import { invalidLastRangeError } from '../ui/messages/validation.js';
11
12
  import { getExitCodeForConnectionError } from '../utils/errorMapping.js';
@@ -43,6 +44,14 @@ const followOption = new Option('-f, --follow', 'Stream console messages in real
43
44
  * By default, only current navigation messages are shown.
44
45
  */
45
46
  const historyOption = new Option('-H, --history', 'Show messages from all page loads (default: current only)').default(false);
47
+ /**
48
+ * Valid console levels for filtering.
49
+ */
50
+ const VALID_LEVELS = ['error', 'warning', 'info', 'debug'];
51
+ /**
52
+ * --level option for filtering by message level.
53
+ */
54
+ const levelOption = new Option('--level <level>', 'Filter by message level (error, warning, info, debug)').choices(VALID_LEVELS);
46
55
  /**
47
56
  * Fetch console messages from the daemon.
48
57
  *
@@ -51,7 +60,9 @@ const historyOption = new Option('-H, --history', 'Show messages from all page l
51
60
  */
52
61
  async function fetchConsoleMessages(options) {
53
62
  try {
54
- const response = await getPeek();
63
+ // Pass lastN=0 to get all messages (worker applies filtering)
64
+ // We request all and filter client-side for flexibility
65
+ const response = await getPeek({ lastN: 0 });
55
66
  try {
56
67
  validateIPCResponse(response);
57
68
  }
@@ -115,41 +126,66 @@ export function filterByCurrentNavigation(messages) {
115
126
  return messages.filter((m) => m.navigationId === maxNavigationId);
116
127
  }
117
128
  /**
118
- * Display console output based on options.
129
+ * Filter messages by level.
119
130
  *
120
- * @param messages - Console messages to display
121
- * @param options - Command options
131
+ * @param messages - Console messages to filter
132
+ * @param level - Level to filter by (error, warning, info, debug)
133
+ * @returns Filtered messages matching the specified level
122
134
  */
123
- function displayConsole(messages, options) {
124
- let filteredMessages = messages;
125
- // Default: show only current navigation. Use --history for all.
126
- if (!options.history) {
127
- filteredMessages = filterByCurrentNavigation(messages);
135
+ export function filterByLevel(messages, level) {
136
+ return messages.filter((m) => LEVEL_MAP[m.type] === level);
137
+ }
138
+ /**
139
+ * Apply navigation and level filters to console messages.
140
+ *
141
+ * @param messages - Raw console messages
142
+ * @param options - Filter options (history and level)
143
+ * @returns Filtered messages
144
+ */
145
+ function applyMessageFilters(messages, options) {
146
+ let filtered = options.history ? messages : filterByCurrentNavigation(messages);
147
+ if (options.level) {
148
+ filtered = filterByLevel(filtered, options.level);
128
149
  }
129
- const formatOptions = {
150
+ return filtered;
151
+ }
152
+ /**
153
+ * Build format options from command options.
154
+ *
155
+ * @param options - Command options
156
+ * @returns Format options for console formatters
157
+ */
158
+ function buildFormatOptions(options) {
159
+ return {
130
160
  json: options.json,
131
161
  list: options.list,
132
162
  follow: options.follow,
133
163
  last: options.last,
134
164
  history: options.history,
165
+ level: options.level,
135
166
  };
167
+ }
168
+ /**
169
+ * Display console output based on options.
170
+ *
171
+ * @param messages - Console messages to display
172
+ * @param options - Command options
173
+ */
174
+ function displayConsole(messages, options) {
175
+ const filteredMessages = applyMessageFilters(messages, options);
136
176
  if (options.follow) {
137
177
  console.clear();
138
178
  }
139
- console.log(formatConsole(filteredMessages, formatOptions));
179
+ console.log(formatConsole(filteredMessages, buildFormatOptions(options)));
140
180
  }
141
181
  /**
142
182
  * Display console in follow mode with streaming updates.
143
183
  *
144
184
  * @param messages - Console messages to display
145
- * @param options - Command options (for --history flag)
185
+ * @param options - Command options (for --history and --level flags)
146
186
  */
147
187
  function displayConsoleStreaming(messages, options) {
148
- let filteredMessages = messages;
149
- // Default: show only current navigation. Use --history for all.
150
- if (!options.history) {
151
- filteredMessages = filterByCurrentNavigation(messages);
152
- }
188
+ const filteredMessages = applyMessageFilters(messages, options);
153
189
  const lastMessages = filteredMessages.slice(-FOLLOW_MODE_MESSAGE_LIMIT);
154
190
  console.clear();
155
191
  console.log(formatConsoleFollow(lastMessages));
@@ -172,25 +208,21 @@ export function registerConsoleCommand(program) {
172
208
  .addOption(listOption)
173
209
  .addOption(followOption)
174
210
  .addOption(historyOption)
211
+ .addOption(levelOption)
175
212
  .addOption(consoleLastOption)
176
- .addOption(jsonOption)
213
+ .addOption(jsonOption())
177
214
  .action(async (options) => {
178
215
  if (options.follow) {
179
- console.error(followingConsoleMessage());
180
216
  const showConsole = async () => {
181
217
  const messages = await fetchConsoleMessages(options);
182
218
  if (messages) {
183
219
  displayConsoleStreaming(messages, options);
184
220
  }
185
221
  };
186
- await showConsole();
187
- const followInterval = setInterval(() => {
188
- void showConsole();
189
- }, 1000);
190
- process.on('SIGINT', () => {
191
- clearInterval(followInterval);
192
- console.error(stoppedFollowingConsoleMessage());
193
- process.exit(EXIT_CODES.SUCCESS);
222
+ await setupFollowMode(showConsole, {
223
+ startMessage: followingConsoleMessage,
224
+ stopMessage: stoppedFollowingConsoleMessage,
225
+ intervalMs: 1000,
194
226
  });
195
227
  }
196
228
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/commands/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,SAAS,GAGV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAClC,YAAY,EACZ,mDAAmD,kBAAkB,GAAG,CACzE;KACE,OAAO,CAAC,kBAAkB,CAAC;KAC3B,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC;QACzD,MAAM,IAAI,YAAY,CACpB,qBAAqB,CAAC,cAAc,EAAE,cAAc,CAAC,EACrD,EAAE,EACF,UAAU,CAAC,iBAAiB,CAC7B,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,mCAAmC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEhG;;GAEG;AACH,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC,OAAO,CAC7F,KAAK,CACN,CAAC;AAEF;;;GAGG;AACH,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,eAAe,EACf,2DAA2D,CAC5D,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEjB;;GAEG;AACH,MAAM,YAAY,GAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,iBAAiB,EACjB,uDAAuD,CACxD,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAExB;;;;;GAKG;AACH,KAAK,UAAU,oBAAoB,CACjC,OAA8B;IAE9B,IAAI,CAAC;QACH,8DAA8D;QAC9D,wDAAwD;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC;YACH,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,eAAe,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,2BAA2B,CAAC,QAAQ,EAAE;gBACnD,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,eAAe,EAAE,IAAI;gBACrB,QAAQ;aACT,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAgC,CAAC;QAC/D,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;oBACb,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,oBAAoB,EAAE;iBAC9B,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,MAAM,GAAG,2BAA2B,CAAC,oBAAoB,EAAE;YAC/D,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA0B;IAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,oDAAoD;IACpD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CAC7E,CAAC;IAEF,kDAAkD;IAClD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,eAAe,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAA0B,EAAE,KAAmB;IAC3E,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAC1B,QAA0B,EAC1B,OAAyD;IAEzD,IAAI,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,OAA8B;IACxD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,QAA0B,EAAE,OAA8B;IAChF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,QAA0B,EAAE,OAA8B;IACzF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACxE,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,SAAS,CAAC,UAAU,CAAC;SACrB,SAAS,CAAC,YAAY,CAAC;SACvB,SAAS,CAAC,aAAa,CAAC;SACxB,SAAS,CAAC,WAAW,CAAC;SACtB,SAAS,CAAC,iBAAiB,CAAC;SAC5B,SAAS,CAAC,UAAU,EAAE,CAAC;SACvB,MAAM,CAAC,KAAK,EAAE,OAA8B,EAAE,EAAE;QAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;gBAC5C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,QAAQ,EAAE,CAAC;oBACb,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,eAAe,CAAC,WAAW,EAAE;gBACjC,YAAY,EAAE,uBAAuB;gBACrC,WAAW,EAAE,8BAA8B;gBAC3C,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"details.d.ts","sourceRoot":"","sources":["../../src/commands/details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+C7D"}
1
+ {"version":3,"file":"details.d.ts","sourceRoot":"","sources":["../../src/commands/details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD7D"}
@@ -8,6 +8,7 @@ import { validateDetailsItem } from '../utils/typeGuards.js';
8
8
  /**
9
9
  * Format details for human-readable output.
10
10
  * Dispatches to the appropriate formatter based on type.
11
+ * TypeScript narrows the item type automatically via discriminated union.
11
12
  *
12
13
  * @param data - Details result containing item and type
13
14
  */
@@ -30,7 +31,7 @@ export function registerDetailsCommand(program) {
30
31
  .description('Get detailed information for a specific request or console message')
31
32
  .argument('<type>', 'Type of item: "network" or "console"')
32
33
  .argument('<id>', 'Request ID (for network) or index (for console)')
33
- .addOption(jsonOption)
34
+ .addOption(jsonOption())
34
35
  .action(async (type, id, options) => {
35
36
  options.type = type;
36
37
  options.id = id;
@@ -51,14 +52,24 @@ export function registerDetailsCommand(program) {
51
52
  exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
52
53
  };
53
54
  }
54
- const validatedItem = validateDetailsItem(response.data.item, opts.type);
55
- return {
56
- success: true,
57
- data: {
58
- item: validatedItem,
59
- type: opts.type,
60
- },
61
- };
55
+ if (opts.type === 'network') {
56
+ return {
57
+ success: true,
58
+ data: {
59
+ type: 'network',
60
+ item: validateDetailsItem(response.data.item, 'network'),
61
+ },
62
+ };
63
+ }
64
+ else {
65
+ return {
66
+ success: true,
67
+ data: {
68
+ type: 'console',
69
+ item: validateDetailsItem(response.data.item, 'console'),
70
+ },
71
+ };
72
+ }
62
73
  }, options, formatDetails);
63
74
  });
64
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"details.js","sourceRoot":"","sources":["../../src/commands/details.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAmB;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAsB,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAsB,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oEAAoE,CAAC;SACjF,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SAC1D,QAAQ,CAAC,MAAM,EAAE,iDAAiD,CAAC;SACnE,SAAS,CAAC,UAAU,CAAC;SACrB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAU,EAAE,OAA8B,EAAE,EAAE;QACzE,OAAO,CAAC,IAAI,GAAG,IAA6B,CAAC;QAC7C,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAEhB,MAAM,UAAU,CACd,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC;oBAC1E,QAAQ,EAAE,UAAU,CAAC,iBAAiB;iBACvC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtD,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE9B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,qBAAqB;oBAC5B,QAAQ,EAAE,UAAU,CAAC,kBAAkB;iBACxC,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB;aACF,CAAC;QACJ,CAAC,EACD,OAAO,EACP,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"details.js","sourceRoot":"","sources":["../../src/commands/details.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAAmB;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oEAAoE,CAAC;SACjF,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SAC1D,QAAQ,CAAC,MAAM,EAAE,iDAAiD,CAAC;SACnE,SAAS,CAAC,UAAU,EAAE,CAAC;SACvB,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAU,EAAE,OAA8B,EAAE,EAAE;QACzE,OAAO,CAAC,IAAI,GAAG,IAA6B,CAAC;QAC7C,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAEhB,MAAM,UAAU,CACd,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC;oBAC1E,QAAQ,EAAE,UAAU,CAAC,iBAAiB;iBACvC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtD,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE9B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,qBAAqB;oBAC5B,QAAQ,EAAE,UAAU,CAAC,kBAAkB;iBACxC,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,IAAI,EAAE,SAAkB;wBACxB,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;qBACzD;iBACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,IAAI,EAAE,SAAkB;wBACxB,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;qBACzD;iBACF,CAAC;YACJ,CAAC;QACH,CAAC,EACD,OAAO,EACP,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -5,7 +5,9 @@
5
5
  * - Numeric indices (referencing cached query results)
6
6
  * - CSS selectors (used directly)
7
7
  *
8
- * Handles cache validation, staleness detection, and consistent error handling.
8
+ * Handles cache validation, staleness detection, and automatic refresh.
9
+ * When cache is stale due to navigation, automatically re-runs the original
10
+ * query to provide seamless "just works" experience.
9
11
  *
10
12
  * @example
11
13
  * ```typescript
@@ -56,7 +58,8 @@ export type ElementTargetResult = ElementTargetSuccess | ElementTargetFailure;
56
58
  /**
57
59
  * Singleton resolver for DOM element access patterns.
58
60
  *
59
- * Centralizes element resolution with cache validation and consistent error handling.
61
+ * Centralizes element resolution with cache validation, automatic refresh,
62
+ * and consistent error handling.
60
63
  */
61
64
  export declare class DomElementResolver {
62
65
  private static instance;
@@ -67,6 +70,16 @@ export declare class DomElementResolver {
67
70
  * @param cacheManager - Query cache manager (defaults to singleton)
68
71
  */
69
72
  constructor(cacheManager?: QueryCacheManager);
73
+ /**
74
+ * Refresh stale cache by re-running the original query.
75
+ *
76
+ * Called automatically when cache validation fails due to navigation.
77
+ * Re-queries using the stored selector and updates the cache with fresh results.
78
+ *
79
+ * @param selector - Original CSS selector from stale cache
80
+ * @returns Fresh query result
81
+ */
82
+ private refreshCache;
70
83
  /**
71
84
  * Get the singleton instance.
72
85
  *
@@ -84,7 +97,9 @@ export declare class DomElementResolver {
84
97
  * - A CSS selector string (used directly)
85
98
  * - A numeric index (resolved from cached query results)
86
99
  *
87
- * Validates cache staleness by checking navigationId against current page state.
100
+ * Automatically refreshes stale cache by re-running the original query.
101
+ * This provides a "just works" experience where navigation doesn't break
102
+ * index-based access.
88
103
  *
89
104
  * @param selectorOrIndex - CSS selector or numeric index from query results
90
105
  * @param explicitIndex - Optional explicit --index flag value (1-based)
@@ -103,11 +118,12 @@ export declare class DomElementResolver {
103
118
  /**
104
119
  * Get nodeId for a cached index.
105
120
  *
106
- * Validates cache staleness and throws CommandError if invalid.
121
+ * Automatically refreshes stale cache by re-running the original query.
122
+ * Throws CommandError only if refresh fails or index is out of range after refresh.
107
123
  *
108
124
  * @param index - Zero-based index from query results
109
125
  * @returns Node with nodeId from cache
110
- * @throws CommandError if cache missing, stale, index out of range, or node not found
126
+ * @throws CommandError if cache missing, index out of range after refresh, or node not found
111
127
  *
112
128
  * @example
113
129
  * ```typescript
@@ -121,10 +137,10 @@ export declare class DomElementResolver {
121
137
  /**
122
138
  * Get the count of cached elements.
123
139
  *
124
- * Validates cache and returns element count, or throws if cache is invalid.
140
+ * Automatically refreshes stale cache by re-running the original query.
125
141
  *
126
142
  * @returns Number of cached elements
127
- * @throws CommandError if cache is missing or stale
143
+ * @throws CommandError if cache is missing or refresh fails
128
144
  */
129
145
  getElementCount(): Promise<number>;
130
146
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DomElementResolver.d.ts","sourceRoot":"","sources":["../../../src/commands/dom/DomElementResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,OAAO,EAAE,KAAK,CAAC;IACf,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE9E;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,YAAY,CAAoB;IAExC;;;;OAIG;gBACS,YAAY,CAAC,EAAE,iBAAiB;IAI5C;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAwC5F;;;;;;;;;;;;;;OAcG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAmCnE;;;;;;;OAOG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAcxC;;;;;OAKG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;CAGjD"}
1
+ {"version":3,"file":"DomElementResolver.d.ts","sourceRoot":"","sources":["../../../src/commands/dom/DomElementResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOnE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC;IACd,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,OAAO,EAAE,KAAK,CAAC;IACf,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE9E;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,YAAY,CAAoB;IAExC;;;;OAIG;gBACS,YAAY,CAAC,EAAE,iBAAiB;IAI5C;;;;;;;;OAQG;YACW,YAAY;IAkB1B;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiD5F;;;;;;;;;;;;;;;OAeG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA4CnE;;;;;;;OAOG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBxC;;;;;OAKG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;CAGjD"}
@@ -5,7 +5,9 @@
5
5
  * - Numeric indices (referencing cached query results)
6
6
  * - CSS selectors (used directly)
7
7
  *
8
- * Handles cache validation, staleness detection, and consistent error handling.
8
+ * Handles cache validation, staleness detection, and automatic refresh.
9
+ * When cache is stale due to navigation, automatically re-runs the original
10
+ * query to provide seamless "just works" experience.
9
11
  *
10
12
  * @example
11
13
  * ```typescript
@@ -25,11 +27,14 @@
25
27
  */
26
28
  import { QueryCacheManager } from '../../session/QueryCacheManager.js';
27
29
  import { CommandError } from '../../ui/errors/index.js';
30
+ import { createLogger } from '../../ui/logging/index.js';
28
31
  import { EXIT_CODES } from '../../utils/exitCodes.js';
32
+ const log = createLogger('dom');
29
33
  /**
30
34
  * Singleton resolver for DOM element access patterns.
31
35
  *
32
- * Centralizes element resolution with cache validation and consistent error handling.
36
+ * Centralizes element resolution with cache validation, automatic refresh,
37
+ * and consistent error handling.
33
38
  */
34
39
  export class DomElementResolver {
35
40
  static instance = null;
@@ -42,6 +47,28 @@ export class DomElementResolver {
42
47
  constructor(cacheManager) {
43
48
  this.cacheManager = cacheManager ?? QueryCacheManager.getInstance();
44
49
  }
50
+ /**
51
+ * Refresh stale cache by re-running the original query.
52
+ *
53
+ * Called automatically when cache validation fails due to navigation.
54
+ * Re-queries using the stored selector and updates the cache with fresh results.
55
+ *
56
+ * @param selector - Original CSS selector from stale cache
57
+ * @returns Fresh query result
58
+ */
59
+ async refreshCache(selector) {
60
+ log.debug(`Cache stale, auto-refreshing query "${selector}"`);
61
+ const { queryDOMElements } = await import('../../commands/dom/helpers.js');
62
+ const result = await queryDOMElements(selector);
63
+ const navigationId = await this.cacheManager.getCurrentNavigationId();
64
+ const resultWithNavId = {
65
+ ...result,
66
+ ...(navigationId !== null && { navigationId }),
67
+ };
68
+ await this.cacheManager.set(resultWithNavId);
69
+ this.cacheManager.invalidateNavigationCache();
70
+ log.debug(`Cache refreshed: found ${result.count} elements`);
71
+ }
45
72
  /**
46
73
  * Get the singleton instance.
47
74
  *
@@ -64,7 +91,9 @@ export class DomElementResolver {
64
91
  * - A CSS selector string (used directly)
65
92
  * - A numeric index (resolved from cached query results)
66
93
  *
67
- * Validates cache staleness by checking navigationId against current page state.
94
+ * Automatically refreshes stale cache by re-running the original query.
95
+ * This provides a "just works" experience where navigation doesn't break
96
+ * index-based access.
68
97
  *
69
98
  * @param selectorOrIndex - CSS selector or numeric index from query results
70
99
  * @param explicitIndex - Optional explicit --index flag value (1-based)
@@ -82,7 +111,12 @@ export class DomElementResolver {
82
111
  async resolve(selectorOrIndex, explicitIndex) {
83
112
  const isNumericIndex = /^\d+$/.test(selectorOrIndex);
84
113
  if (isNumericIndex) {
85
- const validation = await this.cacheManager.validate();
114
+ let validation = await this.cacheManager.validate();
115
+ // Auto-refresh: if cache is stale but has selector, re-run query
116
+ if (!validation.valid && validation.cache?.selector) {
117
+ await this.refreshCache(validation.cache.selector);
118
+ validation = await this.cacheManager.validate();
119
+ }
86
120
  if (!validation.valid || !validation.cache) {
87
121
  return {
88
122
  success: false,
@@ -96,9 +130,11 @@ export class DomElementResolver {
96
130
  if (index < 0 || index >= cachedQuery.nodes.length) {
97
131
  return {
98
132
  success: false,
99
- error: `Index ${index} out of range (found ${cachedQuery.nodes.length} elements)`,
100
- exitCode: EXIT_CODES.INVALID_ARGUMENTS,
101
- suggestion: `Use an index between 0 and ${cachedQuery.nodes.length - 1}`,
133
+ error: `Index ${index} out of range (found ${cachedQuery.nodes.length} nodes from query "${cachedQuery.selector}")`,
134
+ exitCode: EXIT_CODES.STALE_CACHE,
135
+ suggestion: cachedQuery.nodes.length === 0
136
+ ? `No elements found after refresh. The selector "${cachedQuery.selector}" may no longer match any elements.`
137
+ : `Use an index between 0 and ${cachedQuery.nodes.length - 1}`,
102
138
  };
103
139
  }
104
140
  return {
@@ -116,11 +152,12 @@ export class DomElementResolver {
116
152
  /**
117
153
  * Get nodeId for a cached index.
118
154
  *
119
- * Validates cache staleness and throws CommandError if invalid.
155
+ * Automatically refreshes stale cache by re-running the original query.
156
+ * Throws CommandError only if refresh fails or index is out of range after refresh.
120
157
  *
121
158
  * @param index - Zero-based index from query results
122
159
  * @returns Node with nodeId from cache
123
- * @throws CommandError if cache missing, stale, index out of range, or node not found
160
+ * @throws CommandError if cache missing, index out of range after refresh, or node not found
124
161
  *
125
162
  * @example
126
163
  * ```typescript
@@ -129,15 +166,21 @@ export class DomElementResolver {
129
166
  * ```
130
167
  */
131
168
  async getNodeIdForIndex(index) {
132
- const validation = await this.cacheManager.validate();
169
+ let validation = await this.cacheManager.validate();
170
+ // Auto-refresh: if cache is stale but has selector, re-run query
171
+ if (!validation.valid && validation.cache?.selector) {
172
+ await this.refreshCache(validation.cache.selector);
173
+ validation = await this.cacheManager.validate();
174
+ }
133
175
  if (!validation.valid || !validation.cache) {
134
176
  throw new CommandError(validation.error ?? 'No cached query results found', validation.suggestion ? { suggestion: validation.suggestion } : {}, EXIT_CODES.INVALID_ARGUMENTS);
135
177
  }
136
178
  const cachedQuery = validation.cache;
137
179
  if (index < 0 || index >= cachedQuery.nodes.length) {
138
- throw new CommandError(`Index ${index} out of range (found ${cachedQuery.nodes.length} elements)`, {
139
- suggestion: `Use an index between 0 and ${cachedQuery.nodes.length - 1}`,
140
- }, EXIT_CODES.INVALID_ARGUMENTS);
180
+ const suggestion = cachedQuery.nodes.length === 0
181
+ ? `No elements found after refresh. The selector "${cachedQuery.selector}" may no longer match any elements.`
182
+ : `Use an index between 0 and ${cachedQuery.nodes.length - 1}`;
183
+ throw new CommandError(`Index ${index} out of range (found ${cachedQuery.nodes.length} nodes from query "${cachedQuery.selector}")`, { suggestion }, EXIT_CODES.STALE_CACHE);
141
184
  }
142
185
  const targetNode = cachedQuery.nodes[index];
143
186
  if (!targetNode) {
@@ -148,13 +191,18 @@ export class DomElementResolver {
148
191
  /**
149
192
  * Get the count of cached elements.
150
193
  *
151
- * Validates cache and returns element count, or throws if cache is invalid.
194
+ * Automatically refreshes stale cache by re-running the original query.
152
195
  *
153
196
  * @returns Number of cached elements
154
- * @throws CommandError if cache is missing or stale
197
+ * @throws CommandError if cache is missing or refresh fails
155
198
  */
156
199
  async getElementCount() {
157
- const validation = await this.cacheManager.validate();
200
+ let validation = await this.cacheManager.validate();
201
+ // Auto-refresh: if cache is stale but has selector, re-run query
202
+ if (!validation.valid && validation.cache?.selector) {
203
+ await this.refreshCache(validation.cache.selector);
204
+ validation = await this.cacheManager.validate();
205
+ }
158
206
  if (!validation.valid || !validation.cache) {
159
207
  throw new CommandError(validation.error ?? 'No cached query results found', validation.suggestion ? { suggestion: validation.suggestion } : {}, EXIT_CODES.INVALID_ARGUMENTS);
160
208
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DomElementResolver.js","sourceRoot":"","sources":["../../../src/commands/dom/DomElementResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DomElementResolver.js","sourceRoot":"","sources":["../../../src/commands/dom/DomElementResolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../src/commands/dom/a11y.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8KzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA0D1D"}
1
+ {"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../../src/commands/dom/a11y.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0LzC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA2D1D"}
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { DomElementResolver } from '../../commands/dom/DomElementResolver.js';
12
12
  import { getDomContext } from '../../commands/dom/helpers.js';
13
- import { runCommand } from '../../commands/shared/CommandRunner.js';
13
+ import { runCommand, runJsonCommand } from '../../commands/shared/CommandRunner.js';
14
14
  import { jsonOption } from '../../commands/shared/commonOptions.js';
15
15
  import { collectA11yTree, queryA11yTree, parseQueryPattern, resolveA11yNode, } from '../../telemetry/a11y.js';
16
16
  import { CommandError } from '../../ui/errors/index.js';
@@ -26,16 +26,17 @@ import { EXIT_CODES } from '../../utils/exitCodes.js';
26
26
  * @param options - Command options
27
27
  */
28
28
  async function handleA11yTree(options) {
29
- const tree = await collectA11yTree();
30
29
  if (options.json) {
31
- const serialized = {
32
- root: tree.root,
33
- nodes: Object.fromEntries(tree.nodes),
34
- count: tree.count,
35
- };
36
- console.log(JSON.stringify(serialized, null, 2));
37
- process.exit(EXIT_CODES.SUCCESS);
30
+ await runJsonCommand(async () => {
31
+ const tree = await collectA11yTree();
32
+ return {
33
+ root: tree.root,
34
+ nodes: Object.fromEntries(tree.nodes),
35
+ count: tree.count,
36
+ };
37
+ });
38
38
  }
39
+ const tree = await collectA11yTree();
39
40
  await runCommand(() => Promise.resolve({ success: true, data: tree }), options, formatA11yTree);
40
41
  }
41
42
  /**
@@ -66,7 +67,7 @@ async function handleA11yQuery(pattern, options) {
66
67
  const tree = await collectA11yTree();
67
68
  const result = queryA11yTree(tree, queryPattern);
68
69
  if (result.count === 0) {
69
- throw new CommandError('No elements found matching pattern', {
70
+ throw new CommandError('No nodes found matching pattern', {
70
71
  suggestion: 'Try a broader query or use "bdg dom a11y tree" to see all elements',
71
72
  note: `Pattern: ${JSON.stringify(queryPattern)}`,
72
73
  }, EXIT_CODES.RESOURCE_NOT_FOUND);
@@ -96,7 +97,10 @@ async function handleA11yQuery(pattern, options) {
96
97
  async function handleA11yDescribe(selectorOrIndex, options) {
97
98
  const resolver = DomElementResolver.getInstance();
98
99
  const isNumericIndex = resolver.isNumericIndex(selectorOrIndex);
99
- await runCommand(async () => {
100
+ /**
101
+ * Fetch a11y node data for a given selector or index.
102
+ */
103
+ async function fetchA11yNodeData() {
100
104
  let node;
101
105
  let nodeId;
102
106
  if (isNumericIndex) {
@@ -116,7 +120,14 @@ async function handleA11yDescribe(selectorOrIndex, options) {
116
120
  if (domNodeId) {
117
121
  domContext = await getDomContext(domNodeId);
118
122
  }
119
- return { success: true, data: { node, domContext } };
123
+ return { node, domContext };
124
+ }
125
+ if (options.json) {
126
+ await runJsonCommand(fetchA11yNodeData);
127
+ }
128
+ await runCommand(async () => {
129
+ const data = await fetchA11yNodeData();
130
+ return { success: true, data };
120
131
  }, options, formatA11yNodeWithContext);
121
132
  }
122
133
  /**
@@ -128,16 +139,17 @@ export function registerA11yCommands(domCmd) {
128
139
  const a11y = domCmd
129
140
  .command('a11y')
130
141
  .description('Accessibility tree inspection and semantic queries')
131
- .argument('[search]', 'Quick search: index (describe), pattern with ":" (query), or name search')
132
- .addOption(jsonOption)
142
+ .argument('[search]', 'Quick search: index (describe), CSS selector (#id, .class), pattern with ":" (query), or name search')
143
+ .enablePositionalOptions()
133
144
  .action(async (search, options) => {
134
145
  if (!search) {
135
146
  a11y.help();
136
147
  return;
137
148
  }
138
149
  const isNumericIndex = /^\d+$/.test(search);
150
+ const isCssSelector = /^[#.[]/u.test(search) || search.includes(' ');
139
151
  const isPatternQuery = search.includes(':') || search.includes('=');
140
- if (isNumericIndex) {
152
+ if (isNumericIndex || isCssSelector) {
141
153
  await handleA11yDescribe(search, options);
142
154
  }
143
155
  else if (isPatternQuery) {
@@ -150,7 +162,7 @@ export function registerA11yCommands(domCmd) {
150
162
  a11y
151
163
  .command('tree')
152
164
  .description('Dump full accessibility tree (filters ignored nodes)')
153
- .addOption(jsonOption)
165
+ .addOption(jsonOption())
154
166
  .action(async (options) => {
155
167
  await handleA11yTree(options);
156
168
  });
@@ -158,7 +170,7 @@ export function registerA11yCommands(domCmd) {
158
170
  .command('query')
159
171
  .description('Query elements by accessibility properties (e.g., "role:button", "name:Submit")')
160
172
  .argument('<pattern>', 'Pattern with field prefix - role:button, name:Submit, name:*search* (supports wildcards)')
161
- .addOption(jsonOption)
173
+ .addOption(jsonOption())
162
174
  .action(async (pattern, options) => {
163
175
  await handleA11yQuery(pattern, options);
164
176
  });
@@ -166,7 +178,7 @@ export function registerA11yCommands(domCmd) {
166
178
  .command('describe')
167
179
  .description('Get accessibility properties for CSS selector or index')
168
180
  .argument('<selectorOrIndex>', 'CSS selector (e.g., "button.submit") or numeric index from query results')
169
- .addOption(jsonOption)
181
+ .addOption(jsonOption())
170
182
  .action(async (selectorOrIndex, options) => {
171
183
  await handleA11yDescribe(selectorOrIndex, options);
172
184
  });