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.
- package/README.md +9 -3
- package/dist/cdp/protocol.d.ts.map +1 -1
- package/dist/cdp/protocol.js +0 -6
- package/dist/cdp/protocol.js.map +1 -1
- package/dist/cdp/schema.d.ts.map +1 -1
- package/dist/cdp/schema.js +0 -2
- package/dist/cdp/schema.js.map +1 -1
- package/dist/commands/__tests__/machineReadableHelp.contract.test.d.ts +12 -0
- package/dist/commands/__tests__/machineReadableHelp.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/machineReadableHelp.contract.test.js +102 -0
- package/dist/commands/__tests__/machineReadableHelp.contract.test.js.map +1 -0
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js +9 -24
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +0 -13
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +22 -7
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.d.ts.map +1 -1
- package/dist/commands/details.js +0 -5
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/dom/a11y.d.ts.map +1 -1
- package/dist/commands/dom/a11y.js +51 -15
- package/dist/commands/dom/a11y.js.map +1 -1
- package/dist/commands/dom/evalHelpers.d.ts +1 -1
- package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
- package/dist/commands/dom/evalHelpers.js +3 -7
- package/dist/commands/dom/evalHelpers.js.map +1 -1
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +30 -11
- package/dist/commands/dom/formFillHelpers.js.map +1 -1
- package/dist/commands/dom/formInteraction.d.ts.map +1 -1
- package/dist/commands/dom/formInteraction.js +0 -5
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/formSubmitHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formSubmitHelpers.js +0 -13
- package/dist/commands/dom/formSubmitHelpers.js.map +1 -1
- package/dist/commands/dom/helpers.d.ts.map +1 -1
- package/dist/commands/dom/helpers.js +0 -22
- package/dist/commands/dom/helpers.js.map +1 -1
- package/dist/commands/dom/index.d.ts.map +1 -1
- package/dist/commands/dom/index.js +85 -19
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/dom/reactEventHelpers.d.ts +3 -3
- package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
- package/dist/commands/dom/reactEventHelpers.js +3 -31
- package/dist/commands/dom/reactEventHelpers.js.map +1 -1
- package/dist/commands/machineReadableHelp.d.ts +48 -0
- package/dist/commands/machineReadableHelp.d.ts.map +1 -1
- package/dist/commands/machineReadableHelp.js +80 -0
- package/dist/commands/machineReadableHelp.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js +185 -10
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +17 -14
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +2 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +3 -8
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/__tests__/validation.unit.test.d.ts +7 -0
- package/dist/commands/shared/__tests__/validation.unit.test.d.ts.map +1 -0
- package/dist/commands/shared/__tests__/validation.unit.test.js +141 -0
- package/dist/commands/shared/__tests__/validation.unit.test.js.map +1 -0
- package/dist/commands/shared/startHelpers.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.js +0 -10
- package/dist/commands/shared/startHelpers.js.map +1 -1
- package/dist/commands/shared/validation.d.ts +19 -0
- package/dist/commands/shared/validation.d.ts.map +1 -1
- package/dist/commands/shared/validation.js +110 -7
- package/dist/commands/shared/validation.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +0 -6
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +0 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +2 -11
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.js +6 -7
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +0 -5
- package/dist/commands.js.map +1 -1
- package/dist/connection/cdp.d.ts.map +1 -1
- package/dist/connection/cdp.js +9 -12
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/diagnostics.d.ts.map +1 -1
- package/dist/connection/diagnostics.js +7 -4
- package/dist/connection/diagnostics.js.map +1 -1
- package/dist/connection/pageReadiness.d.ts.map +1 -1
- package/dist/connection/pageReadiness.js +0 -1
- package/dist/connection/pageReadiness.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/commandRegistry.contract.test.js +259 -0
- package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
- package/dist/daemon/handlers/BaseHandler.d.ts +75 -0
- package/dist/daemon/handlers/BaseHandler.d.ts.map +1 -0
- package/dist/daemon/handlers/BaseHandler.js +103 -0
- package/dist/daemon/handlers/BaseHandler.js.map +1 -0
- package/dist/daemon/handlers/CommandHandlers.d.ts +3 -4
- package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/CommandHandlers.js +14 -52
- package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
- package/dist/daemon/handlers/QueryHandlers.d.ts +8 -6
- package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/QueryHandlers.js +42 -94
- package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
- package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/SessionHandlers.js +0 -15
- package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
- package/dist/daemon/handlers/requestHandlers.d.ts +5 -1
- package/dist/daemon/handlers/requestHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/requestHandlers.js +7 -2
- package/dist/daemon/handlers/requestHandlers.js.map +1 -1
- package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
- package/dist/daemon/handlers/responseHandler.js +19 -8
- package/dist/daemon/handlers/responseHandler.js.map +1 -1
- package/dist/daemon/ipcServer.d.ts.map +1 -1
- package/dist/daemon/ipcServer.js +4 -11
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +0 -18
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/lifecycle/cdpSetup.d.ts.map +1 -1
- package/dist/daemon/lifecycle/cdpSetup.js +0 -4
- package/dist/daemon/lifecycle/cdpSetup.js.map +1 -1
- package/dist/daemon/lifecycle/chromeConnection.js +0 -1
- package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.js +0 -3
- package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.js +0 -7
- package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
- package/dist/daemon/lifecycle/workerIpc.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerIpc.js +0 -1
- package/dist/daemon/lifecycle/workerIpc.js.map +1 -1
- package/dist/daemon/patternDefinitions.d.ts +47 -0
- package/dist/daemon/patternDefinitions.d.ts.map +1 -0
- package/dist/daemon/patternDefinitions.js +71 -0
- package/dist/daemon/patternDefinitions.js.map +1 -0
- package/dist/daemon/patternDetector.d.ts +60 -0
- package/dist/daemon/patternDetector.d.ts.map +1 -0
- package/dist/daemon/patternDetector.js +74 -0
- package/dist/daemon/patternDetector.js.map +1 -0
- package/dist/daemon/server/JsonlParser.d.ts.map +1 -1
- package/dist/daemon/server/JsonlParser.js +0 -2
- package/dist/daemon/server/JsonlParser.js.map +1 -1
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +0 -15
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker/__tests__/PatternDetector.unit.test.d.ts +11 -0
- package/dist/daemon/worker/__tests__/PatternDetector.unit.test.d.ts.map +1 -0
- package/dist/daemon/worker/__tests__/PatternDetector.unit.test.js +136 -0
- package/dist/daemon/worker/__tests__/PatternDetector.unit.test.js.map +1 -0
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js +46 -2
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/daemon/worker/plugins.d.ts.map +1 -1
- package/dist/daemon/worker/plugins.js +0 -3
- package/dist/daemon/worker/plugins.js.map +1 -1
- package/dist/daemon/worker.js +0 -9
- package/dist/daemon/worker.js.map +1 -1
- package/dist/daemon.js +0 -2
- package/dist/daemon.js.map +1 -1
- package/dist/index.js +0 -14
- package/dist/index.js.map +1 -1
- package/dist/ipc/client.d.ts +47 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +51 -0
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/index.d.ts.map +1 -1
- package/dist/ipc/index.js +0 -6
- package/dist/ipc/index.js.map +1 -1
- package/dist/ipc/protocol/commands.d.ts +46 -0
- package/dist/ipc/protocol/commands.d.ts.map +1 -1
- package/dist/ipc/protocol/commands.js +8 -0
- package/dist/ipc/protocol/commands.js.map +1 -1
- package/dist/ipc/session/queries.d.ts +26 -2
- package/dist/ipc/session/queries.d.ts.map +1 -1
- package/dist/ipc/transport/index.d.ts.map +1 -1
- package/dist/ipc/transport/index.js +0 -1
- package/dist/ipc/transport/index.js.map +1 -1
- package/dist/ipc/transport/jsonl.d.ts.map +1 -1
- package/dist/ipc/transport/jsonl.js +0 -1
- package/dist/ipc/transport/jsonl.js.map +1 -1
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +2 -20
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/queryCache.d.ts +35 -0
- package/dist/session/queryCache.d.ts.map +1 -0
- package/dist/session/queryCache.js +83 -0
- package/dist/session/queryCache.js.map +1 -0
- package/dist/telemetry/__tests__/filters.unit.test.js +119 -1
- package/dist/telemetry/__tests__/filters.unit.test.js.map +1 -1
- package/dist/telemetry/__tests__/network.contract.test.js +114 -0
- package/dist/telemetry/__tests__/network.contract.test.js.map +1 -1
- package/dist/telemetry/a11y.d.ts +8 -5
- package/dist/telemetry/a11y.d.ts.map +1 -1
- package/dist/telemetry/a11y.js +34 -19
- package/dist/telemetry/a11y.js.map +1 -1
- package/dist/telemetry/dom.js +4 -4
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/telemetry/filters.d.ts +17 -0
- package/dist/telemetry/filters.d.ts.map +1 -1
- package/dist/telemetry/filters.js +25 -0
- package/dist/telemetry/filters.js.map +1 -1
- package/dist/telemetry/har/__tests__/builder.unit.test.d.ts +8 -0
- package/dist/telemetry/har/__tests__/builder.unit.test.d.ts.map +1 -0
- package/dist/telemetry/har/__tests__/builder.unit.test.js +694 -0
- package/dist/telemetry/har/__tests__/builder.unit.test.js.map +1 -0
- package/dist/telemetry/har/builder.d.ts +43 -0
- package/dist/telemetry/har/builder.d.ts.map +1 -0
- package/dist/telemetry/har/builder.js +440 -0
- package/dist/telemetry/har/builder.js.map +1 -0
- package/dist/telemetry/har/types.d.ts +290 -0
- package/dist/telemetry/har/types.d.ts.map +1 -0
- package/dist/telemetry/har/types.js +7 -0
- package/dist/telemetry/har/types.js.map +1 -0
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +37 -4
- package/dist/telemetry/network.js.map +1 -1
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/OutputBuilder.d.ts.map +1 -1
- package/dist/ui/OutputBuilder.js +0 -8
- package/dist/ui/OutputBuilder.js.map +1 -1
- package/dist/ui/errors/CommandError.d.ts +5 -1
- package/dist/ui/errors/CommandError.d.ts.map +1 -1
- package/dist/ui/errors/CommandError.js +0 -1
- package/dist/ui/errors/CommandError.js.map +1 -1
- package/dist/ui/errors/index.d.ts.map +1 -1
- package/dist/ui/errors/index.js +0 -2
- package/dist/ui/errors/index.js.map +1 -1
- package/dist/ui/formatters/__tests__/preview.unit.test.d.ts +13 -0
- package/dist/ui/formatters/__tests__/preview.unit.test.d.ts.map +1 -0
- package/dist/ui/formatters/__tests__/preview.unit.test.js +180 -0
- package/dist/ui/formatters/__tests__/preview.unit.test.js.map +1 -0
- package/dist/ui/formatters/details.d.ts.map +1 -1
- package/dist/ui/formatters/details.js +1 -0
- package/dist/ui/formatters/details.js.map +1 -1
- package/dist/ui/formatters/dom.d.ts.map +1 -1
- package/dist/ui/formatters/dom.js +5 -5
- package/dist/ui/formatters/dom.js.map +1 -1
- package/dist/ui/formatters/helpFormatters.d.ts +41 -0
- package/dist/ui/formatters/helpFormatters.d.ts.map +1 -0
- package/dist/ui/formatters/helpFormatters.js +80 -0
- package/dist/ui/formatters/helpFormatters.js.map +1 -0
- package/dist/ui/formatters/index.d.ts +1 -0
- package/dist/ui/formatters/index.d.ts.map +1 -1
- package/dist/ui/formatters/index.js +1 -0
- package/dist/ui/formatters/index.js.map +1 -1
- package/dist/ui/formatters/networkHeaders.d.ts +14 -0
- package/dist/ui/formatters/networkHeaders.d.ts.map +1 -0
- package/dist/ui/formatters/networkHeaders.js +47 -0
- package/dist/ui/formatters/networkHeaders.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +102 -33
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/formatters/sessionFormatters.d.ts +58 -0
- package/dist/ui/formatters/sessionFormatters.d.ts.map +1 -0
- package/dist/ui/formatters/sessionFormatters.js +116 -0
- package/dist/ui/formatters/sessionFormatters.js.map +1 -0
- package/dist/ui/formatters/status.d.ts.map +1 -1
- package/dist/ui/formatters/status.js +0 -11
- package/dist/ui/formatters/status.js.map +1 -1
- package/dist/ui/formatting.d.ts.map +1 -1
- package/dist/ui/formatting.js +0 -6
- package/dist/ui/formatting.js.map +1 -1
- package/dist/ui/logging/logger.d.ts +1 -1
- package/dist/ui/logging/logger.d.ts.map +1 -1
- package/dist/ui/logging/logger.js.map +1 -1
- package/dist/ui/messages/chrome.d.ts.map +1 -1
- package/dist/ui/messages/chrome.js +0 -6
- package/dist/ui/messages/chrome.js.map +1 -1
- package/dist/ui/messages/commands.d.ts +9 -0
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +11 -13
- package/dist/ui/messages/commands.js.map +1 -1
- package/dist/ui/messages/debug.d.ts.map +1 -1
- package/dist/ui/messages/debug.js +0 -6
- package/dist/ui/messages/debug.js.map +1 -1
- package/dist/ui/messages/errors.d.ts +53 -0
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +59 -0
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/ui/messages/hints.d.ts +33 -0
- package/dist/ui/messages/hints.d.ts.map +1 -0
- package/dist/ui/messages/hints.js +37 -0
- package/dist/ui/messages/hints.js.map +1 -0
- package/dist/ui/messages/internal.d.ts.map +1 -1
- package/dist/ui/messages/internal.js +0 -3
- package/dist/ui/messages/internal.js.map +1 -1
- package/dist/ui/messages/preview.d.ts.map +1 -1
- package/dist/ui/messages/preview.js +0 -12
- package/dist/ui/messages/preview.js.map +1 -1
- package/dist/ui/messages/session.d.ts +11 -1
- package/dist/ui/messages/session.d.ts.map +1 -1
- package/dist/ui/messages/session.js +14 -24
- package/dist/ui/messages/session.js.map +1 -1
- package/dist/utils/atomicFile.d.ts.map +1 -1
- package/dist/utils/atomicFile.js +9 -6
- package/dist/utils/atomicFile.js.map +1 -1
- package/dist/utils/decisionTrees.d.ts +54 -0
- package/dist/utils/decisionTrees.d.ts.map +1 -0
- package/dist/utils/decisionTrees.js +171 -0
- package/dist/utils/decisionTrees.js.map +1 -0
- package/dist/utils/exitCodes.d.ts.map +1 -1
- package/dist/utils/exitCodes.js +0 -2
- package/dist/utils/exitCodes.js.map +1 -1
- package/dist/utils/taskMappings.d.ts +47 -0
- package/dist/utils/taskMappings.d.ts.map +1 -0
- package/dist/utils/taskMappings.js +118 -0
- package/dist/utils/taskMappings.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +0 -3
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +0 -1
- package/dist/utils/version.js.map +1 -1
- 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;
|
|
1
|
+
{"version":3,"file":"machineReadableHelp.d.ts","sourceRoot":"","sources":["../../src/commands/machineReadableHelp.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA;;GAEG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
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":"
|
|
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"}
|
package/dist/commands/network.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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":"
|
|
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;
|
|
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"}
|
package/dist/commands/peek.js
CHANGED
|
@@ -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 (
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
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;
|
|
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
|
-
|
|
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
|
}
|