browser-debugger-cli 0.6.2 → 0.6.5

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 (328) hide show
  1. package/README.md +9 -3
  2. package/dist/cdp/protocol.d.ts.map +1 -1
  3. package/dist/cdp/protocol.js +0 -6
  4. package/dist/cdp/protocol.js.map +1 -1
  5. package/dist/cdp/schema.d.ts.map +1 -1
  6. package/dist/cdp/schema.js +0 -2
  7. package/dist/cdp/schema.js.map +1 -1
  8. package/dist/commands/__tests__/machineReadableHelp.contract.test.d.ts +12 -0
  9. package/dist/commands/__tests__/machineReadableHelp.contract.test.d.ts.map +1 -0
  10. package/dist/commands/__tests__/machineReadableHelp.contract.test.js +102 -0
  11. package/dist/commands/__tests__/machineReadableHelp.contract.test.js.map +1 -0
  12. package/dist/commands/cdp.d.ts.map +1 -1
  13. package/dist/commands/cdp.js +9 -24
  14. package/dist/commands/cdp.js.map +1 -1
  15. package/dist/commands/cleanup.d.ts.map +1 -1
  16. package/dist/commands/cleanup.js +0 -13
  17. package/dist/commands/cleanup.js.map +1 -1
  18. package/dist/commands/console.d.ts.map +1 -1
  19. package/dist/commands/console.js +22 -7
  20. package/dist/commands/console.js.map +1 -1
  21. package/dist/commands/details.d.ts.map +1 -1
  22. package/dist/commands/details.js +0 -5
  23. package/dist/commands/details.js.map +1 -1
  24. package/dist/commands/dom/a11y.d.ts.map +1 -1
  25. package/dist/commands/dom/a11y.js +51 -15
  26. package/dist/commands/dom/a11y.js.map +1 -1
  27. package/dist/commands/dom/evalHelpers.d.ts +1 -1
  28. package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
  29. package/dist/commands/dom/evalHelpers.js +3 -7
  30. package/dist/commands/dom/evalHelpers.js.map +1 -1
  31. package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
  32. package/dist/commands/dom/formFillHelpers.js +30 -11
  33. package/dist/commands/dom/formFillHelpers.js.map +1 -1
  34. package/dist/commands/dom/formInteraction.d.ts.map +1 -1
  35. package/dist/commands/dom/formInteraction.js +0 -5
  36. package/dist/commands/dom/formInteraction.js.map +1 -1
  37. package/dist/commands/dom/formSubmitHelpers.d.ts.map +1 -1
  38. package/dist/commands/dom/formSubmitHelpers.js +0 -13
  39. package/dist/commands/dom/formSubmitHelpers.js.map +1 -1
  40. package/dist/commands/dom/helpers.d.ts.map +1 -1
  41. package/dist/commands/dom/helpers.js +0 -22
  42. package/dist/commands/dom/helpers.js.map +1 -1
  43. package/dist/commands/dom/index.d.ts.map +1 -1
  44. package/dist/commands/dom/index.js +85 -19
  45. package/dist/commands/dom/index.js.map +1 -1
  46. package/dist/commands/dom/reactEventHelpers.d.ts +3 -3
  47. package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
  48. package/dist/commands/dom/reactEventHelpers.js +3 -31
  49. package/dist/commands/dom/reactEventHelpers.js.map +1 -1
  50. package/dist/commands/machineReadableHelp.d.ts +48 -0
  51. package/dist/commands/machineReadableHelp.d.ts.map +1 -1
  52. package/dist/commands/machineReadableHelp.js +80 -0
  53. package/dist/commands/machineReadableHelp.js.map +1 -1
  54. package/dist/commands/network.d.ts.map +1 -1
  55. package/dist/commands/network.js +185 -10
  56. package/dist/commands/network.js.map +1 -1
  57. package/dist/commands/peek.d.ts.map +1 -1
  58. package/dist/commands/peek.js +17 -14
  59. package/dist/commands/peek.js.map +1 -1
  60. package/dist/commands/shared/CommandRunner.d.ts +2 -0
  61. package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
  62. package/dist/commands/shared/CommandRunner.js +3 -8
  63. package/dist/commands/shared/CommandRunner.js.map +1 -1
  64. package/dist/commands/shared/__tests__/validation.unit.test.d.ts +7 -0
  65. package/dist/commands/shared/__tests__/validation.unit.test.d.ts.map +1 -0
  66. package/dist/commands/shared/__tests__/validation.unit.test.js +141 -0
  67. package/dist/commands/shared/__tests__/validation.unit.test.js.map +1 -0
  68. package/dist/commands/shared/startHelpers.d.ts.map +1 -1
  69. package/dist/commands/shared/startHelpers.js +0 -10
  70. package/dist/commands/shared/startHelpers.js.map +1 -1
  71. package/dist/commands/shared/validation.d.ts +19 -0
  72. package/dist/commands/shared/validation.d.ts.map +1 -1
  73. package/dist/commands/shared/validation.js +110 -7
  74. package/dist/commands/shared/validation.js.map +1 -1
  75. package/dist/commands/start.d.ts.map +1 -1
  76. package/dist/commands/start.js +0 -6
  77. package/dist/commands/start.js.map +1 -1
  78. package/dist/commands/status.d.ts.map +1 -1
  79. package/dist/commands/status.js +0 -2
  80. package/dist/commands/status.js.map +1 -1
  81. package/dist/commands/stop.d.ts.map +1 -1
  82. package/dist/commands/stop.js +2 -11
  83. package/dist/commands/stop.js.map +1 -1
  84. package/dist/commands/tail.js +6 -7
  85. package/dist/commands/tail.js.map +1 -1
  86. package/dist/commands.d.ts.map +1 -1
  87. package/dist/commands.js +0 -5
  88. package/dist/commands.js.map +1 -1
  89. package/dist/connection/cdp.d.ts.map +1 -1
  90. package/dist/connection/cdp.js +9 -12
  91. package/dist/connection/cdp.js.map +1 -1
  92. package/dist/connection/diagnostics.d.ts.map +1 -1
  93. package/dist/connection/diagnostics.js +7 -4
  94. package/dist/connection/diagnostics.js.map +1 -1
  95. package/dist/connection/pageReadiness.d.ts.map +1 -1
  96. package/dist/connection/pageReadiness.js +0 -1
  97. package/dist/connection/pageReadiness.js.map +1 -1
  98. package/dist/constants.d.ts.map +1 -1
  99. package/dist/constants.js +3 -1
  100. package/dist/constants.js.map +1 -1
  101. package/dist/daemon/__tests__/commandRegistry.contract.test.js +259 -0
  102. package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
  103. package/dist/daemon/handlers/BaseHandler.d.ts +75 -0
  104. package/dist/daemon/handlers/BaseHandler.d.ts.map +1 -0
  105. package/dist/daemon/handlers/BaseHandler.js +103 -0
  106. package/dist/daemon/handlers/BaseHandler.js.map +1 -0
  107. package/dist/daemon/handlers/CommandHandlers.d.ts +3 -4
  108. package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
  109. package/dist/daemon/handlers/CommandHandlers.js +14 -52
  110. package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
  111. package/dist/daemon/handlers/QueryHandlers.d.ts +8 -6
  112. package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
  113. package/dist/daemon/handlers/QueryHandlers.js +42 -94
  114. package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
  115. package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
  116. package/dist/daemon/handlers/SessionHandlers.js +0 -15
  117. package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
  118. package/dist/daemon/handlers/requestHandlers.d.ts +5 -1
  119. package/dist/daemon/handlers/requestHandlers.d.ts.map +1 -1
  120. package/dist/daemon/handlers/requestHandlers.js +7 -2
  121. package/dist/daemon/handlers/requestHandlers.js.map +1 -1
  122. package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
  123. package/dist/daemon/handlers/responseHandler.js +19 -8
  124. package/dist/daemon/handlers/responseHandler.js.map +1 -1
  125. package/dist/daemon/ipcServer.d.ts.map +1 -1
  126. package/dist/daemon/ipcServer.js +4 -11
  127. package/dist/daemon/ipcServer.js.map +1 -1
  128. package/dist/daemon/launcher.d.ts.map +1 -1
  129. package/dist/daemon/launcher.js +0 -18
  130. package/dist/daemon/launcher.js.map +1 -1
  131. package/dist/daemon/lifecycle/cdpSetup.d.ts.map +1 -1
  132. package/dist/daemon/lifecycle/cdpSetup.js +0 -4
  133. package/dist/daemon/lifecycle/cdpSetup.js.map +1 -1
  134. package/dist/daemon/lifecycle/chromeConnection.js +0 -1
  135. package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
  136. package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
  137. package/dist/daemon/lifecycle/signalHandlers.js +0 -3
  138. package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
  139. package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
  140. package/dist/daemon/lifecycle/workerCleanup.js +0 -7
  141. package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
  142. package/dist/daemon/lifecycle/workerIpc.d.ts.map +1 -1
  143. package/dist/daemon/lifecycle/workerIpc.js +0 -1
  144. package/dist/daemon/lifecycle/workerIpc.js.map +1 -1
  145. package/dist/daemon/patternDefinitions.d.ts +47 -0
  146. package/dist/daemon/patternDefinitions.d.ts.map +1 -0
  147. package/dist/daemon/patternDefinitions.js +71 -0
  148. package/dist/daemon/patternDefinitions.js.map +1 -0
  149. package/dist/daemon/patternDetector.d.ts +60 -0
  150. package/dist/daemon/patternDetector.d.ts.map +1 -0
  151. package/dist/daemon/patternDetector.js +74 -0
  152. package/dist/daemon/patternDetector.js.map +1 -0
  153. package/dist/daemon/server/JsonlParser.d.ts.map +1 -1
  154. package/dist/daemon/server/JsonlParser.js +0 -2
  155. package/dist/daemon/server/JsonlParser.js.map +1 -1
  156. package/dist/daemon/startSession.d.ts.map +1 -1
  157. package/dist/daemon/startSession.js +0 -15
  158. package/dist/daemon/startSession.js.map +1 -1
  159. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.d.ts +11 -0
  160. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.d.ts.map +1 -0
  161. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.js +136 -0
  162. package/dist/daemon/worker/__tests__/PatternDetector.unit.test.js.map +1 -0
  163. package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
  164. package/dist/daemon/worker/commandRegistry.js +46 -2
  165. package/dist/daemon/worker/commandRegistry.js.map +1 -1
  166. package/dist/daemon/worker/plugins.d.ts.map +1 -1
  167. package/dist/daemon/worker/plugins.js +0 -3
  168. package/dist/daemon/worker/plugins.js.map +1 -1
  169. package/dist/daemon/worker.js +0 -9
  170. package/dist/daemon/worker.js.map +1 -1
  171. package/dist/daemon.js +0 -2
  172. package/dist/daemon.js.map +1 -1
  173. package/dist/index.js +0 -14
  174. package/dist/index.js.map +1 -1
  175. package/dist/ipc/client.d.ts +47 -1
  176. package/dist/ipc/client.d.ts.map +1 -1
  177. package/dist/ipc/client.js +51 -0
  178. package/dist/ipc/client.js.map +1 -1
  179. package/dist/ipc/index.d.ts.map +1 -1
  180. package/dist/ipc/index.js +0 -6
  181. package/dist/ipc/index.js.map +1 -1
  182. package/dist/ipc/protocol/commands.d.ts +46 -0
  183. package/dist/ipc/protocol/commands.d.ts.map +1 -1
  184. package/dist/ipc/protocol/commands.js +8 -0
  185. package/dist/ipc/protocol/commands.js.map +1 -1
  186. package/dist/ipc/session/queries.d.ts +26 -2
  187. package/dist/ipc/session/queries.d.ts.map +1 -1
  188. package/dist/ipc/transport/index.d.ts.map +1 -1
  189. package/dist/ipc/transport/index.js +0 -1
  190. package/dist/ipc/transport/index.js.map +1 -1
  191. package/dist/ipc/transport/jsonl.d.ts.map +1 -1
  192. package/dist/ipc/transport/jsonl.js +0 -1
  193. package/dist/ipc/transport/jsonl.js.map +1 -1
  194. package/dist/session/cleanup.d.ts.map +1 -1
  195. package/dist/session/cleanup.js +2 -20
  196. package/dist/session/cleanup.js.map +1 -1
  197. package/dist/session/queryCache.d.ts +35 -0
  198. package/dist/session/queryCache.d.ts.map +1 -0
  199. package/dist/session/queryCache.js +83 -0
  200. package/dist/session/queryCache.js.map +1 -0
  201. package/dist/telemetry/__tests__/filters.unit.test.js +119 -1
  202. package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -1
  203. package/dist/telemetry/__tests__/network.contract.test.js +114 -0
  204. package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
  205. package/dist/telemetry/a11y.d.ts +8 -5
  206. package/dist/telemetry/a11y.d.ts.map +1 -1
  207. package/dist/telemetry/a11y.js +34 -19
  208. package/dist/telemetry/a11y.js.map +1 -1
  209. package/dist/telemetry/dom.js +4 -4
  210. package/dist/telemetry/dom.js.map +1 -1
  211. package/dist/telemetry/filters.d.ts +17 -0
  212. package/dist/telemetry/filters.d.ts.map +1 -1
  213. package/dist/telemetry/filters.js +25 -0
  214. package/dist/telemetry/filters.js.map +1 -1
  215. package/dist/telemetry/har/__tests__/builder.unit.test.d.ts +8 -0
  216. package/dist/telemetry/har/__tests__/builder.unit.test.d.ts.map +1 -0
  217. package/dist/telemetry/har/__tests__/builder.unit.test.js +694 -0
  218. package/dist/telemetry/har/__tests__/builder.unit.test.js.map +1 -0
  219. package/dist/telemetry/har/builder.d.ts +43 -0
  220. package/dist/telemetry/har/builder.d.ts.map +1 -0
  221. package/dist/telemetry/har/builder.js +440 -0
  222. package/dist/telemetry/har/builder.js.map +1 -0
  223. package/dist/telemetry/har/types.d.ts +290 -0
  224. package/dist/telemetry/har/types.d.ts.map +1 -0
  225. package/dist/telemetry/har/types.js +7 -0
  226. package/dist/telemetry/har/types.js.map +1 -0
  227. package/dist/telemetry/network.d.ts.map +1 -1
  228. package/dist/telemetry/network.js +37 -4
  229. package/dist/telemetry/network.js.map +1 -1
  230. package/dist/types.d.ts +31 -0
  231. package/dist/types.d.ts.map +1 -1
  232. package/dist/ui/OutputBuilder.d.ts.map +1 -1
  233. package/dist/ui/OutputBuilder.js +0 -8
  234. package/dist/ui/OutputBuilder.js.map +1 -1
  235. package/dist/ui/errors/CommandError.d.ts +5 -1
  236. package/dist/ui/errors/CommandError.d.ts.map +1 -1
  237. package/dist/ui/errors/CommandError.js +0 -1
  238. package/dist/ui/errors/CommandError.js.map +1 -1
  239. package/dist/ui/errors/index.d.ts.map +1 -1
  240. package/dist/ui/errors/index.js +0 -2
  241. package/dist/ui/errors/index.js.map +1 -1
  242. package/dist/ui/formatters/__tests__/preview.unit.test.d.ts +13 -0
  243. package/dist/ui/formatters/__tests__/preview.unit.test.d.ts.map +1 -0
  244. package/dist/ui/formatters/__tests__/preview.unit.test.js +180 -0
  245. package/dist/ui/formatters/__tests__/preview.unit.test.js.map +1 -0
  246. package/dist/ui/formatters/details.d.ts.map +1 -1
  247. package/dist/ui/formatters/details.js +1 -0
  248. package/dist/ui/formatters/details.js.map +1 -1
  249. package/dist/ui/formatters/dom.d.ts.map +1 -1
  250. package/dist/ui/formatters/dom.js +5 -5
  251. package/dist/ui/formatters/dom.js.map +1 -1
  252. package/dist/ui/formatters/helpFormatters.d.ts +41 -0
  253. package/dist/ui/formatters/helpFormatters.d.ts.map +1 -0
  254. package/dist/ui/formatters/helpFormatters.js +80 -0
  255. package/dist/ui/formatters/helpFormatters.js.map +1 -0
  256. package/dist/ui/formatters/index.d.ts +1 -0
  257. package/dist/ui/formatters/index.d.ts.map +1 -1
  258. package/dist/ui/formatters/index.js +1 -0
  259. package/dist/ui/formatters/index.js.map +1 -1
  260. package/dist/ui/formatters/networkHeaders.d.ts +14 -0
  261. package/dist/ui/formatters/networkHeaders.d.ts.map +1 -0
  262. package/dist/ui/formatters/networkHeaders.js +47 -0
  263. package/dist/ui/formatters/networkHeaders.js.map +1 -0
  264. package/dist/ui/formatters/preview.d.ts.map +1 -1
  265. package/dist/ui/formatters/preview.js +102 -33
  266. package/dist/ui/formatters/preview.js.map +1 -1
  267. package/dist/ui/formatters/sessionFormatters.d.ts +58 -0
  268. package/dist/ui/formatters/sessionFormatters.d.ts.map +1 -0
  269. package/dist/ui/formatters/sessionFormatters.js +116 -0
  270. package/dist/ui/formatters/sessionFormatters.js.map +1 -0
  271. package/dist/ui/formatters/status.d.ts.map +1 -1
  272. package/dist/ui/formatters/status.js +0 -11
  273. package/dist/ui/formatters/status.js.map +1 -1
  274. package/dist/ui/formatting.d.ts.map +1 -1
  275. package/dist/ui/formatting.js +0 -6
  276. package/dist/ui/formatting.js.map +1 -1
  277. package/dist/ui/logging/logger.d.ts +1 -1
  278. package/dist/ui/logging/logger.d.ts.map +1 -1
  279. package/dist/ui/logging/logger.js.map +1 -1
  280. package/dist/ui/messages/chrome.d.ts.map +1 -1
  281. package/dist/ui/messages/chrome.js +0 -6
  282. package/dist/ui/messages/chrome.js.map +1 -1
  283. package/dist/ui/messages/commands.d.ts +9 -0
  284. package/dist/ui/messages/commands.d.ts.map +1 -1
  285. package/dist/ui/messages/commands.js +11 -13
  286. package/dist/ui/messages/commands.js.map +1 -1
  287. package/dist/ui/messages/debug.d.ts.map +1 -1
  288. package/dist/ui/messages/debug.js +0 -6
  289. package/dist/ui/messages/debug.js.map +1 -1
  290. package/dist/ui/messages/errors.d.ts +53 -0
  291. package/dist/ui/messages/errors.d.ts.map +1 -1
  292. package/dist/ui/messages/errors.js +59 -0
  293. package/dist/ui/messages/errors.js.map +1 -1
  294. package/dist/ui/messages/hints.d.ts +33 -0
  295. package/dist/ui/messages/hints.d.ts.map +1 -0
  296. package/dist/ui/messages/hints.js +37 -0
  297. package/dist/ui/messages/hints.js.map +1 -0
  298. package/dist/ui/messages/internal.d.ts.map +1 -1
  299. package/dist/ui/messages/internal.js +0 -3
  300. package/dist/ui/messages/internal.js.map +1 -1
  301. package/dist/ui/messages/preview.d.ts.map +1 -1
  302. package/dist/ui/messages/preview.js +0 -12
  303. package/dist/ui/messages/preview.js.map +1 -1
  304. package/dist/ui/messages/session.d.ts +11 -1
  305. package/dist/ui/messages/session.d.ts.map +1 -1
  306. package/dist/ui/messages/session.js +14 -24
  307. package/dist/ui/messages/session.js.map +1 -1
  308. package/dist/utils/atomicFile.d.ts.map +1 -1
  309. package/dist/utils/atomicFile.js +9 -6
  310. package/dist/utils/atomicFile.js.map +1 -1
  311. package/dist/utils/decisionTrees.d.ts +54 -0
  312. package/dist/utils/decisionTrees.d.ts.map +1 -0
  313. package/dist/utils/decisionTrees.js +171 -0
  314. package/dist/utils/decisionTrees.js.map +1 -0
  315. package/dist/utils/exitCodes.d.ts.map +1 -1
  316. package/dist/utils/exitCodes.js +0 -2
  317. package/dist/utils/exitCodes.js.map +1 -1
  318. package/dist/utils/taskMappings.d.ts +47 -0
  319. package/dist/utils/taskMappings.d.ts.map +1 -0
  320. package/dist/utils/taskMappings.js +118 -0
  321. package/dist/utils/taskMappings.js.map +1 -0
  322. package/dist/utils/validation.d.ts.map +1 -1
  323. package/dist/utils/validation.js +0 -3
  324. package/dist/utils/validation.js.map +1 -1
  325. package/dist/utils/version.d.ts.map +1 -1
  326. package/dist/utils/version.js +0 -1
  327. package/dist/utils/version.js.map +1 -1
  328. package/package.json +3 -3
@@ -2,6 +2,8 @@
2
2
  * Machine-readable help generation using Commander.js introspection API.
3
3
  */
4
4
  import type { Command } from 'commander';
5
+ import { type DecisionTree } from '../utils/decisionTrees.js';
6
+ import { type TaskMapping } from '../utils/taskMappings.js';
5
7
  /**
6
8
  * Option metadata for machine-readable help.
7
9
  */
@@ -57,6 +59,36 @@ export interface CommandMetadata {
57
59
  /** Subcommands */
58
60
  subcommands: CommandMetadata[];
59
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
+ /** Number of high-level commands */
87
+ commands: number;
88
+ /** Domain coverage areas */
89
+ coverage: string[];
90
+ };
91
+ }
60
92
  /**
61
93
  * Root machine-readable help structure.
62
94
  */
@@ -78,10 +110,26 @@ export interface MachineReadableHelp {
78
110
  /** Exit code description */
79
111
  description: string;
80
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;
81
121
  }
82
122
  /**
83
123
  * Generates machine-readable help from a Commander program.
84
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
+ *
85
133
  * @param program - Commander program instance
86
134
  * @returns Machine-readable help structure
87
135
  *
@@ -1 +1 @@
1
- {"version":3,"file":"machineReadableHelp.d.ts","sourceRoot":"","sources":["../../src/commands/machineReadableHelp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,WAAW,CAAC;AAI3D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oCAAoC;IACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,sBAAsB;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,kBAAkB;IAClB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,8BAA8B;IAC9B,SAAS,EAAE;QACT,sBAAsB;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,qBAAqB;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,4BAA4B;QAC5B,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL;AAuDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAkEjF"}
1
+ {"version":3,"file":"machineReadableHelp.d.ts","sourceRoot":"","sources":["../../src/commands/machineReadableHelp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAoB,MAAM,WAAW,CAAC;AAK3D,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlF,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,oCAAoC;IACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,sBAAsB;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,kBAAkB;IAClB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,GAAG,EAAE;QACH,4BAA4B;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,0CAA0C;QAC1C,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,sCAAsC;IACtC,SAAS,EAAE;QACT,oCAAoC;QACpC,QAAQ,EAAE,MAAM,CAAC;QACjB,4BAA4B;QAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,8BAA8B;IAC9B,SAAS,EAAE;QACT,sBAAsB;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,qBAAqB;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,4BAA4B;QAC5B,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;IACJ,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,4BAA4B;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,gCAAgC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAqID;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAsEjF"}
@@ -1,7 +1,13 @@
1
1
  /**
2
2
  * Machine-readable help generation using Commander.js introspection API.
3
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';
4
8
  import { filterDefined } from '../utils/objects.js';
9
+ import { isProcessAlive } from '../utils/process.js';
10
+ import { getAllTaskMappings } from '../utils/taskMappings.js';
5
11
  /**
6
12
  * Converts a Commander Option to OptionMetadata.
7
13
  *
@@ -52,9 +58,79 @@ function convertCommand(command) {
52
58
  subcommands: command.commands.map(convertCommand),
53
59
  };
54
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
+ * Generates capabilities summary.
102
+ *
103
+ * Dynamically calculates CDP and high-level command capabilities
104
+ * from protocol schema and task mappings.
105
+ *
106
+ * @returns Capabilities object
107
+ */
108
+ function generateCapabilities() {
109
+ const domainSummaries = getAllDomainSummaries();
110
+ const taskMappings = getAllTaskMappings();
111
+ const totalMethods = domainSummaries.reduce((sum, domain) => sum + domain.commandCount, 0);
112
+ return {
113
+ cdp: {
114
+ domains: domainSummaries.length,
115
+ methods: totalMethods.toString(),
116
+ },
117
+ highLevel: {
118
+ commands: Object.keys(taskMappings).length,
119
+ coverage: ['dom', 'network', 'console', 'session', 'monitoring'],
120
+ },
121
+ };
122
+ }
55
123
  /**
56
124
  * Generates machine-readable help from a Commander program.
57
125
  *
126
+ * Includes comprehensive metadata for agent discovery:
127
+ * - Command structure and options
128
+ * - Exit codes with semantic meanings
129
+ * - Task-to-command mappings with CDP alternatives
130
+ * - Runtime state and command availability
131
+ * - Intent-based decision trees
132
+ * - Capabilities summary
133
+ *
58
134
  * @param program - Commander program instance
59
135
  * @returns Machine-readable help structure
60
136
  *
@@ -132,6 +208,10 @@ export function generateMachineReadableHelp(program) {
132
208
  description: 'Inter-process communication error',
133
209
  },
134
210
  ],
211
+ taskMappings: getAllTaskMappings(),
212
+ runtimeState: generateRuntimeState(),
213
+ decisionTrees: getAllDecisionTrees(),
214
+ capabilities: generateCapabilities(),
135
215
  };
136
216
  }
137
217
  //# sourceMappingURL=machineReadableHelp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"machineReadableHelp.js","sourceRoot":"","sources":["../../src/commands/machineReadableHelp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"machineReadableHelp.js","sourceRoot":"","sources":["../../src/commands/machineReadableHelp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC9D"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyJzC;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI9D"}
@@ -1,8 +1,115 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
1
3
  import { runCommand } from '../commands/shared/CommandRunner.js';
2
4
  import { jsonOption } from '../commands/shared/commonOptions.js';
3
- import { callCDP } from '../ipc/client.js';
5
+ import { getHARData, callCDP, getNetworkHeaders } from '../ipc/client.js';
4
6
  import { validateIPCResponse } from '../ipc/index.js';
5
- import { formatCookies } from '../ui/formatters/index.js';
7
+ import { getSessionFilePath } from '../session/paths.js';
8
+ import { buildHAR } from '../telemetry/har/builder.js';
9
+ import { isDaemonConnectionError } from '../ui/errors/utils.js';
10
+ import { formatCookies, formatNetworkHeaders } from '../ui/formatters/index.js';
11
+ import { sessionNotActiveError } from '../ui/messages/errors.js';
12
+ import { AtomicFileWriter } from '../utils/atomicFile.js';
13
+ import { EXIT_CODES } from '../utils/exitCodes.js';
14
+ import { VERSION } from '../utils/version.js';
15
+ /**
16
+ * Generate timestamped filename for HAR export in ~/.bdg/ directory.
17
+ *
18
+ * @returns Full path to HAR file in ~/.bdg/capture-YYYY-MM-DD-HHMMSS.har
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * generateHARFilename(); // "~/.bdg/capture-2025-11-19-143045.har"
23
+ * ```
24
+ */
25
+ function generateHARFilename() {
26
+ const now = new Date();
27
+ const year = now.getFullYear();
28
+ const month = String(now.getMonth() + 1).padStart(2, '0');
29
+ const day = String(now.getDate()).padStart(2, '0');
30
+ const hours = String(now.getHours()).padStart(2, '0');
31
+ const minutes = String(now.getMinutes()).padStart(2, '0');
32
+ const seconds = String(now.getSeconds()).padStart(2, '0');
33
+ const filename = `capture-${year}-${month}-${day}-${hours}${minutes}${seconds}.har`;
34
+ const sessionDir = path.dirname(getSessionFilePath('OUTPUT'));
35
+ return path.join(sessionDir, filename);
36
+ }
37
+ /**
38
+ * Fetch network requests from live daemon session.
39
+ *
40
+ * @returns Network requests array
41
+ * @throws Error if daemon connection fails or no network data available
42
+ */
43
+ async function fetchFromLiveSession() {
44
+ const response = await getHARData();
45
+ validateIPCResponse(response);
46
+ if (!response.data?.requests) {
47
+ throw new Error('No network data in response');
48
+ }
49
+ return response.data.requests;
50
+ }
51
+ /**
52
+ * Fetch network requests from offline session.json file.
53
+ *
54
+ * @returns Network requests array
55
+ * @throws Error if session file not found or no network data available
56
+ */
57
+ function fetchFromOfflineSession() {
58
+ const sessionPath = getSessionFilePath('OUTPUT');
59
+ if (!fs.existsSync(sessionPath)) {
60
+ throw new Error(sessionNotActiveError('export network data'), {
61
+ cause: { code: EXIT_CODES.RESOURCE_NOT_FOUND },
62
+ });
63
+ }
64
+ const sessionData = JSON.parse(fs.readFileSync(sessionPath, 'utf-8'));
65
+ if (!sessionData.data?.network) {
66
+ throw new Error('No network data in session file', {
67
+ cause: { code: EXIT_CODES.RESOURCE_NOT_FOUND },
68
+ });
69
+ }
70
+ return sessionData.data.network;
71
+ }
72
+ /**
73
+ * Check if error indicates daemon is unavailable.
74
+ *
75
+ * @param error - Error to check
76
+ * @returns True if error indicates no active session or daemon connection failure
77
+ */
78
+ function isDaemonUnavailable(error) {
79
+ if (isDaemonConnectionError(error)) {
80
+ return true;
81
+ }
82
+ const errorMessage = error instanceof Error ? error.message : String(error);
83
+ return errorMessage.includes('No active session');
84
+ }
85
+ /**
86
+ * Get network requests from live session or session.json.
87
+ *
88
+ * Tries live daemon first, falls back to offline session file.
89
+ *
90
+ * @returns Network requests array
91
+ * @throws Error if no session available (live or offline)
92
+ */
93
+ async function getNetworkRequests() {
94
+ try {
95
+ return await fetchFromLiveSession();
96
+ }
97
+ catch (error) {
98
+ if (isDaemonUnavailable(error)) {
99
+ return fetchFromOfflineSession();
100
+ }
101
+ throw error;
102
+ }
103
+ }
104
+ /**
105
+ * Format HAR export success message for human output.
106
+ *
107
+ * @param data - HAR export result data
108
+ * @returns Formatted success message
109
+ */
110
+ function formatHARExport(data) {
111
+ return `✓ Exported ${data.entries} requests to ${data.file}`;
112
+ }
6
113
  /**
7
114
  * Register network commands.
8
115
  *
@@ -10,7 +117,31 @@ import { formatCookies } from '../ui/formatters/index.js';
10
117
  */
11
118
  export function registerNetworkCommands(program) {
12
119
  const networkCmd = program.command('network').description('Inspect network state and resources');
13
- // bdg network getCookies
120
+ networkCmd
121
+ .command('har [output-file]')
122
+ .description('Export network data as HAR 1.2 format')
123
+ .addOption(jsonOption)
124
+ .action(async (outputFile, options) => {
125
+ await runCommand(async () => {
126
+ const requests = await getNetworkRequests();
127
+ const outputPath = outputFile ?? generateHARFilename();
128
+ const dir = path.dirname(outputPath);
129
+ if (dir !== '.' && !fs.existsSync(dir)) {
130
+ fs.mkdirSync(dir, { recursive: true });
131
+ }
132
+ const har = buildHAR(requests, {
133
+ version: VERSION,
134
+ });
135
+ await AtomicFileWriter.writeAsync(outputPath, JSON.stringify(har, null, 2));
136
+ return {
137
+ success: true,
138
+ data: {
139
+ file: outputPath,
140
+ entries: har.log.entries.length,
141
+ },
142
+ };
143
+ }, options, formatHARExport);
144
+ });
14
145
  networkCmd
15
146
  .command('getCookies')
16
147
  .description('List cookies from the current page')
@@ -18,24 +149,68 @@ export function registerNetworkCommands(program) {
18
149
  .addOption(jsonOption)
19
150
  .action(async (options) => {
20
151
  await runCommand(async (opts) => {
21
- // Build CDP method parameters
22
152
  const params = {};
23
153
  if (opts.url) {
24
154
  params['urls'] = [opts.url];
25
155
  }
26
- // Call CDP Network.getCookies
27
156
  const response = await callCDP('Network.getCookies', params);
28
- // Validate IPC response (throws on error)
29
157
  validateIPCResponse(response);
30
- // Extract cookies from CDP response
31
158
  const cookies = response.data?.result?.cookies ?? [];
32
159
  return {
33
160
  success: true,
34
161
  data: cookies,
35
162
  };
36
- }, options,
37
- // Human-readable formatter
38
- formatCookies);
163
+ }, options, formatCookies);
164
+ });
165
+ networkCmd
166
+ .command('headers [id]')
167
+ .description('Show HTTP headers (defaults to current main document)')
168
+ .option('--header <name>', 'Filter to specific header name')
169
+ .addOption(jsonOption)
170
+ .addHelpText('after', '\nNote: Without [id], shows headers for the current main document.\n If the page has navigated, this will be the latest navigation, not the original URL.')
171
+ .action(async (id, options) => {
172
+ await runCommand(async (opts) => {
173
+ const response = await getNetworkHeaders({
174
+ ...(id && { id }),
175
+ ...(opts.header && { headerName: opts.header }),
176
+ });
177
+ validateIPCResponse(response);
178
+ if (!response.data) {
179
+ return {
180
+ success: false,
181
+ error: 'No data returned from worker',
182
+ exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
183
+ };
184
+ }
185
+ return {
186
+ success: true,
187
+ data: response.data,
188
+ };
189
+ }, options, formatNetworkHeaders);
190
+ });
191
+ networkCmd
192
+ .command('document')
193
+ .description('Show main HTML document request details (alias for headers without ID)')
194
+ .option('--header <name>', 'Filter to specific header name')
195
+ .addOption(jsonOption)
196
+ .action(async (options) => {
197
+ await runCommand(async (opts) => {
198
+ const response = await getNetworkHeaders({
199
+ ...(opts.header && { headerName: opts.header }),
200
+ });
201
+ validateIPCResponse(response);
202
+ if (!response.data) {
203
+ return {
204
+ success: false,
205
+ error: 'No data returned from worker',
206
+ exitCode: EXIT_CODES.RESOURCE_NOT_FOUND,
207
+ };
208
+ }
209
+ return {
210
+ success: true,
211
+ data: response.data,
212
+ };
213
+ }, options, formatNetworkHeaders);
39
214
  });
40
215
  }
41
216
  //# sourceMappingURL=network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAUzD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAEjG,yBAAyB;IACzB,UAAU;SACP,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC;SAC9C,SAAS,CAAC,UAAU,CAAC;SACrB,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,MAAM,UAAU,CACd,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,8BAA8B;YAC9B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YAED,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;YAE7D,0CAA0C;YAC1C,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE9B,oCAAoC;YACpC,MAAM,OAAO,GAAI,QAAQ,CAAC,IAAI,EAAE,MAAiC,EAAE,OAAO,IAAI,EAAE,CAAC;YAEjF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC,EACD,OAAO;QACP,2BAA2B;QAC3B,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6G1D"}
1
+ {"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoH1D"}
@@ -1,8 +1,9 @@
1
1
  import { jsonOption } from '../commands/shared/commonOptions.js';
2
2
  import { handleDaemonConnectionError } from '../commands/shared/daemonErrorHandler.js';
3
- import { positiveIntRule } from '../commands/shared/validation.js';
3
+ import { positiveIntRule, resourceTypeRule } from '../commands/shared/validation.js';
4
4
  import { getPeek } from '../ipc/client.js';
5
5
  import { validateIPCResponse } from '../ipc/index.js';
6
+ import { filterByResourceType } from '../telemetry/filters.js';
6
7
  import { formatPreview } from '../ui/formatters/preview.js';
7
8
  import { followingPreviewMessage, stoppedFollowingPreviewMessage } from '../ui/messages/preview.js';
8
9
  import { EXIT_CODES } from '../utils/exitCodes.js';
@@ -21,11 +22,13 @@ export function registerPeekCommand(program) {
21
22
  .option('-c, --console', 'Show only console messages', false)
22
23
  .option('-d, --dom', 'Show DOM/A11y tree data', false)
23
24
  .option('-f, --follow', 'Watch for updates (like tail -f)', false)
24
- .option('--last <count>', 'Show last N items (network requests + console messages)', '10')
25
+ .option('--last <count>', 'Show last N items (0 = all, default: 10)', '10')
26
+ .option('--type <types>', 'Filter network requests by resource type (comma-separated: Document,XHR,Fetch,etc.)')
25
27
  .action(async (options) => {
26
- // Validate --last option using validation layer
27
- const lastRule = positiveIntRule({ min: 1, max: 1000, default: 10 });
28
+ const lastRule = positiveIntRule({ min: 1, max: 1000, default: 10, allowZeroForAll: true });
28
29
  const lastN = lastRule.validate(options.last);
30
+ const typeRule = resourceTypeRule();
31
+ const resourceTypes = typeRule.validate(options.type);
29
32
  const previewBase = {
30
33
  json: options.json,
31
34
  network: options.network,
@@ -37,15 +40,12 @@ export function registerPeekCommand(program) {
37
40
  };
38
41
  const showPreview = async () => {
39
42
  try {
40
- // Fetch preview data via IPC from daemon
41
43
  const response = await getPeek();
42
- // Validate IPC response (will throw on error)
43
44
  try {
44
45
  validateIPCResponse(response);
45
46
  }
46
47
  catch {
47
48
  const errorMsg = response.error ?? 'Unknown error';
48
- // No active session - use RESOURCE_NOT_FOUND
49
49
  const exitCode = errorMsg.includes('No active session')
50
50
  ? EXIT_CODES.RESOURCE_NOT_FOUND
51
51
  : EXIT_CODES.SESSION_FILE_ERROR;
@@ -60,7 +60,6 @@ export function registerPeekCommand(program) {
60
60
  }
61
61
  return;
62
62
  }
63
- // Extract preview data from response
64
63
  const output = response.data?.preview;
65
64
  if (!output) {
66
65
  const result = handleDaemonConnectionError('No preview data in response', {
@@ -74,15 +73,22 @@ export function registerPeekCommand(program) {
74
73
  }
75
74
  return;
76
75
  }
77
- // Clear screen before rendering to prevent stacked outputs in follow mode
78
76
  if (options.follow) {
79
77
  console.clear();
80
78
  }
81
- // Add current view timestamp for follow mode to show refresh time
82
79
  const previewOptions = previewBase.follow
83
80
  ? { ...previewBase, viewedAt: new Date() }
84
81
  : previewBase;
85
- console.log(formatPreview(output, previewOptions));
82
+ const filteredOutput = {
83
+ ...output,
84
+ data: {
85
+ ...output.data,
86
+ ...(output.data.network && {
87
+ network: filterByResourceType(output.data.network, resourceTypes),
88
+ }),
89
+ },
90
+ };
91
+ console.log(formatPreview(filteredOutput, previewOptions));
86
92
  }
87
93
  catch {
88
94
  const result = handleDaemonConnectionError('Daemon not running', {
@@ -96,13 +102,11 @@ export function registerPeekCommand(program) {
96
102
  }
97
103
  };
98
104
  if (options.follow) {
99
- // Follow mode: update every second
100
105
  console.error(followingPreviewMessage());
101
106
  await showPreview();
102
107
  const followInterval = setInterval(() => {
103
108
  void showPreview();
104
109
  }, 1000);
105
- // Handle Ctrl+C gracefully
106
110
  process.on('SIGINT', () => {
107
111
  clearInterval(followInterval);
108
112
  console.error(stoppedFollowingPreviewMessage());
@@ -110,7 +114,6 @@ export function registerPeekCommand(program) {
110
114
  });
111
115
  }
112
116
  else {
113
- // One-time preview
114
117
  await showPreview();
115
118
  }
116
119
  });
@@ -1 +1 @@
1
- {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface CommandResult<T = unknown> {
21
21
  exitCode?: number;
22
22
  /** Optional error context (suggestions, examples, etc.) */
23
23
  errorContext?: Record<string, unknown>;
24
+ /** Optional hint message to display on stderr (for successful commands with guidance) */
25
+ hint?: string;
24
26
  }
25
27
  /**
26
28
  * Handler function type.
@@ -1 +1 @@
1
- {"version":3,"file":"CommandRunner.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,IAAI,CACnF,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,EACrF,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAyFf"}
1
+ {"version":3,"file":"CommandRunner.d.ts","sourceRoot":"","sources":["../../../src/commands/shared/CommandRunner.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,IAAI,CACnF,OAAO,EAAE,QAAQ,KACd,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,UAAU,CAAC,QAAQ,SAAS,kBAAkB,EAAE,OAAO,GAAG,OAAO,EACrF,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAqFf"}
@@ -33,7 +33,6 @@ export async function runCommand(handler, options, formatter) {
33
33
  try {
34
34
  const result = await handler(options);
35
35
  if (!result.success) {
36
- // Error result from handler
37
36
  if (options.json) {
38
37
  const errorData = {
39
38
  ...(result.exitCode !== undefined && { exitCode: result.exitCode }),
@@ -43,7 +42,6 @@ export async function runCommand(handler, options, formatter) {
43
42
  }
44
43
  else {
45
44
  console.error(result.error ? genericError(result.error) : unknownError());
46
- // Show errorContext suggestions in human-readable mode
47
45
  if (result.errorContext && typeof result.errorContext === 'object') {
48
46
  for (const value of Object.values(result.errorContext)) {
49
47
  if (typeof value === 'string') {
@@ -54,7 +52,9 @@ export async function runCommand(handler, options, formatter) {
54
52
  }
55
53
  process.exit(result.exitCode ?? EXIT_CODES.UNHANDLED_EXCEPTION);
56
54
  }
57
- // Success - output data
55
+ if (result.hint) {
56
+ console.error(result.hint);
57
+ }
58
58
  if (options.json) {
59
59
  console.log(JSON.stringify(result.data, null, 2));
60
60
  }
@@ -63,20 +63,17 @@ export async function runCommand(handler, options, formatter) {
63
63
  console.log(formattedOutput);
64
64
  }
65
65
  else {
66
- // Fallback: JSON output if no formatter provided
67
66
  console.log(JSON.stringify(result.data, null, 2));
68
67
  }
69
68
  process.exit(EXIT_CODES.SUCCESS);
70
69
  }
71
70
  catch (error) {
72
- // Handle CommandError with metadata and custom exit code
73
71
  if (error instanceof CommandError) {
74
72
  if (options.json) {
75
73
  console.log(JSON.stringify(OutputBuilder.buildJsonError(error.message, error.metadata), null, 2));
76
74
  }
77
75
  else {
78
76
  console.error(genericError(error.message));
79
- // Output metadata as additional help text
80
77
  for (const value of Object.values(error.metadata)) {
81
78
  console.error(value);
82
79
  }
@@ -84,7 +81,6 @@ export async function runCommand(handler, options, formatter) {
84
81
  process.exit(error.exitCode);
85
82
  }
86
83
  const errorMessage = getErrorMessage(error);
87
- // Detect daemon connection errors
88
84
  if (isDaemonConnectionError(error)) {
89
85
  if (options.json) {
90
86
  console.log(JSON.stringify(OutputBuilder.buildJsonError('Daemon not running', {
@@ -96,7 +92,6 @@ export async function runCommand(handler, options, formatter) {
96
92
  }
97
93
  process.exit(EXIT_CODES.RESOURCE_NOT_FOUND);
98
94
  }
99
- // Generic error
100
95
  if (options.json) {
101
96
  console.log(JSON.stringify(OutputBuilder.buildJsonError(errorMessage), null, 2));
102
97
  }