@swmansion/argent 0.14.1-next.0 → 0.14.1-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -20
- package/dist/cli-cmds.mjs +59 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +2 -2
- package/dist/installer.mjs +43 -0
- package/dist/mcp-server.mjs +43 -0
- package/dist/tool-server.cjs +1380 -296
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,18 +9,32 @@
|
|
|
9
9
|
[](https://swm-delivery.com/www/delivery/ck-slug.php?zoneid=zone-gh-argent-2&n=1)
|
|
10
10
|
[](https://swm-delivery.com/www/delivery/ck-slug.php?zoneid=zone-gh-argent-3&n=1)
|
|
11
11
|
|
|
12
|
-
**[Argent](https://argent.swmansion.com)** is an **agentic toolkit** that gives your AI assistant direct access to iOS Simulators and Android
|
|
12
|
+
**[Argent](https://argent.swmansion.com)** is an **agentic toolkit** that gives your AI assistant direct access to iOS Simulators, Android emulators and physical devices, TVs (Apple TV, Android TV, Fire TV) and Electron/Chromium desktop and web apps. Ask it to tap a button, run a profiler or reproduce an issue manually - all from within your CLI, without switching context.
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
npx @swmansion/argent init
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
## Supported platforms
|
|
19
|
+
|
|
20
|
+
Argent drives a growing set of targets through a single toolkit, each with the right interaction model - touch, remote or mouse:
|
|
21
|
+
|
|
22
|
+
| Platform | Targets | Interaction |
|
|
23
|
+
| ----------------- | ----------------------------------------------------------------------- | ---------------- |
|
|
24
|
+
| **iOS** | Simulators | Touch / gesture |
|
|
25
|
+
| **Android** | Emulators (AVDs) and physical devices over adb | Touch / gesture |
|
|
26
|
+
| **TV** | Apple TV (tvOS), Android TV / Google TV, Amazon Fire TV (Vega) | D-pad / remote |
|
|
27
|
+
| **Desktop & web** | Electron and Chromium apps (incl. React Native Web / Expo web) over CDP | Mouse / keyboard |
|
|
28
|
+
|
|
18
29
|
## Capabilities
|
|
19
30
|
|
|
20
|
-
- **Autonomous
|
|
21
|
-
- **UI interaction** - Give your agent full control toolkit - tapping, swiping, pinching, typing, gestures
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
31
|
+
- **Autonomous mobile, TV and desktop development** - Allow your agent to work with iOS, Android, TV and Electron/web apps on its own - let it build, open, interact with the app and debug it. Ask for reproducing issues, testing features manually, profiling your app and much more, without ever interrupting your work.
|
|
32
|
+
- **UI interaction** - Give your agent the full control toolkit - tapping, swiping, pinching, typing, gestures and hardware buttons on mobile; the directional remote on TV; mouse, scroll and drag on desktop/web. Let it navigate your app exactly as a user would, without lifting a finger.
|
|
33
|
+
- **Record & replay flows** - Capture a sequence of interactions once and let your agent replay it deterministically, so manual repros and smoke tests become repeatable.
|
|
34
|
+
- **Visual regression** - Diff two screenshots (or a saved baseline against a live capture) with OCR- and font-aware comparison to catch unintended UI changes.
|
|
35
|
+
- **Profiling with batteries included** - Argent can perform and analyze React Native (Hermes), React DevTools and native (Xcode Instruments / Android Perfetto) profiling sessions - down to fiber renders, CPU hotspots and cross-correlated commit-vs-hang reports. Get comprehensive summaries and ask to optimise your app where you find fit.
|
|
36
|
+
- **Debugging and diagnostics** - Let your agent inspect logs, capture network traffic (JS `fetch` and native), evaluate JS in the running app, walk the native UIKit and React component trees, and reproduce failing states - so you can jump straight to the fix.
|
|
37
|
+
- **Desktop & web control** - For Electron and Chromium apps your agent can drive tabs, read and write cookies and storage, walk the DOM and inspect network over the Chrome DevTools Protocol.
|
|
24
38
|
- **React Native out of the box** - Argent works with React Native apps natively, so your agent can build, launch, and iterate on your RN project the same way it would any native app - no extra setup required.
|
|
25
39
|
|
|
26
40
|
> **Tip:** Once installed, ask your assistant _"What can Argent do?"_ - it will walk you through all capabilities available.
|
|
@@ -37,8 +51,10 @@ npx @swmansion/argent init
|
|
|
37
51
|
#### Prerequisites
|
|
38
52
|
|
|
39
53
|
- **Node.js 20.11** or later
|
|
40
|
-
- For iOS: macOS with **Xcode** installed
|
|
41
|
-
- For Android: **Android SDK Platform Tools** (`adb`) on `PATH`, and the **Android Emulator** package if you want to boot AVDs from Argent. Create AVDs via Android Studio or `avdmanager`.
|
|
54
|
+
- For iOS / tvOS: macOS with **Xcode** installed (Apple TV uses tvOS simulators — Xcode downloads the tvOS runtime on demand)
|
|
55
|
+
- For Android / Android TV: **Android SDK Platform Tools** (`adb`) on `PATH`, and the **Android Emulator** package if you want to boot AVDs from Argent. Create AVDs via Android Studio or `avdmanager`.
|
|
56
|
+
- For Fire TV (Vega): the **Vega SDK** (`vega` CLI) on `PATH`
|
|
57
|
+
- For Electron / Chromium: nothing extra to control an already-running app - just launch it with `--remote-debugging-port`, or let Argent spawn your Electron app for you
|
|
42
58
|
|
|
43
59
|
##### Linux host: extra prerequisites for Android emulators
|
|
44
60
|
|
|
@@ -100,18 +116,24 @@ argent init
|
|
|
100
116
|
|
|
101
117
|
## CLI Reference
|
|
102
118
|
|
|
103
|
-
| Command | Description
|
|
104
|
-
| ------------------ |
|
|
105
|
-
| `argent init` | Install globally and configure MCP in the current workspace
|
|
106
|
-
| `argent install` | Alias for `init` command
|
|
107
|
-
| `argent update` | Pull the latest version and refresh workspace configuration
|
|
108
|
-
| `argent remove` | Unregister the MCP server and uninstall the package
|
|
109
|
-
| `argent uninstall` | Alias for `remove` command
|
|
110
|
-
| `argent mcp` | Start MCP server instance, used internally by agent
|
|
111
|
-
| `argent
|
|
112
|
-
| `argent
|
|
113
|
-
| `argent
|
|
114
|
-
| `argent
|
|
119
|
+
| Command | Description |
|
|
120
|
+
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
121
|
+
| `argent init` | Install globally and configure MCP in the current workspace |
|
|
122
|
+
| `argent install` | Alias for `init` command |
|
|
123
|
+
| `argent update` | Pull the latest version and refresh workspace configuration |
|
|
124
|
+
| `argent remove` | Unregister the MCP server and uninstall the package |
|
|
125
|
+
| `argent uninstall` | Alias for `remove` command |
|
|
126
|
+
| `argent mcp` | Start MCP server instance, used internally by agent |
|
|
127
|
+
| `argent tools` | List tools exposed by the tool-server (`describe <name>` for details) |
|
|
128
|
+
| `argent run` | Invoke a tool by name |
|
|
129
|
+
| `argent server` | Manage the shared tool-server: `start` / `status` / `stop` / `logs` |
|
|
130
|
+
| `argent lens` | Open Argent Lens bound to a fresh coding-agent session — Claude by default, `--agent` selects codex/gemini/opencode/cursor (macOS; behind the `argent-lens` flag — run `argent enable argent-lens` first) |
|
|
131
|
+
| `argent link` | Route client requests to a remote tool-server |
|
|
132
|
+
| `argent unlink` | Remove the persisted remote tool-server link |
|
|
133
|
+
| `argent enable` | Enable a predefined feature flag (`--scope project` for project-local) |
|
|
134
|
+
| `argent disable` | Disable a feature flag (`--scope project` for project-local) |
|
|
135
|
+
| `argent flags` | List available feature flags and their state |
|
|
136
|
+
| `argent telemetry` | Manage anonymous telemetry: `status` / `enable` / `disable` |
|
|
115
137
|
|
|
116
138
|
## Supported Editors
|
|
117
139
|
|
|
@@ -123,7 +145,7 @@ argent init
|
|
|
123
145
|
| Cursor | `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global) |
|
|
124
146
|
| VS Code | `.vscode/mcp.json` |
|
|
125
147
|
| Windsurf | `~/.codeium/windsurf/mcp_config.json` (global) |
|
|
126
|
-
| Zed | `.zed/settings.json`
|
|
148
|
+
| Zed | `.zed/settings.json` (project) or `~/.config/zed/settings.json` (global) |
|
|
127
149
|
| Gemini CLI | `.gemini/settings.json` |
|
|
128
150
|
| Codex CLI | `.codex/config.toml` (project) or `~/.codex/config.toml` (global) |
|
|
129
151
|
| Hermes | `~/.hermes/config.yaml` (global) |
|
package/dist/cli-cmds.mjs
CHANGED
|
@@ -5839,6 +5839,14 @@ var FAILURE_CODES = {
|
|
|
5839
5839
|
UNINSTALL_UNCLASSIFIED_FAILED: "UNINSTALL_UNCLASSIFIED_FAILED",
|
|
5840
5840
|
VEGA_CLI_COMMAND_FAILED: "VEGA_CLI_COMMAND_FAILED",
|
|
5841
5841
|
VEGA_INPUT_UNAVAILABLE: "VEGA_INPUT_UNAVAILABLE",
|
|
5842
|
+
VEGA_DEVICE_NOT_FOUND: "VEGA_DEVICE_NOT_FOUND",
|
|
5843
|
+
VEGA_DEVICE_NOT_REGISTERED: "VEGA_DEVICE_NOT_REGISTERED",
|
|
5844
|
+
VEGA_MULTIPLE_DEVICES: "VEGA_MULTIPLE_DEVICES",
|
|
5845
|
+
VEGA_BOOT_TIMEOUT: "VEGA_BOOT_TIMEOUT",
|
|
5846
|
+
VEGA_IMAGE_NOT_FOUND: "VEGA_IMAGE_NOT_FOUND",
|
|
5847
|
+
VEGA_ALREADY_RUNNING: "VEGA_ALREADY_RUNNING",
|
|
5848
|
+
VEGA_SCREENSHOT_FAILED: "VEGA_SCREENSHOT_FAILED",
|
|
5849
|
+
VEGA_TEXT_INVALID: "VEGA_TEXT_INVALID",
|
|
5842
5850
|
ANDROID_ADB_NOT_FOUND: "ANDROID_ADB_NOT_FOUND",
|
|
5843
5851
|
ANDROID_EMULATOR_NOT_FOUND: "ANDROID_EMULATOR_NOT_FOUND",
|
|
5844
5852
|
ANDROID_ADB_COMMAND_FAILED: "ANDROID_ADB_COMMAND_FAILED",
|
|
@@ -5851,6 +5859,7 @@ var FAILURE_CODES = {
|
|
|
5851
5859
|
SIMULATOR_NON_JSON_RESPONSE: "SIMULATOR_NON_JSON_RESPONSE",
|
|
5852
5860
|
SIMULATOR_HTTP_ERROR_RESPONSE: "SIMULATOR_HTTP_ERROR_RESPONSE",
|
|
5853
5861
|
SIMULATOR_MISSING_RESPONSE_FIELDS: "SIMULATOR_MISSING_RESPONSE_FIELDS",
|
|
5862
|
+
SIMULATOR_SCREENSHOT_FAILED: "SIMULATOR_SCREENSHOT_FAILED",
|
|
5854
5863
|
SIMULATOR_SERVER_FACTORY_OPTIONS_MISSING: "SIMULATOR_SERVER_FACTORY_OPTIONS_MISSING",
|
|
5855
5864
|
SIMULATOR_SERVER_DEVICE_ID_INVALID: "SIMULATOR_SERVER_DEVICE_ID_INVALID",
|
|
5856
5865
|
SIMULATOR_SERVER_READY_EXITED: "SIMULATOR_SERVER_READY_EXITED",
|
|
@@ -5904,6 +5913,7 @@ var FAILURE_CODES = {
|
|
|
5904
5913
|
ANDROID_SCREEN_SIZE_PARSE_FAILED: "ANDROID_SCREEN_SIZE_PARSE_FAILED",
|
|
5905
5914
|
ANDROID_SCREEN_SIZE_NON_POSITIVE: "ANDROID_SCREEN_SIZE_NON_POSITIVE",
|
|
5906
5915
|
ANDROID_UIAUTOMATOR_PARSE_FAILED: "ANDROID_UIAUTOMATOR_PARSE_FAILED",
|
|
5916
|
+
ANDROID_UIAUTOMATOR_CAPTURE_FAILED: "ANDROID_UIAUTOMATOR_CAPTURE_FAILED",
|
|
5907
5917
|
DEBUGGER_METRO_NOT_RUNNING: "DEBUGGER_METRO_NOT_RUNNING",
|
|
5908
5918
|
DEBUGGER_METRO_PROJECT_ROOT_MISSING: "DEBUGGER_METRO_PROJECT_ROOT_MISSING",
|
|
5909
5919
|
DEBUGGER_METRO_NO_TARGETS: "DEBUGGER_METRO_NO_TARGETS",
|
|
@@ -5948,8 +5958,19 @@ var FAILURE_CODES = {
|
|
|
5948
5958
|
NATIVE_PROFILER_XCTRACE_READY_EXITED: "NATIVE_PROFILER_XCTRACE_READY_EXITED",
|
|
5949
5959
|
NATIVE_PROFILER_XCTRACE_PROCESS_ERROR: "NATIVE_PROFILER_XCTRACE_PROCESS_ERROR",
|
|
5950
5960
|
NATIVE_PROFILER_XCTRACE_READY_TIMEOUT: "NATIVE_PROFILER_XCTRACE_READY_TIMEOUT",
|
|
5961
|
+
NATIVE_PROFILER_TRACE_TEMPLATE_MISSING: "NATIVE_PROFILER_TRACE_TEMPLATE_MISSING",
|
|
5951
5962
|
NATIVE_PROFILER_NO_ACTIVE_SESSION: "NATIVE_PROFILER_NO_ACTIVE_SESSION",
|
|
5963
|
+
NATIVE_PROFILER_APP_PROCESS_NOT_FOUND: "NATIVE_PROFILER_APP_PROCESS_NOT_FOUND",
|
|
5964
|
+
NATIVE_PROFILER_NO_EXPORTED_TRACE: "NATIVE_PROFILER_NO_EXPORTED_TRACE",
|
|
5965
|
+
// Android perfetto start-failure modes — mirror the iOS xctrace set so a
|
|
5966
|
+
// failed recording start is classified rather than falling through to the
|
|
5967
|
+
// generic tool-execution bucket.
|
|
5968
|
+
NATIVE_PROFILER_PERFETTO_PROCESS_ERROR: "NATIVE_PROFILER_PERFETTO_PROCESS_ERROR",
|
|
5969
|
+
NATIVE_PROFILER_PERFETTO_READY_TIMEOUT: "NATIVE_PROFILER_PERFETTO_READY_TIMEOUT",
|
|
5970
|
+
NATIVE_PROFILER_PERFETTO_READY_EXITED: "NATIVE_PROFILER_PERFETTO_READY_EXITED",
|
|
5952
5971
|
FLOW_PROJECT_ROOT_REQUIRED: "FLOW_PROJECT_ROOT_REQUIRED",
|
|
5972
|
+
FLOW_PROJECT_ROOT_INVALID: "FLOW_PROJECT_ROOT_INVALID",
|
|
5973
|
+
FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
|
|
5953
5974
|
FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
|
|
5954
5975
|
FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
|
|
5955
5976
|
FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
|
|
@@ -5957,6 +5978,27 @@ var FAILURE_CODES = {
|
|
|
5957
5978
|
PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
|
|
5958
5979
|
PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
|
|
5959
5980
|
PROFILER_NATIVE_TRACE_MISSING: "PROFILER_NATIVE_TRACE_MISSING",
|
|
5981
|
+
PROFILER_NATIVE_METADATA_MISSING: "PROFILER_NATIVE_METADATA_MISSING",
|
|
5982
|
+
PROFILER_NATIVE_METADATA_INVALID: "PROFILER_NATIVE_METADATA_INVALID",
|
|
5983
|
+
CHROMIUM_CDP_UNREACHABLE: "CHROMIUM_CDP_UNREACHABLE",
|
|
5984
|
+
CHROMIUM_CDP_NO_PAGE_TARGET: "CHROMIUM_CDP_NO_PAGE_TARGET",
|
|
5985
|
+
CHROMIUM_CDP_INVALID_RESPONSE: "CHROMIUM_CDP_INVALID_RESPONSE",
|
|
5986
|
+
CHROMIUM_DEVICE_ID_INVALID: "CHROMIUM_DEVICE_ID_INVALID",
|
|
5987
|
+
CHROMIUM_PARAM_INVALID: "CHROMIUM_PARAM_INVALID",
|
|
5988
|
+
CHROMIUM_INPUT_INVALID: "CHROMIUM_INPUT_INVALID",
|
|
5989
|
+
CHROMIUM_VIEWPORT_READ_FAILED: "CHROMIUM_VIEWPORT_READ_FAILED",
|
|
5990
|
+
CHROMIUM_SCREENSHOT_FAILED: "CHROMIUM_SCREENSHOT_FAILED",
|
|
5991
|
+
CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
|
|
5992
|
+
CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
|
|
5993
|
+
CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
|
|
5994
|
+
CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
|
|
5995
|
+
CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
|
|
5996
|
+
CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
|
|
5997
|
+
CHROMIUM_ELECTRON_CDP_TIMEOUT: "CHROMIUM_ELECTRON_CDP_TIMEOUT",
|
|
5998
|
+
CHROMIUM_ELECTRON_EXITED_BEFORE_READY: "CHROMIUM_ELECTRON_EXITED_BEFORE_READY",
|
|
5999
|
+
KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
|
|
6000
|
+
KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
|
|
6001
|
+
SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
|
|
5960
6002
|
BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
|
|
5961
6003
|
BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
|
|
5962
6004
|
BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
|
|
@@ -5995,6 +6037,7 @@ var FAILURE_COMMANDS = [
|
|
|
5995
6037
|
"ax_service",
|
|
5996
6038
|
"simulator_server",
|
|
5997
6039
|
"cdp",
|
|
6040
|
+
"electron",
|
|
5998
6041
|
"npm",
|
|
5999
6042
|
"npx",
|
|
6000
6043
|
"unknown"
|
|
@@ -7289,11 +7332,15 @@ function isScalarType(type) {
|
|
|
7289
7332
|
}
|
|
7290
7333
|
function coerceScalar(raw, type, field) {
|
|
7291
7334
|
if (type === "number") {
|
|
7335
|
+
if (raw.trim() === "")
|
|
7336
|
+
throw new FlagParseException(`--${field} expected a number, got "${raw}"`);
|
|
7292
7337
|
const n2 = Number(raw);
|
|
7293
7338
|
if (Number.isNaN(n2)) throw new FlagParseException(`--${field} expected a number, got "${raw}"`);
|
|
7294
7339
|
return n2;
|
|
7295
7340
|
}
|
|
7296
7341
|
if (type === "integer") {
|
|
7342
|
+
if (raw.trim() === "")
|
|
7343
|
+
throw new FlagParseException(`--${field} expected an integer, got "${raw}"`);
|
|
7297
7344
|
const n2 = Number(raw);
|
|
7298
7345
|
if (!Number.isInteger(n2))
|
|
7299
7346
|
throw new FlagParseException(`--${field} expected an integer, got "${raw}"`);
|
|
@@ -7322,6 +7369,7 @@ function parseFlags(argv, schema) {
|
|
|
7322
7369
|
let helpRequested = false;
|
|
7323
7370
|
let rawArgs = null;
|
|
7324
7371
|
const seenArrayFields = /* @__PURE__ */ new Set();
|
|
7372
|
+
const jsonFields = /* @__PURE__ */ new Set();
|
|
7325
7373
|
function takeNext(i2, flag) {
|
|
7326
7374
|
if (i2 + 1 >= argv.length) {
|
|
7327
7375
|
throw new FlagParseException(`--${flag} requires a value`);
|
|
@@ -7360,7 +7408,13 @@ function parseFlags(argv, schema) {
|
|
|
7360
7408
|
if (flag.endsWith("-json")) {
|
|
7361
7409
|
const fieldName = flag.slice(0, -"-json".length);
|
|
7362
7410
|
const { value: value2, nextIndex: nextIndex2 } = inlineValue !== void 0 ? { value: inlineValue, nextIndex: i2 } : takeNext(i2, flag);
|
|
7411
|
+
if (seenArrayFields.has(fieldName)) {
|
|
7412
|
+
throw new FlagParseException(
|
|
7413
|
+
`--${fieldName} and --${flag} cannot be mixed for the same field; pass it entirely as --${flag} '<json>' or --args '<json>'`
|
|
7414
|
+
);
|
|
7415
|
+
}
|
|
7363
7416
|
args[fieldName] = parseJsonOrThrow(value2, `--${flag}`);
|
|
7417
|
+
jsonFields.add(fieldName);
|
|
7364
7418
|
i2 = nextIndex2;
|
|
7365
7419
|
continue;
|
|
7366
7420
|
}
|
|
@@ -7392,6 +7446,11 @@ function parseFlags(argv, schema) {
|
|
|
7392
7446
|
);
|
|
7393
7447
|
}
|
|
7394
7448
|
const { value: value2, nextIndex: nextIndex2 } = inlineValue !== void 0 ? { value: inlineValue, nextIndex: i2 } : takeNext(i2, flag);
|
|
7449
|
+
if (jsonFields.has(flag)) {
|
|
7450
|
+
throw new FlagParseException(
|
|
7451
|
+
`--${flag} and --${flag}-json cannot be mixed for the same field; pass it entirely as --${flag}-json '<json>' or --args '<json>'`
|
|
7452
|
+
);
|
|
7453
|
+
}
|
|
7395
7454
|
const coerced = coerceScalar(value2, itemType, flag);
|
|
7396
7455
|
if (!seenArrayFields.has(flag)) {
|
|
7397
7456
|
args[flag] = [coerced];
|
package/dist/cli.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* argent run <tool> [flags] Invoke a tool by name
|
|
20
20
|
* argent server start [flags] Spawn a long-lived tool-server (foreground by default)
|
|
21
21
|
* argent server status|stop|logs Manage the shared tool-server
|
|
22
|
-
* argent lens Open Argent Lens bound to a fresh
|
|
22
|
+
* argent lens Open Argent Lens bound to a fresh coding-agent session (macOS)
|
|
23
23
|
* argent link [flags] Route client requests to a remote tool-server
|
|
24
24
|
* argent unlink Remove the persisted remote link
|
|
25
25
|
* argent enable <flag> Enable a feature flag (global by default)
|
package/dist/cli.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* argent run <tool> [flags] Invoke a tool by name
|
|
20
20
|
* argent server start [flags] Spawn a long-lived tool-server (foreground by default)
|
|
21
21
|
* argent server status|stop|logs Manage the shared tool-server
|
|
22
|
-
* argent lens Open Argent Lens bound to a fresh
|
|
22
|
+
* argent lens Open Argent Lens bound to a fresh coding-agent session (macOS)
|
|
23
23
|
* argent link [flags] Route client requests to a remote tool-server
|
|
24
24
|
* argent unlink Remove the persisted remote link
|
|
25
25
|
* argent enable <flag> Enable a feature flag (global by default)
|
|
@@ -63,7 +63,7 @@ Commands:
|
|
|
63
63
|
tools List tools exposed by the tool-server
|
|
64
64
|
run Invoke a tool by name (use \`argent run <tool> --help\` for flags)
|
|
65
65
|
server Manage the shared tool-server (start / status / stop / logs)
|
|
66
|
-
lens Open Argent Lens bound to a fresh
|
|
66
|
+
lens Open Argent Lens bound to a fresh coding-agent session (macOS)
|
|
67
67
|
link Route client requests to a remote tool-server
|
|
68
68
|
unlink Remove the persisted remote tool-server link
|
|
69
69
|
enable Enable a feature flag (global by default, --scope project for project)
|
package/dist/installer.mjs
CHANGED
|
@@ -16060,6 +16060,14 @@ var FAILURE_CODES = {
|
|
|
16060
16060
|
UNINSTALL_UNCLASSIFIED_FAILED: "UNINSTALL_UNCLASSIFIED_FAILED",
|
|
16061
16061
|
VEGA_CLI_COMMAND_FAILED: "VEGA_CLI_COMMAND_FAILED",
|
|
16062
16062
|
VEGA_INPUT_UNAVAILABLE: "VEGA_INPUT_UNAVAILABLE",
|
|
16063
|
+
VEGA_DEVICE_NOT_FOUND: "VEGA_DEVICE_NOT_FOUND",
|
|
16064
|
+
VEGA_DEVICE_NOT_REGISTERED: "VEGA_DEVICE_NOT_REGISTERED",
|
|
16065
|
+
VEGA_MULTIPLE_DEVICES: "VEGA_MULTIPLE_DEVICES",
|
|
16066
|
+
VEGA_BOOT_TIMEOUT: "VEGA_BOOT_TIMEOUT",
|
|
16067
|
+
VEGA_IMAGE_NOT_FOUND: "VEGA_IMAGE_NOT_FOUND",
|
|
16068
|
+
VEGA_ALREADY_RUNNING: "VEGA_ALREADY_RUNNING",
|
|
16069
|
+
VEGA_SCREENSHOT_FAILED: "VEGA_SCREENSHOT_FAILED",
|
|
16070
|
+
VEGA_TEXT_INVALID: "VEGA_TEXT_INVALID",
|
|
16063
16071
|
ANDROID_ADB_NOT_FOUND: "ANDROID_ADB_NOT_FOUND",
|
|
16064
16072
|
ANDROID_EMULATOR_NOT_FOUND: "ANDROID_EMULATOR_NOT_FOUND",
|
|
16065
16073
|
ANDROID_ADB_COMMAND_FAILED: "ANDROID_ADB_COMMAND_FAILED",
|
|
@@ -16072,6 +16080,7 @@ var FAILURE_CODES = {
|
|
|
16072
16080
|
SIMULATOR_NON_JSON_RESPONSE: "SIMULATOR_NON_JSON_RESPONSE",
|
|
16073
16081
|
SIMULATOR_HTTP_ERROR_RESPONSE: "SIMULATOR_HTTP_ERROR_RESPONSE",
|
|
16074
16082
|
SIMULATOR_MISSING_RESPONSE_FIELDS: "SIMULATOR_MISSING_RESPONSE_FIELDS",
|
|
16083
|
+
SIMULATOR_SCREENSHOT_FAILED: "SIMULATOR_SCREENSHOT_FAILED",
|
|
16075
16084
|
SIMULATOR_SERVER_FACTORY_OPTIONS_MISSING: "SIMULATOR_SERVER_FACTORY_OPTIONS_MISSING",
|
|
16076
16085
|
SIMULATOR_SERVER_DEVICE_ID_INVALID: "SIMULATOR_SERVER_DEVICE_ID_INVALID",
|
|
16077
16086
|
SIMULATOR_SERVER_READY_EXITED: "SIMULATOR_SERVER_READY_EXITED",
|
|
@@ -16125,6 +16134,7 @@ var FAILURE_CODES = {
|
|
|
16125
16134
|
ANDROID_SCREEN_SIZE_PARSE_FAILED: "ANDROID_SCREEN_SIZE_PARSE_FAILED",
|
|
16126
16135
|
ANDROID_SCREEN_SIZE_NON_POSITIVE: "ANDROID_SCREEN_SIZE_NON_POSITIVE",
|
|
16127
16136
|
ANDROID_UIAUTOMATOR_PARSE_FAILED: "ANDROID_UIAUTOMATOR_PARSE_FAILED",
|
|
16137
|
+
ANDROID_UIAUTOMATOR_CAPTURE_FAILED: "ANDROID_UIAUTOMATOR_CAPTURE_FAILED",
|
|
16128
16138
|
DEBUGGER_METRO_NOT_RUNNING: "DEBUGGER_METRO_NOT_RUNNING",
|
|
16129
16139
|
DEBUGGER_METRO_PROJECT_ROOT_MISSING: "DEBUGGER_METRO_PROJECT_ROOT_MISSING",
|
|
16130
16140
|
DEBUGGER_METRO_NO_TARGETS: "DEBUGGER_METRO_NO_TARGETS",
|
|
@@ -16169,8 +16179,19 @@ var FAILURE_CODES = {
|
|
|
16169
16179
|
NATIVE_PROFILER_XCTRACE_READY_EXITED: "NATIVE_PROFILER_XCTRACE_READY_EXITED",
|
|
16170
16180
|
NATIVE_PROFILER_XCTRACE_PROCESS_ERROR: "NATIVE_PROFILER_XCTRACE_PROCESS_ERROR",
|
|
16171
16181
|
NATIVE_PROFILER_XCTRACE_READY_TIMEOUT: "NATIVE_PROFILER_XCTRACE_READY_TIMEOUT",
|
|
16182
|
+
NATIVE_PROFILER_TRACE_TEMPLATE_MISSING: "NATIVE_PROFILER_TRACE_TEMPLATE_MISSING",
|
|
16172
16183
|
NATIVE_PROFILER_NO_ACTIVE_SESSION: "NATIVE_PROFILER_NO_ACTIVE_SESSION",
|
|
16184
|
+
NATIVE_PROFILER_APP_PROCESS_NOT_FOUND: "NATIVE_PROFILER_APP_PROCESS_NOT_FOUND",
|
|
16185
|
+
NATIVE_PROFILER_NO_EXPORTED_TRACE: "NATIVE_PROFILER_NO_EXPORTED_TRACE",
|
|
16186
|
+
// Android perfetto start-failure modes — mirror the iOS xctrace set so a
|
|
16187
|
+
// failed recording start is classified rather than falling through to the
|
|
16188
|
+
// generic tool-execution bucket.
|
|
16189
|
+
NATIVE_PROFILER_PERFETTO_PROCESS_ERROR: "NATIVE_PROFILER_PERFETTO_PROCESS_ERROR",
|
|
16190
|
+
NATIVE_PROFILER_PERFETTO_READY_TIMEOUT: "NATIVE_PROFILER_PERFETTO_READY_TIMEOUT",
|
|
16191
|
+
NATIVE_PROFILER_PERFETTO_READY_EXITED: "NATIVE_PROFILER_PERFETTO_READY_EXITED",
|
|
16173
16192
|
FLOW_PROJECT_ROOT_REQUIRED: "FLOW_PROJECT_ROOT_REQUIRED",
|
|
16193
|
+
FLOW_PROJECT_ROOT_INVALID: "FLOW_PROJECT_ROOT_INVALID",
|
|
16194
|
+
FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
|
|
16174
16195
|
FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
|
|
16175
16196
|
FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
|
|
16176
16197
|
FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
|
|
@@ -16178,6 +16199,27 @@ var FAILURE_CODES = {
|
|
|
16178
16199
|
PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
|
|
16179
16200
|
PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
|
|
16180
16201
|
PROFILER_NATIVE_TRACE_MISSING: "PROFILER_NATIVE_TRACE_MISSING",
|
|
16202
|
+
PROFILER_NATIVE_METADATA_MISSING: "PROFILER_NATIVE_METADATA_MISSING",
|
|
16203
|
+
PROFILER_NATIVE_METADATA_INVALID: "PROFILER_NATIVE_METADATA_INVALID",
|
|
16204
|
+
CHROMIUM_CDP_UNREACHABLE: "CHROMIUM_CDP_UNREACHABLE",
|
|
16205
|
+
CHROMIUM_CDP_NO_PAGE_TARGET: "CHROMIUM_CDP_NO_PAGE_TARGET",
|
|
16206
|
+
CHROMIUM_CDP_INVALID_RESPONSE: "CHROMIUM_CDP_INVALID_RESPONSE",
|
|
16207
|
+
CHROMIUM_DEVICE_ID_INVALID: "CHROMIUM_DEVICE_ID_INVALID",
|
|
16208
|
+
CHROMIUM_PARAM_INVALID: "CHROMIUM_PARAM_INVALID",
|
|
16209
|
+
CHROMIUM_INPUT_INVALID: "CHROMIUM_INPUT_INVALID",
|
|
16210
|
+
CHROMIUM_VIEWPORT_READ_FAILED: "CHROMIUM_VIEWPORT_READ_FAILED",
|
|
16211
|
+
CHROMIUM_SCREENSHOT_FAILED: "CHROMIUM_SCREENSHOT_FAILED",
|
|
16212
|
+
CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
|
|
16213
|
+
CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
|
|
16214
|
+
CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
|
|
16215
|
+
CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
|
|
16216
|
+
CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
|
|
16217
|
+
CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
|
|
16218
|
+
CHROMIUM_ELECTRON_CDP_TIMEOUT: "CHROMIUM_ELECTRON_CDP_TIMEOUT",
|
|
16219
|
+
CHROMIUM_ELECTRON_EXITED_BEFORE_READY: "CHROMIUM_ELECTRON_EXITED_BEFORE_READY",
|
|
16220
|
+
KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
|
|
16221
|
+
KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
|
|
16222
|
+
SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
|
|
16181
16223
|
BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
|
|
16182
16224
|
BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
|
|
16183
16225
|
BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
|
|
@@ -16216,6 +16258,7 @@ var FAILURE_COMMANDS = [
|
|
|
16216
16258
|
"ax_service",
|
|
16217
16259
|
"simulator_server",
|
|
16218
16260
|
"cdp",
|
|
16261
|
+
"electron",
|
|
16219
16262
|
"npm",
|
|
16220
16263
|
"npx",
|
|
16221
16264
|
"unknown"
|
package/dist/mcp-server.mjs
CHANGED
|
@@ -17313,6 +17313,14 @@ var FAILURE_CODES = {
|
|
|
17313
17313
|
UNINSTALL_UNCLASSIFIED_FAILED: "UNINSTALL_UNCLASSIFIED_FAILED",
|
|
17314
17314
|
VEGA_CLI_COMMAND_FAILED: "VEGA_CLI_COMMAND_FAILED",
|
|
17315
17315
|
VEGA_INPUT_UNAVAILABLE: "VEGA_INPUT_UNAVAILABLE",
|
|
17316
|
+
VEGA_DEVICE_NOT_FOUND: "VEGA_DEVICE_NOT_FOUND",
|
|
17317
|
+
VEGA_DEVICE_NOT_REGISTERED: "VEGA_DEVICE_NOT_REGISTERED",
|
|
17318
|
+
VEGA_MULTIPLE_DEVICES: "VEGA_MULTIPLE_DEVICES",
|
|
17319
|
+
VEGA_BOOT_TIMEOUT: "VEGA_BOOT_TIMEOUT",
|
|
17320
|
+
VEGA_IMAGE_NOT_FOUND: "VEGA_IMAGE_NOT_FOUND",
|
|
17321
|
+
VEGA_ALREADY_RUNNING: "VEGA_ALREADY_RUNNING",
|
|
17322
|
+
VEGA_SCREENSHOT_FAILED: "VEGA_SCREENSHOT_FAILED",
|
|
17323
|
+
VEGA_TEXT_INVALID: "VEGA_TEXT_INVALID",
|
|
17316
17324
|
ANDROID_ADB_NOT_FOUND: "ANDROID_ADB_NOT_FOUND",
|
|
17317
17325
|
ANDROID_EMULATOR_NOT_FOUND: "ANDROID_EMULATOR_NOT_FOUND",
|
|
17318
17326
|
ANDROID_ADB_COMMAND_FAILED: "ANDROID_ADB_COMMAND_FAILED",
|
|
@@ -17325,6 +17333,7 @@ var FAILURE_CODES = {
|
|
|
17325
17333
|
SIMULATOR_NON_JSON_RESPONSE: "SIMULATOR_NON_JSON_RESPONSE",
|
|
17326
17334
|
SIMULATOR_HTTP_ERROR_RESPONSE: "SIMULATOR_HTTP_ERROR_RESPONSE",
|
|
17327
17335
|
SIMULATOR_MISSING_RESPONSE_FIELDS: "SIMULATOR_MISSING_RESPONSE_FIELDS",
|
|
17336
|
+
SIMULATOR_SCREENSHOT_FAILED: "SIMULATOR_SCREENSHOT_FAILED",
|
|
17328
17337
|
SIMULATOR_SERVER_FACTORY_OPTIONS_MISSING: "SIMULATOR_SERVER_FACTORY_OPTIONS_MISSING",
|
|
17329
17338
|
SIMULATOR_SERVER_DEVICE_ID_INVALID: "SIMULATOR_SERVER_DEVICE_ID_INVALID",
|
|
17330
17339
|
SIMULATOR_SERVER_READY_EXITED: "SIMULATOR_SERVER_READY_EXITED",
|
|
@@ -17378,6 +17387,7 @@ var FAILURE_CODES = {
|
|
|
17378
17387
|
ANDROID_SCREEN_SIZE_PARSE_FAILED: "ANDROID_SCREEN_SIZE_PARSE_FAILED",
|
|
17379
17388
|
ANDROID_SCREEN_SIZE_NON_POSITIVE: "ANDROID_SCREEN_SIZE_NON_POSITIVE",
|
|
17380
17389
|
ANDROID_UIAUTOMATOR_PARSE_FAILED: "ANDROID_UIAUTOMATOR_PARSE_FAILED",
|
|
17390
|
+
ANDROID_UIAUTOMATOR_CAPTURE_FAILED: "ANDROID_UIAUTOMATOR_CAPTURE_FAILED",
|
|
17381
17391
|
DEBUGGER_METRO_NOT_RUNNING: "DEBUGGER_METRO_NOT_RUNNING",
|
|
17382
17392
|
DEBUGGER_METRO_PROJECT_ROOT_MISSING: "DEBUGGER_METRO_PROJECT_ROOT_MISSING",
|
|
17383
17393
|
DEBUGGER_METRO_NO_TARGETS: "DEBUGGER_METRO_NO_TARGETS",
|
|
@@ -17422,8 +17432,19 @@ var FAILURE_CODES = {
|
|
|
17422
17432
|
NATIVE_PROFILER_XCTRACE_READY_EXITED: "NATIVE_PROFILER_XCTRACE_READY_EXITED",
|
|
17423
17433
|
NATIVE_PROFILER_XCTRACE_PROCESS_ERROR: "NATIVE_PROFILER_XCTRACE_PROCESS_ERROR",
|
|
17424
17434
|
NATIVE_PROFILER_XCTRACE_READY_TIMEOUT: "NATIVE_PROFILER_XCTRACE_READY_TIMEOUT",
|
|
17435
|
+
NATIVE_PROFILER_TRACE_TEMPLATE_MISSING: "NATIVE_PROFILER_TRACE_TEMPLATE_MISSING",
|
|
17425
17436
|
NATIVE_PROFILER_NO_ACTIVE_SESSION: "NATIVE_PROFILER_NO_ACTIVE_SESSION",
|
|
17437
|
+
NATIVE_PROFILER_APP_PROCESS_NOT_FOUND: "NATIVE_PROFILER_APP_PROCESS_NOT_FOUND",
|
|
17438
|
+
NATIVE_PROFILER_NO_EXPORTED_TRACE: "NATIVE_PROFILER_NO_EXPORTED_TRACE",
|
|
17439
|
+
// Android perfetto start-failure modes — mirror the iOS xctrace set so a
|
|
17440
|
+
// failed recording start is classified rather than falling through to the
|
|
17441
|
+
// generic tool-execution bucket.
|
|
17442
|
+
NATIVE_PROFILER_PERFETTO_PROCESS_ERROR: "NATIVE_PROFILER_PERFETTO_PROCESS_ERROR",
|
|
17443
|
+
NATIVE_PROFILER_PERFETTO_READY_TIMEOUT: "NATIVE_PROFILER_PERFETTO_READY_TIMEOUT",
|
|
17444
|
+
NATIVE_PROFILER_PERFETTO_READY_EXITED: "NATIVE_PROFILER_PERFETTO_READY_EXITED",
|
|
17426
17445
|
FLOW_PROJECT_ROOT_REQUIRED: "FLOW_PROJECT_ROOT_REQUIRED",
|
|
17446
|
+
FLOW_PROJECT_ROOT_INVALID: "FLOW_PROJECT_ROOT_INVALID",
|
|
17447
|
+
FLOW_NAME_INVALID: "FLOW_NAME_INVALID",
|
|
17427
17448
|
FLOW_NO_ACTIVE_RECORDING: "FLOW_NO_ACTIVE_RECORDING",
|
|
17428
17449
|
FLOW_FILE_INVALID: "FLOW_FILE_INVALID",
|
|
17429
17450
|
FLOW_ENTRY_UNRECOGNIZED: "FLOW_ENTRY_UNRECOGNIZED",
|
|
@@ -17431,6 +17452,27 @@ var FAILURE_CODES = {
|
|
|
17431
17452
|
PROFILER_QUERY_REQUIRED_PARAM_MISSING: "PROFILER_QUERY_REQUIRED_PARAM_MISSING",
|
|
17432
17453
|
PROFILER_DATA_NOT_LOADED: "PROFILER_DATA_NOT_LOADED",
|
|
17433
17454
|
PROFILER_NATIVE_TRACE_MISSING: "PROFILER_NATIVE_TRACE_MISSING",
|
|
17455
|
+
PROFILER_NATIVE_METADATA_MISSING: "PROFILER_NATIVE_METADATA_MISSING",
|
|
17456
|
+
PROFILER_NATIVE_METADATA_INVALID: "PROFILER_NATIVE_METADATA_INVALID",
|
|
17457
|
+
CHROMIUM_CDP_UNREACHABLE: "CHROMIUM_CDP_UNREACHABLE",
|
|
17458
|
+
CHROMIUM_CDP_NO_PAGE_TARGET: "CHROMIUM_CDP_NO_PAGE_TARGET",
|
|
17459
|
+
CHROMIUM_CDP_INVALID_RESPONSE: "CHROMIUM_CDP_INVALID_RESPONSE",
|
|
17460
|
+
CHROMIUM_DEVICE_ID_INVALID: "CHROMIUM_DEVICE_ID_INVALID",
|
|
17461
|
+
CHROMIUM_PARAM_INVALID: "CHROMIUM_PARAM_INVALID",
|
|
17462
|
+
CHROMIUM_INPUT_INVALID: "CHROMIUM_INPUT_INVALID",
|
|
17463
|
+
CHROMIUM_VIEWPORT_READ_FAILED: "CHROMIUM_VIEWPORT_READ_FAILED",
|
|
17464
|
+
CHROMIUM_SCREENSHOT_FAILED: "CHROMIUM_SCREENSHOT_FAILED",
|
|
17465
|
+
CHROMIUM_STORAGE_EVAL_FAILED: "CHROMIUM_STORAGE_EVAL_FAILED",
|
|
17466
|
+
CHROMIUM_TAB_NOT_FOUND: "CHROMIUM_TAB_NOT_FOUND",
|
|
17467
|
+
CHROMIUM_TAB_OPEN_FAILED: "CHROMIUM_TAB_OPEN_FAILED",
|
|
17468
|
+
CHROMIUM_DESCRIBE_FAILED: "CHROMIUM_DESCRIBE_FAILED",
|
|
17469
|
+
CHROMIUM_ELECTRON_APP_PATH_INVALID: "CHROMIUM_ELECTRON_APP_PATH_INVALID",
|
|
17470
|
+
CHROMIUM_ELECTRON_SPAWN_FAILED: "CHROMIUM_ELECTRON_SPAWN_FAILED",
|
|
17471
|
+
CHROMIUM_ELECTRON_CDP_TIMEOUT: "CHROMIUM_ELECTRON_CDP_TIMEOUT",
|
|
17472
|
+
CHROMIUM_ELECTRON_EXITED_BEFORE_READY: "CHROMIUM_ELECTRON_EXITED_BEFORE_READY",
|
|
17473
|
+
KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
|
|
17474
|
+
KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
|
|
17475
|
+
SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
|
|
17434
17476
|
BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
|
|
17435
17477
|
BOOT_IOS_UNSUPPORTED_HOST: "BOOT_IOS_UNSUPPORTED_HOST",
|
|
17436
17478
|
BOOT_ANDROID_NO_AVDS: "BOOT_ANDROID_NO_AVDS",
|
|
@@ -17469,6 +17511,7 @@ var FAILURE_COMMANDS = [
|
|
|
17469
17511
|
"ax_service",
|
|
17470
17512
|
"simulator_server",
|
|
17471
17513
|
"cdp",
|
|
17514
|
+
"electron",
|
|
17472
17515
|
"npm",
|
|
17473
17516
|
"npx",
|
|
17474
17517
|
"unknown"
|