bdy 1.23.14-dev-target-commands → 1.23.16-dev-target-commands

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bdy",
3
3
  "preferGlobal": false,
4
- "version": "1.23.14-dev-target-commands",
4
+ "version": "1.23.16-dev-target-commands",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
7
7
  "homepage": "https://buddy.works/docs/cli",
@@ -161,6 +161,10 @@ class AgentManagerClass {
161
161
  }
162
162
  const current = (0, utils_1.getVersion)();
163
163
  const latest = await (0, utils_1.getLatestVersion)();
164
+ // Equality only, deliberately not "is latest newer": this runs on an explicit remote
165
+ // update action, whose meaning is "match what the channel publishes". Refusing an
166
+ // older latest would take away the only rollback the fleet has - moving the channel
167
+ // pointer back after a bad release.
164
168
  if (!latest || latest === '0.0.0' || latest === current) {
165
169
  logger_1.default.info((0, texts_1.LOG_AGENT_UPDATE_NOT_NEEDED)(current));
166
170
  // Nothing to do is not a failure, and showing it as one would make an update of
@@ -174,12 +178,15 @@ class AgentManagerClass {
174
178
  // - this is the value that stays behind if the restart never lands.
175
179
  this.agent?.reportUpdateStatus(tunnel_1.TUNNEL_AGENT_UPDATE_STATUS.STARTED);
176
180
  this.agent?.flushUpdateStatus();
177
- const target = latest.match(/^\d+\.\d+\.\d+/);
181
+ // getLatestVersion already refuses a version it cannot parse, so this is belt and
182
+ // braces - kept because the download url is built from the triple, and shipping a
183
+ // malformed one would fail much further away from the cause.
184
+ const target = (0, utils_1.parseVersion)(latest);
178
185
  if (!target) {
179
186
  logger_1.default.error(texts_1.LOG_AGENT_UPDATE_FAILED);
180
187
  return report(tunnel_1.TUNNEL_AGENT_UPDATE_STATUS.FAILED);
181
188
  }
182
- const swapped = await this.system.swapBinaryToVersion(target[0]);
189
+ const swapped = await this.system.swapBinaryToVersion(target.version);
183
190
  if (!swapped) {
184
191
  logger_1.default.error((0, texts_1.LOG_AGENT_UPDATE_BINARY_INVALID)(latest));
185
192
  return report(tunnel_1.TUNNEL_AGENT_UPDATE_STATUS.FAILED);
@@ -86,9 +86,8 @@ class ApiClient {
86
86
  }
87
87
  return false;
88
88
  }
89
- async request({ method = 'GET', path, query, body = null, headers = {}, parseResponseBody = false, rawResponseBody = false, rawResponse = false, httpUrlEncoded = false, tryRefreshingToken = true, }) {
90
- if (!headers)
91
- headers = {};
89
+ async request(args) {
90
+ const { method = 'GET', path, query, body = null, headers = {}, parseResponseBody = false, rawResponseBody = false, rawResponse = false, httpUrlEncoded = false, tryRefreshingToken = true, } = args;
92
91
  if (this.token && !headers.authorization) {
93
92
  headers.authorization = `Bearer ${this.token}`;
94
93
  }
@@ -176,15 +175,12 @@ class ApiClient {
176
175
  const success = await this.tryRefreshToken();
177
176
  if (success) {
178
177
  delete headers.authorization;
178
+ // Retry with the complete original args (an explicit field list
179
+ // once silently dropped `query` here); only the mutated headers
180
+ // and the refresh guard are overridden.
179
181
  return await this.request({
180
- method,
181
- path,
182
- body,
182
+ ...args,
183
183
  headers,
184
- parseResponseBody,
185
- rawResponseBody,
186
- rawResponse,
187
- httpUrlEncoded,
188
184
  tryRefreshingToken: false,
189
185
  });
190
186
  }
@@ -253,6 +249,12 @@ class ApiClient {
253
249
  }
254
250
  }
255
251
  else if (status === 204) {
252
+ // A no-content success still honors the raw-output contracts: callers
253
+ // stream the (empty) body instead of tripping over a null.
254
+ if (rawResponse)
255
+ return response;
256
+ if (rawResponseBody)
257
+ return responseBody;
256
258
  await responseBody.dump();
257
259
  return null;
258
260
  }
@@ -1251,11 +1253,20 @@ class ApiClient {
1251
1253
  query += '&';
1252
1254
  query += encodeURIComponent(key) + '=' + encodeURIComponent(value);
1253
1255
  });
1254
- return await this.request({
1256
+ const resolved = await this.request({
1255
1257
  method: 'GET',
1256
1258
  path: `/workspaces/${encodeURIComponent(workspace)}/identifiers${query}`,
1257
1259
  parseResponseBody: true,
1258
1260
  });
1261
+ // A queried project must itself resolve: for some resources
1262
+ // (environments, artifacts, distributions) the endpoint otherwise falls
1263
+ // back to the workspace resource of the same identifier, silently
1264
+ // answering for a different scope than asked (TARGET_API_REQUIREMENTS.md
1265
+ // p6). project_identifier is present whenever the project exists.
1266
+ if (params.project && !resolved.project_identifier) {
1267
+ throw new Error(texts_1.ERR_PROJECT_NOT_FOUND);
1268
+ }
1269
+ return resolved;
1259
1270
  }
1260
1271
  async resolveIdentifiers(workspace, params) {
1261
1272
  let query = '';
@@ -159,14 +159,15 @@ const request = async (method, url, options) => {
159
159
  output_1.default.exitNormal('');
160
160
  }
161
161
  else {
162
- // setEncoding keeps multibyte characters intact across chunk boundaries,
163
- // and newLine=false keeps chunk boundaries out of the payload
162
+ // setEncoding keeps multibyte characters intact across chunk boundaries;
163
+ // the response is a 1:1 payload, so it bypasses terminal-kit (whose
164
+ // formatting corrupts % and ^ sequences, common in URL-encoded data)
164
165
  body.setEncoding('utf8');
165
166
  body.on('data', (data) => {
166
- output_1.default.normal(data, false);
167
+ output_1.default.data(data, false);
167
168
  });
168
169
  body.on('close', () => {
169
- output_1.default.normal('');
170
+ output_1.default.data('');
170
171
  output_1.default.exitNormal('');
171
172
  });
172
173
  }
@@ -18,7 +18,8 @@ commandEnvironmentDelete.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_ENVI
18
18
  commandEnvironmentDelete.action(async (identifier, options) => {
19
19
  const workspace = input_1.default.restApiWorkspace(options.workspace);
20
20
  const client = input_1.default.restApiTokenClient();
21
- const environment_id = await (0, resolve_1.resolveEnvironmentId)(client, workspace, identifier, options);
21
+ const environment_id = await (0, resolve_1.resolveEnvironmentId)(client, workspace, identifier, options,
22
+ /* strictProject */ true);
22
23
  const confirmed = options.force ||
23
24
  (await output_1.default.confirm((0, texts_1.TXT_ENVIRONMENT_DELETE_CONFIRM)(identifier)));
24
25
  if (!confirmed)
@@ -11,12 +11,29 @@ const input_1 = __importDefault(require("../../input"));
11
11
  // project context from flags/env -> /identifiers -> hash id, exiting on a
12
12
  // miss. Without a project the identifier resolves as a workspace
13
13
  // environment; with one, along the project line.
14
- const resolveEnvironmentId = async (client, workspace, identifier, options) => {
14
+ //
15
+ // strictProject is for mutating commands (update/delete): an explicit -p is
16
+ // a statement "the environment of this project", so the resolved environment
17
+ // must actually live there. Without it /identifiers silently falls back to
18
+ // the workspace environment of the same identifier and the write lands on a
19
+ // workspace-wide resource. Reads keep the fallback - that is how workspace
20
+ // environments stay addressable from inside a project context.
21
+ const resolveEnvironmentId = async (client, workspace, identifier, options, strictProject = false) => {
15
22
  const project = input_1.default.restApiProject(options.project, true);
16
- const { environment_id } = await client.getEnvironmentByIdentifier(workspace, identifier, project);
17
- if (!environment_id) {
23
+ const resolved = await client.getEnvironmentByIdentifier(workspace, identifier, project);
24
+ // A nonexistent project is rejected by the API client
25
+ // (getResourceByIdentifier); here only the environment itself can miss.
26
+ if (!resolved.environment_id) {
18
27
  output_1.default.exitError(texts_1.ERR_ENVIRONMENT_NOT_FOUND);
19
28
  }
20
- return environment_id;
29
+ if (strictProject && options.project) {
30
+ const environment = await client.getEnvironment(workspace, resolved.environment_id);
31
+ // a workspace environment carries no project, so this also fails the
32
+ // workspace-fallback case
33
+ if (environment.project?.name !== resolved.project_identifier) {
34
+ output_1.default.exitError(texts_1.ERR_ENVIRONMENT_NOT_FOUND);
35
+ }
36
+ }
37
+ return resolved.environment_id;
21
38
  };
22
39
  exports.resolveEnvironmentId = resolveEnvironmentId;
@@ -52,7 +52,8 @@ commandEnvironmentUpdate.action(async (identifier, options) => {
52
52
  output_1.default.exitError(texts_1.ERR_COMMAND_NO_UPDATE);
53
53
  }
54
54
  const client = input_1.default.restApiTokenClient();
55
- const environment_id = await (0, resolve_1.resolveEnvironmentId)(client, workspace, identifier, options);
55
+ const environment_id = await (0, resolve_1.resolveEnvironmentId)(client, workspace, identifier, options,
56
+ /* strictProject */ true);
56
57
  const result = await client.updateEnvironment(workspace, environment_id, body);
57
58
  output_1.default.exitSuccess((0, texts_1.TXT_ENVIRONMENT_UPDATED)(result.identifier, result.html_url));
58
59
  });
@@ -46,14 +46,15 @@ const commandPre = async (_, command) => {
46
46
  if (!output_1.default.isTTY() || command.hideVersionUpdate || ['json', 'jsonl'].includes(command.opts()?.format)) {
47
47
  return;
48
48
  }
49
- const newCli = !!command.latestVersion && command.currentVersion !== command.latestVersion;
50
- const newAgent = !!command.agentStatus && !!command.latestVersion &&
51
- command.agentStatus.version !== command.latestVersion;
52
- if ((0, utils_1.isDocker)() && newCli && command.latestVersion) {
53
- output_1.default.newCliDockerVersion(command.latestVersion);
54
- }
55
- else if (newCli && command.latestVersion) {
56
- output_1.default.newCliVersion(command.latestVersion);
49
+ // No truthiness guards on the versions: an empty or unparsable one is never newer
50
+ const latest = command.latestVersion || '';
51
+ const newCli = (0, utils_1.isVersionNewer)(latest, command.currentVersion || '');
52
+ const newAgent = !!command.agentStatus && (0, utils_1.isVersionNewer)(latest, command.agentStatus.version);
53
+ if ((0, utils_1.isDocker)() && newCli) {
54
+ output_1.default.newCliDockerVersion(latest);
55
+ }
56
+ else if (newCli) {
57
+ output_1.default.newCliVersion(latest);
57
58
  }
58
59
  else if (newAgent) {
59
60
  output_1.default.newAgentVersion();
@@ -60,10 +60,12 @@ commandProjectGitCredential.action(async (action) => {
60
60
  projects.projects[0].html_url.includes(input.host);
61
61
  }
62
62
  if (myHost) {
63
- output_1.default.normal(`protocol=${input.protocol || 'https'}`);
64
- output_1.default.normal(`host=${input.host}`);
65
- output_1.default.normal(`username=${client.token}`);
66
- output_1.default.normal(`password=`);
63
+ // git credential protocol output - a machine-read payload, so it
64
+ // bypasses terminal-kit formatting
65
+ output_1.default.data(`protocol=${input.protocol || 'https'}`);
66
+ output_1.default.data(`host=${input.host}`);
67
+ output_1.default.data(`username=${client.token}`);
68
+ output_1.default.data(`password=`);
67
69
  }
68
70
  }
69
71
  catch {
@@ -43,7 +43,7 @@ commandSandboxExecCommand.action(async (identifier, command, options) => {
43
43
  str.forEach((s) => {
44
44
  const json = JSON.parse(s);
45
45
  if (json.data)
46
- output_1.default.normal(json.data);
46
+ output_1.default.data(json.data);
47
47
  });
48
48
  }
49
49
  catch {
@@ -31,7 +31,7 @@ commandSandboxExecLogs.action(async (identifier, commandId, options) => {
31
31
  str.forEach((s) => {
32
32
  const json = JSON.parse(s);
33
33
  if (json.data)
34
- output_1.default.normal(json.data);
34
+ output_1.default.data(json.data);
35
35
  });
36
36
  }
37
37
  catch {
@@ -20,7 +20,8 @@ commandTargetDelete.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_TARGET_DE
20
20
  commandTargetDelete.action(async (identifier, options) => {
21
21
  const workspace = input_1.default.restApiWorkspace(options.workspace);
22
22
  const client = input_1.default.restApiTokenClient();
23
- const target_id = await (0, scope_1.resolveTargetId)(client, workspace, identifier, options);
23
+ const target_id = await (0, scope_1.resolveTargetId)(client, workspace, identifier, options,
24
+ /* strictLine */ true);
24
25
  const confirmed = options.force || (await output_1.default.confirm((0, texts_1.TXT_TARGET_DELETE_CONFIRM)(identifier)));
25
26
  if (!confirmed)
26
27
  output_1.default.exitNormal();
@@ -17,7 +17,6 @@ commandTargetExecCommand.option('-p, --project <name>', texts_1.OPTION_REST_API_
17
17
  commandTargetExecCommand.option('--pipeline <identifier>', texts_1.OPTION_TARGET_PIPELINE);
18
18
  commandTargetExecCommand.option('--environment <identifier>', texts_1.OPTION_TARGET_ENVIRONMENT);
19
19
  commandTargetExecCommand.option('--async', texts_1.OPTION_TARGET_EXEC_ASYNC);
20
- commandTargetExecCommand.option('--wait', texts_1.OPTION_TARGET_EXEC_WAIT);
21
20
  commandTargetExecCommand.option('--file <path>', texts_1.OPTION_TARGET_EXEC_FILE);
22
21
  commandTargetExecCommand.option('--format <text|json>', texts_1.OPTION_FORMAT);
23
22
  commandTargetExecCommand.argument('<identifier>', texts_1.OPTION_TARGET_IDENTIFIER);
@@ -42,15 +41,14 @@ commandTargetExecCommand.action(async (identifier, command, options) => {
42
41
  }
43
42
  const workspace = input_1.default.restApiWorkspace(options.workspace);
44
43
  const client = input_1.default.restApiTokenClient();
45
- const target_id = await (0, scope_1.resolveTargetId)(client, workspace, identifier, options);
44
+ const target_id = await (0, scope_1.resolveTargetId)(client, workspace, identifier, options,
45
+ /* strictLine */ true);
46
46
  let exec = await client.executeTargetCommand(workspace, target_id, {
47
47
  command: cmd,
48
48
  });
49
49
  const execId = exec.execution_id;
50
50
  const json = options.format === 'json';
51
- // --wait is deprecated (waiting is the default) but still forces sync
52
- // when combined with --async.
53
- if (options.async && !options.wait) {
51
+ if (options.async) {
54
52
  if (json) {
55
53
  output_1.default.json(exec);
56
54
  }
@@ -10,14 +10,42 @@ const output_1 = __importDefault(require("../../output"));
10
10
  const input_1 = __importDefault(require("../../input"));
11
11
  // Shared resolve preamble for commands taking a target identifier: line
12
12
  // context from flags/env -> /identifiers -> hash id, exiting on a miss.
13
- const resolveTargetId = async (client, workspace, identifier, options) => {
13
+ //
14
+ // strictLine is for mutating commands (update/delete/exec command): an
15
+ // explicit line flag is a statement "the target of this project/pipeline/
16
+ // environment", yet /identifiers falls back to the workspace target of the
17
+ // same identifier when the requested line exists but does not hold it - the
18
+ // operation would silently land on a workspace-wide resource. Reads keep
19
+ // the fallback (workspace targets stay addressable from a line context).
20
+ const resolveTargetId = async (client, workspace, identifier, options, strictLine = false) => {
14
21
  const project = input_1.default.restApiProject(options.project, true);
15
22
  const line = input_1.default.targetLine(project, options.pipeline, options.environment);
16
- const { target_id } = await client.getTargetByIdentifier(workspace, identifier, line);
17
- if (!target_id) {
23
+ const resolved = await client.getTargetByIdentifier(workspace, identifier, line);
24
+ if (!resolved.target_id) {
18
25
  output_1.default.exitError(texts_1.ERR_TARGET_NOT_FOUND);
19
26
  }
20
- return target_id;
27
+ if (strictLine) {
28
+ const requested = options.pipeline
29
+ ? utils_1.TARGET_SCOPE.PIPELINE
30
+ : options.environment
31
+ ? utils_1.TARGET_SCOPE.ENVIRONMENT
32
+ : options.project
33
+ ? utils_1.TARGET_SCOPE.PROJECT
34
+ : null;
35
+ if (requested) {
36
+ const target = await client.getTarget(workspace, resolved.target_id);
37
+ const matches = requested === utils_1.TARGET_SCOPE.PIPELINE
38
+ ? String(target.pipeline?.id) === String(resolved.pipeline_id)
39
+ : requested === utils_1.TARGET_SCOPE.ENVIRONMENT
40
+ ? target.environment?.id === resolved.environment_id
41
+ : (0, exports.targetScopeOf)(target) === utils_1.TARGET_SCOPE.PROJECT &&
42
+ target.project?.name === resolved.project_identifier;
43
+ if (!matches) {
44
+ output_1.default.exitError(texts_1.ERR_TARGET_NOT_FOUND);
45
+ }
46
+ }
47
+ }
48
+ return resolved.target_id;
21
49
  };
22
50
  exports.resolveTargetId = resolveTargetId;
23
51
  // Lines the CLI requests per log fetch.
@@ -95,10 +123,12 @@ const resolveTargetScope = async (client, workspace, project, scope, options) =>
95
123
  };
96
124
  if (project)
97
125
  query.project = project;
98
- const { environment_id } = await client.getResourceByIdentifier(workspace, query);
99
- if (!environment_id)
126
+ const resolved = await client.getResourceByIdentifier(workspace, query);
127
+ // a nonexistent project is rejected by getResourceByIdentifier itself
128
+ if (!resolved.environment_id) {
100
129
  output_1.default.exitError(texts_1.ERR_TARGET_ENVIRONMENT_NOT_FOUND);
101
- params.environmentId = environment_id;
130
+ }
131
+ params.environmentId = resolved.environment_id;
102
132
  }
103
133
  else if (scope === utils_1.TARGET_SCOPE.PROJECT) {
104
134
  params.project = project;
@@ -21,7 +21,8 @@ commandTargetUpdate.action(async (identifier, options) => {
21
21
  const yaml = input_1.default.restApiYaml(options.yaml);
22
22
  const workspace = input_1.default.restApiWorkspace(options.workspace);
23
23
  const client = input_1.default.restApiTokenClient();
24
- const target_id = await (0, scope_1.resolveTargetId)(client, workspace, identifier, options);
24
+ const target_id = await (0, scope_1.resolveTargetId)(client, workspace, identifier, options,
25
+ /* strictLine */ true);
25
26
  const body = {
26
27
  yaml: Buffer.from(yaml, 'utf8').toString('base64'),
27
28
  };
@@ -78,7 +78,7 @@ commandVersion.action(async () => {
78
78
  const currVersion = commandVersion.currentVersion || '';
79
79
  const lastVersion = commandVersion.latestVersion || '';
80
80
  const env = commandVersion.env || '';
81
- if (currVersion !== lastVersion) {
81
+ if ((0, utils_1.isVersionNewer)(lastVersion, currVersion)) {
82
82
  const platform = (0, utils_1.getPlatform)();
83
83
  const isMac = platform === 'darwin';
84
84
  const isWin = platform === 'win32';
@@ -8,11 +8,9 @@ const texts_1 = require("../texts");
8
8
  const pipeline_1 = __importDefault(require("./yaml/pipeline"));
9
9
  const actions_1 = __importDefault(require("./yaml/actions"));
10
10
  const validate_1 = __importDefault(require("./yaml/validate"));
11
- const init_1 = __importDefault(require("./yaml/init"));
12
11
  const commandYaml = (0, utils_1.newCommand)('yaml', texts_1.DESC_COMMAND_YAML);
13
12
  commandYaml.addCommand(pipeline_1.default);
14
13
  commandYaml.addCommand(actions_1.default);
15
14
  commandYaml.addCommand(validate_1.default);
16
- commandYaml.addCommand(init_1.default);
17
- commandYaml.addHelpText('after', texts_1.EXAMPLE_YAML);
15
+ commandYaml.addHelpText('after', `\nEXAMPLES:${texts_1.EXAMPLE_YAML}`);
18
16
  exports.default = commandYaml;
@@ -9,7 +9,21 @@ const stream_1 = __importDefault(require("stream"));
9
9
  output_1.default.muteNodeWarnings();
10
10
  stream_1.default.setDefaultHighWaterMark(false, 65536);
11
11
  process.title = 'bdy';
12
+ // Node writes to a pipe asynchronously and process.exit() does not wait for
13
+ // the buffer to drain, so large output piped to another process was cut at a
14
+ // pipe-buffer boundary (files and POSIX TTYs are synchronous already).
15
+ // Blocking mode makes every write land before exit, on all Output paths.
16
+ for (const s of [process.stdout, process.stderr]) {
17
+ s._handle?.setBlocking?.(true);
18
+ }
19
+ // The cost of blocking mode: a reader that closes early (`bdy ... | head`)
20
+ // turns further writes into EPIPE errors, which surface here as uncaught
21
+ // exceptions. That is the reader saying "got enough", not a failure - end
22
+ // quietly like any well-behaved pipe writer.
23
+ const isEpipe = (err) => err?.code === 'EPIPE' || err?.cause?.code === 'EPIPE';
12
24
  process.on('uncaughtException', (err) => {
25
+ if (isEpipe(err))
26
+ process.exit(0);
13
27
  logger_1.default.fatal(err);
14
28
  output_1.default.exitError(err);
15
29
  });
@@ -1191,7 +1191,9 @@ class OutputPipeline {
1191
1191
  this.jsonLog(logs[actionLogsStart]);
1192
1192
  }
1193
1193
  else {
1194
- output_1.default.normal(output_1.default.getTermKitDimColor(` ${logs[actionLogsStart]}`));
1194
+ // log lines are payload inside markup - escape so % and ^
1195
+ // sequences in build output render verbatim
1196
+ output_1.default.normal(output_1.default.getTermKitDimColor(` ${output_1.default.escapeTermKit(logs[actionLogsStart])}`));
1195
1197
  }
1196
1198
  }
1197
1199
  if (action &&
@@ -1221,9 +1223,9 @@ class OutputPipeline {
1221
1223
  let line = '';
1222
1224
  if (i > 0)
1223
1225
  line += ' ';
1224
- line += output_1.default.getTermKitMutedColor(v.key);
1226
+ line += output_1.default.getTermKitMutedColor(output_1.default.escapeTermKit(v.key));
1225
1227
  line += output_1.default.getTermKitDimColor(` = "`);
1226
- line += output_1.default.getTermKitBlueColor(v.value);
1228
+ line += output_1.default.getTermKitBlueColor(output_1.default.escapeTermKit(v.value));
1227
1229
  line += output_1.default.getTermKitDimColor('"');
1228
1230
  output_1.default.normal(line);
1229
1231
  });
@@ -136,9 +136,18 @@ class Output {
136
136
  }
137
137
  // Payload output (command results, logs, JSON): bypasses terminal-kit,
138
138
  // whose printf-style formatting and ^-markup corrupt data containing
139
- // % or ^ sequences.
140
- static data(txt) {
141
- process.stdout.write(`${txt}\n`);
139
+ // % or ^ sequences. newLine=false emits a mid-stream chunk, keeping
140
+ // chunk boundaries out of the payload.
141
+ static data(txt, newLine = true) {
142
+ process.stdout.write(newLine ? `${txt}\n` : txt);
143
+ }
144
+ // For payload embedded in terminal-kit markup (e.g. a dimmed log line):
145
+ // neutralizes the ^-markup and %-formatting the payload would otherwise
146
+ // trigger, so it renders verbatim while the surrounding markup still
147
+ // works. Only for strings printed via terminal() - ScreenBuffer.put does
148
+ // not printf-format, so there %% would render double.
149
+ static escapeTermKit(txt) {
150
+ return txt.replace(/[%^]/g, '$&$&');
142
151
  }
143
152
  static writeStderr(txt) {
144
153
  process.stderr.write(`${txt}\n`);
@@ -13,14 +13,14 @@ exports.LOG_TUNNEL_CONNECTED = exports.LOG_AGENT_STARTED = exports.LOG_AGENT_UPD
13
13
  exports.OPTION_SANDBOX_AGENT_NOTE = exports.OPTION_SANDBOX_NOTE = exports.OPTION_SANDBOX_NAME = exports.OPTION_SANDBOX_IDENTIFIER = exports.DESC_COMMAND_SANDBOX_SSH = exports.DESC_COMMAND_SANDBOX_APP = exports.DESC_COMMAND_SANDBOX_EXEC = exports.DESC_COMMAND_SANDBOX_STATUS = exports.DESC_COMMAND_SANDBOX_LOGS = exports.DESC_COMMAND_SANDBOX_RESTART = exports.DESC_COMMAND_SANDBOX_STOP = exports.DESC_COMMAND_SANDBOX_START = exports.DESC_COMMAND_SANDBOX_DESTROY = exports.DESC_COMMAND_SANDBOX_GET = exports.DESC_COMMAND_SANDBOX_LIST = exports.DESC_COMMAND_SANDBOX_UPDATE = exports.DESC_COMMAND_SANDBOX_GET_YAML = exports.DESC_COMMAND_SANDBOX_CREATE = exports.DESC_COMMAND_SANDBOX = exports.DEBUG_WAIT_FOR_IDLE_TIMEOUT = exports.DEBUG_WAIT_FOR_IDLE = exports.DEBUG_RESOURCE_DISCOVERY_TIMEOUT = exports.DEBUG_AUTO_WIDTH = exports.DEBUG_AUTO_SCROLL = exports.DEBUG_RESOURCE_CRAWLING_URL = exports.DEBUG_SNAPSHOT_PROCESSING = exports.DEBUG_SNAPSHOTS_PROCESSING = exports.DEBUG_EXEC_COMMAND = exports.DEBUG_EXEC_TEST_COMMAND = exports.LOG_INSTALLED_BROWSER = exports.LOG_SESSION_LINK = exports.LOG_SENDING_DATA = exports.LOG_SENDING_REQUEST = exports.LOG_PROCESSING_SNAPSHOTS = exports.LOG_RUNNING_EXEC_COMMAND = exports.LOG_TUNNEL_SSH_STREAM = exports.LOG_TUNNEL_TLS_AGENT_STREAM = exports.LOG_TUNNEL_TLS_REGION_STREAM = exports.LOG_TUNNEL_TLS_TARGET_STREAM = exports.LOG_TUNNEL_HTTP2_STREAM = exports.LOG_TUNNEL_HTTP1_STREAM = exports.LOG_TUNNEL_TCP_STREAM = exports.LOG_TUNNEL_HTTP_WRONG_USER_AGENTS = exports.LOG_TUNNEL_HTTP_CIRCUIT_BREAKER_OPEN = exports.LOG_TUNNEL_HTTP_MAX_INFLIGHT = exports.LOG_TUNNEL_HTTP_RATE_LIMIT = exports.LOG_TUNNEL_HTTP_WRON_AUTH = exports.LOG_TUNNEL_IDENTIFIED = exports.LOG_TUNNEL_DISCONNECTED = exports.LOG_TUNNEL_FAILED = void 0;
14
14
  exports.DESC_COMMAND_SANDBOX_APP_ADD = exports.DESC_COMMAND_SANDBOX_APP_LIST = exports.TXT_SANDBOX_WAITING_START = exports.TXT_SANDBOX_WAITING_STOP = exports.TXT_SANDBOX_WAITING_APPS = exports.TXT_SANDBOX_WAITING_SETUP = exports.TXT_SANDBOX_WAITING_RUNNING = exports.TXT_SANDBOX_STOPPED = exports.TXT_SANDBOX_STARTED = exports.TXT_SANDBOX_DESTROYED = exports.TXT_SANDBOX_DESTROY_CONFIRM = exports.TXT_SANDBOX_UPDATED = exports.TXT_SANDBOX_CREATED = exports.TXT_SANDBOX_CREATING = exports.TXT_SANDBOX_APP_STARTED = exports.TXT_SANDBOX_APP_STOPPED = exports.OPTION_SANDBOX_WAIT = exports.OPTION_SANDBOX_WAIT_APPS = exports.OPTION_SANDBOX_WAIT_CONFIGURED = exports.OPTION_SANDBOX_WAIT_RUNNING = exports.ERR_SANDBOX_STOP_FAILED = exports.ERR_SANDBOX_SSH_MISSING = exports.ERR_SANDBOX_SSH_NO_ACCESS = exports.ERR_SANDBOX_NOT_RUNNING = exports.ERR_SANDBOX_NO_COMMANDS = exports.ERR_SANDBOX_RUNNING_FAILED = exports.ERR_SANDBOX_STOP_TIMEOUT = exports.ERR_SANDBOX_SNAPSHOT_TIMEOUT = exports.ERR_SANDBOX_RUNNING_TIMEOUT = exports.ERR_SANDBOX_APPS_TIMEOUT = exports.ERR_SANDBOX_SETUP_TIMEOUT = exports.ERR_SANDBOX_APP_FAILED = exports.ERR_SANDBOX_SETUP_FAILED = exports.ERR_SANDBOX_INVALID_RESOURCES = exports.ERR_SANDBOX_APP_NOT_FOUND = exports.ERR_SANDBOX_NOT_FOUND = exports.OPTION_SANDBOX_SSH_PRINT = exports.OPTION_SANDBOX_SSH_IDENTITY = exports.OPTION_SANDBOX_SSH_ARGS = exports.OPTION_SANDBOX_RUNTIME = exports.OPTION_SANDBOX_TIMEOUT = exports.OPTION_SANDBOX_FETCH = exports.OPTION_SANDBOX_APP_DIR = exports.OPTION_SANDBOX_APP_COMMAND = exports.OPTION_SANDBOX_YAML = exports.OPTION_SANDBOX_TAGS = exports.OPTION_SANDBOX_INSTALL_SCRIPT = exports.OPTION_SANDBOX_INSTALL_COMMANDS = exports.OPTION_SANDBOX_RESOURCES = exports.OPTION_SANDBOX_OS = void 0;
15
15
  exports.OPTION_SANDBOX_CP_DOWNLOAD_MERGE = exports.OPTION_SANDBOX_CP_DEST = exports.OPTION_SANDBOX_CP_SOURCE = exports.DESC_COMMAND_SANDBOX_CP = exports.ERR_SANDBOX_ENDPOINTS_NOT_FOUND = exports.ERR_SANDBOX_ENDPOINT_NOT_FOUND = exports.ERR_SANDBOX_ENDPOINT_EXISTS = exports.TXT_SANDBOX_ENDPOINT_DELETED = exports.TXT_SANDBOX_ENDPOINT_DELETE_CONFIRM = exports.TXT_SANDBOX_ENDPOINT_ADDED = exports.TXT_SANDBOX_APP_REMOVED = exports.TXT_SANDBOX_APP_ADDED = exports.OPTION_SANDBOX_ENDPOINT_TYPE = exports.OPTION_SANDBOX_ENDPOINT_PORT = exports.OPTION_SANDBOX_ENDPOINT_NAME_ARG = exports.OPTION_SANDBOX_ENDPOINT_NAME = exports.DESC_COMMAND_SANDBOX_ENDPOINT_DELETE = exports.DESC_COMMAND_SANDBOX_ENDPOINT_ADD = exports.DESC_COMMAND_SANDBOX_ENDPOINT_GET = exports.DESC_COMMAND_SANDBOX_ENDPOINT_LIST = exports.DESC_COMMAND_SANDBOX_ENDPOINT = exports.ERR_SANDBOX_SNAPSHOTS_NOT_FOUND = exports.ERR_SANDBOX_SNAPSHOT_NOT_FOUND = exports.ERR_SANDBOX_SNAPSHOT_FAILED = exports.TXT_SANDBOX_SNAPSHOT_WAITING = exports.TXT_SANDBOX_SNAPSHOT_DELETE_CONFIRM = exports.TXT_SANDBOX_SNAPSHOT_DELETED = exports.TXT_SANDBOX_SNAPSHOT_CREATED = exports.OPTION_SANDBOX_FROM_SNAPSHOT = exports.OPTION_SANDBOX_SNAPSHOT_NAME_ARG = exports.OPTION_SANDBOX_SNAPSHOT_NAME = exports.DESC_COMMAND_SANDBOX_SNAPSHOT_DELETE = exports.DESC_COMMAND_SANDBOX_SNAPSHOT_GET = exports.DESC_COMMAND_SANDBOX_SNAPSHOT_CREATE = exports.DESC_COMMAND_SANDBOX_SNAPSHOT_LIST = exports.DESC_COMMAND_SANDBOX_SNAPSHOT = exports.TXT_SANDBOX_COMMAND_KILLED = exports.OPTION_SANDBOX_COMMAND_KILL_CONFIRM = exports.OPTION_SANDBOX_LOGS_LIMIT = exports.OPTION_SANDBOX_APP_ID = exports.OPTION_SANDBOX_COMMAND_ID = exports.DESC_COMMAND_SANDBOX_EXEC_KILL = exports.DESC_COMMAND_SANDBOX_EXEC_LOGS = exports.DESC_COMMAND_SANDBOX_APP_START = exports.DESC_COMMAND_SANDBOX_APP_STOP = exports.DESC_COMMAND_SANDBOX_APP_STATUS = exports.DESC_COMMAND_SANDBOX_APP_LOGS = exports.DESC_COMMAND_SANDBOX_EXEC_STATUS = exports.DESC_COMMAND_SANDBOX_EXEC_LIST = exports.DESC_COMMAND_SANDBOX_APP_REMOVE = void 0;
16
- exports.ERR_TARGET_NO_EXECS = exports.ERR_TARGET_NOT_FOUND = exports.OPTION_TARGET_EXEC_FILE = exports.OPTION_TARGET_EXEC_WAIT = exports.OPTION_TARGET_EXEC_ASYNC = exports.OPTION_TARGET_EXEC_COMMAND = exports.OPTION_TARGET_EXEC_LOG_LIMIT = exports.OPTION_TARGET_EXEC_LOG_OFFSET = exports.OPTION_TARGET_EXEC_LIMIT = exports.OPTION_TARGET_EXEC_ID = exports.OPTION_TARGET_YAML = exports.OPT_COMMAND_TARGET_SCOPE = exports.OPTION_TARGET_ENVIRONMENT = exports.OPTION_TARGET_PIPELINE = exports.OPTION_TARGET_IDENTIFIER = exports.DESC_COMMAND_TARGET_EXEC_LOGS = exports.DESC_COMMAND_TARGET_EXEC_LIST = exports.DESC_COMMAND_TARGET_EXEC_KILL = exports.DESC_COMMAND_TARGET_EXEC_STATUS = exports.DESC_COMMAND_TARGET_EXEC = exports.DESC_COMMAND_TARGET_DELETE = exports.DESC_COMMAND_TARGET_UPDATE = exports.DESC_COMMAND_TARGET_CREATE = exports.DESC_COMMAND_TARGET_GET = exports.DESC_COMMAND_TARGET_LIST = exports.DESC_COMMAND_TARGET = exports.TXT_SANDBOX_EXEC_FAILED = exports.TXT_SANDBOX_EXEC_INPROGRESS = exports.TXT_SANDBOX_EXEC_SUCCESS = exports.TXT_SANDBOX_EXEC_BACKGROUND = exports.TXT_SANDBOX_EXEC_ID = exports.ERR_SANDBOX_CP_INVALID_SOURCE = exports.ERR_SANDBOX_CP_INVALID_DEST = exports.ERR_SANDBOX_CP_REPLACE = exports.ERR_SANDBOX_CP_MKDIR = exports.ERR_SANDBOX_CP_PATH_EXISTS = exports.ERR_SANDBOX_CP_NOT_EMPTY_DIR = exports.ERR_SANDBOX_CP_READDIR = exports.ERR_SANDBOX_CP_DEST_NOT_FOLDER = exports.ERR_SANDBOX_CP_SOURCE_NOT_FOUND = exports.TXT_SANDBOX_CP_DONE = exports.TXT_SANDBOX_CP_PROGRESS = exports.TXT_SANDBOX_UNZIPPING_COUNT = exports.TXT_SANDBOX_UNZIP_DONE = exports.TXT_SANDBOX_UNZIP = exports.TXT_SANDBOX_CP_DOWNLOAD_DONE = exports.TXT_SANDBOX_CP_DOWNLOAD = exports.OPTION_SANDBOX_CP_IGNORE = exports.OPTION_SANDBOX_CP_USER = exports.OPTION_SANDBOX_CP_DOWNLOAD_REPLACE = void 0;
17
- exports.DESC_COMMAND_API_GET = exports.DESC_COMMAND_API_PATCH = exports.DESC_COMMAND_API_DELETE = exports.DESC_COMMAND_API_PUT = exports.DESC_COMMAND_API_POST = exports.DESC_COMMAND_API_LIST = exports.DESC_COMMAND_API = exports.ERR_WHOAMI_LOGOUT = exports.TXT_WHOAMI_NO_WORKSPACE = exports.DESC_COMMAND_WHOAMI = exports.TXT_ENVIRONMENT_DELETED = exports.TXT_ENVIRONMENT_DELETE_CONFIRM = exports.TXT_ENVIRONMENT_UPDATED = exports.TXT_ENVIRONMENT_CREATED = exports.TXT_ENVIRONMENT_NOT_FOUND = exports.ERR_ENVIRONMENT_NOT_FOUND = exports.OPTION_ENVIRONMENT_ICON = exports.OPTION_ENVIRONMENT_PUBLIC_URL = exports.OPTION_ENVIRONMENT_TAGS = exports.OPTION_ENVIRONMENT_CREATE_IDENTIFIER = exports.OPTION_ENVIRONMENT_NAME = exports.OPTION_ENVIRONMENT_IDENTIFIER = exports.DESC_COMMAND_ENVIRONMENT_DELETE = exports.DESC_COMMAND_ENVIRONMENT_UPDATE = exports.DESC_COMMAND_ENVIRONMENT_CREATE = exports.DESC_COMMAND_ENVIRONMENT_GET = exports.DESC_COMMAND_ENVIRONMENT_LIST = exports.DESC_COMMAND_ENVIRONMENT = exports.TXT_TARGET_EXEC_KILLED = exports.TXT_TARGET_EXEC_KILL_CONFIRM = exports.WARN_TARGET_EXEC_TRUNCATED = exports.TXT_TARGET_EXEC_CANCELLED = exports.TXT_TARGET_EXEC_FAILED = exports.TXT_TARGET_EXEC_SUCCESS = exports.TXT_TARGET_EXEC_BACKGROUND = exports.TXT_TARGET_EXEC_ID = exports.TXT_TARGET_DELETED = exports.TXT_TARGET_DELETE_CONFIRM = exports.TXT_TARGET_UPDATED = exports.TXT_TARGET_CREATED = exports.TXT_TARGET_NOT_FOUND = exports.ERR_TARGET_SCOPE_NO_ENVIRONMENT = exports.ERR_TARGET_SCOPE_NO_PIPELINE = exports.ERR_TARGET_PIPELINE_ENV_CONFLICT = exports.ERR_TARGET_PIPELINE_REQUIRES_PROJECT = exports.ERR_TARGET_SCOPE = exports.ERR_TARGET_ENVIRONMENT_NOT_FOUND = exports.ERR_TARGET_EXEC_FILE_NOT_FOUND = exports.ERR_TARGET_EXEC_COMMAND_CONFLICT = exports.ERR_TARGET_EXEC_NO_COMMAND = void 0;
18
- exports.TXT_WORKSPACE_NONE = exports.TXT_WORKSPACE_SET_SUCCESS = exports.ARG_COMMAND_WORKSPACE = exports.DESC_COMMAND_WORKSPACE_GET = exports.DESC_COMMAND_WORKSPACE_SET = exports.DESC_COMMAND_WORKSPACE_LIST = exports.DESC_COMMAND_WORKSPACE = exports.TXT_COMMAND_REGISTER_PROVIDE_NAME = exports.TXT_COMMAND_REGISTER_PROVIDE_EMAIL = exports.ERR_COMMAND_REGISTER_INVALID_NAME = exports.ERR_COMMAND_REGISTER_INVALID_EMAIL = exports.OPT_COMMAND_REGISTER_NAME = exports.OPT_COMMAND_REGISTER_EMAIL = exports.DESC_COMMAND_REGISTER = exports.TXT_LOGOUT_SUCCESS = exports.DESC_COMMAND_LOGOUT = exports.DESC_COMMAND_LOGIN = exports.HELP_COMMAND_MCP = exports.ERR_MCP_TOOL_FILTERED = exports.ERR_MCP_TOOLS_CATEGORY = exports.OPT_COMMAND_MCP_TOOLS = exports.ERR_MCP_REFRESH_FAILED = exports.ERR_MCP_URL_INVALID = exports.ERR_MCP_ENDPOINT = exports.DESC_COMMAND_MCP = exports.ERR_API_MEDIA_TYPE_NOT_IMPLEMENTED = exports.ERR_API_PARAMETER_NOT_REPLACED = exports.TXT_API_ENDPOINT_REQUIRED_SCOPES = exports.ERR_API_ENDPOINT_NOT_FOUND = exports.ERR_API_WRONG_METHOD = exports.ERR_SCHEMA_FETCH_FAILED = exports.OPT_COMMAND_API_INFO_URL = exports.OPT_COMMAND_API_INFO_SCHEMA = exports.OPT_COMMAND_API_INFO_METHOD = exports.OPT_COMMAND_API_LIST_SEARCH = exports.OPT_COMMAND_API_LIST_METHOD = exports.ERR_API_REQUEST_BODY_VALUE = exports.ERR_API_REQUEST_QUERY_VALUE = exports.ERR_API_REQUEST_INVALID_JSON = exports.ERR_API_REQUEST_FILE_ERROR = exports.ERR_API_REQUEST_OUTPUT_EXISTS = exports.DESC_COMMAND_API_INFO = exports.DESC_COMMAND_API_FORM = exports.DESC_COMMAND_API_JSON = exports.DESC_COMMAND_API_DATA = exports.DESC_COMMAND_API_OUTPUT = exports.DESC_COMMAND_API_REQUEST_QUERY = exports.DESC_COMMAND_API_PROJECT = exports.DESC_COMMAND_API_WORKSPACE = exports.DESC_COMMAND_API_REQUEST_URL = void 0;
19
- exports.ERR_COMMAND_SCOPE_NO_PROJECT = exports.OPT_COMMAND_DISTRO_DISABLE = exports.OPT_COMMAND_DISTRO_ENABLE = exports.OPT_COMMAND_DISTRO_AGENT_NOTE = exports.OPT_COMMAND_DISTRO_NOTE = exports.OPT_COMMAND_DISTRO_NAME = exports.OPT_COMMAND_ROUTE_TARGET = exports.OPT_COMMAND_ROUTE_AGENT_NOTE = exports.OPT_COMMAND_ROUTE_NOTE = exports.OPT_COMMAND_ROUTE_PATH = exports.OPT_COMMAND_ROUTE_DOMAIN = exports.OPT_COMMAND_ROUTE_SUBDOMAIN = exports.OPT_COMMAND_ROUTE_TYPE = exports.OPT_COMMAND_ROUTE_ID = exports.OPT_COMMAND_DISTRO_IDENTIFIER = exports.OPT_COMMAND_SCOPE = exports.OPT_COMMAND_AGENT_NOTE = exports.OPT_COMMAND_NOTE = exports.DESC_COMMAND_ROUTE = exports.DESC_COMMAND_ROUTE_UPDATE = exports.DESC_COMMAND_ROUTE_DELETE = exports.DESC_COMMAND_ROUTE_GET = exports.DESC_COMMAND_DISTRO_UPDATE = exports.DESC_COMMAND_DISTRO_GET = exports.DESC_COMMAND_ROUTE_LIST = exports.DESC_COMMAND_DISTRO_LIST = exports.DESC_COMMAND_DISTRO_DELETE = exports.DESC_COMMAND_ROUTE_CREATE = exports.DESC_COMMAND_DISTRO_CREATE = exports.DESC_COMMAND_DISTRO = exports.ERR_API_MESSAGE_REPLACER = exports.ERR_LOGIN_INVALID_BASE_URL = exports.ERR_LOGIN_NO_WORKSPACE_FOUND = exports.ERR_LOGIN_NO_WORKSPACES = exports.ERR_REGISTER_HTTP_CANCEL = exports.ERR_LOGIN_HTTP_CANCEL = exports.ERR_LOGIN_HTTP_FAILED = exports.ERR_LOGIN_HTTP_SERVER_PORT_TAKEN = exports.TXT_REGISTER_SUCCESS = exports.TXT_LOGIN_SUCCESS = exports.TXT_LOGIN_SELECT_WORKSPACE = exports.TXT_LOGIN_ENTER_BASE_URL = exports.TXT_LOGIN_PROVIDE_CODE = exports.TXT_REGISTER_OPEN_URL = exports.TXT_LOGIN_OPEN_URL = exports.TXT_REGISTER_OPENING_STAR = exports.TXT_LOGIN_OPENING_STAR = exports.TXT_REGISTER_OPENING = exports.TXT_LOGIN_OPENING = exports.TXT_LOGIN_SELECT_REGION = void 0;
20
- exports.DESC_COMMAND_ARTIFACT_CREATE = exports.DESC_COMMAND_ARTIFACT_GET = exports.TXT_ARTIFACT_DOCKER_LOGIN_FAILED = exports.TXT_ARTIFACT_DOCKER_LOGIN_SUCCESS = exports.TXT_ARTIFACT_VERSION_DELETE_CONFIRM = exports.TXT_ARTIFACT_DELETE_CONFIRM = exports.DESC_COMMAND_ARTIFACT_DELETE = exports.ERR_COMMAND_ARTIFACT_NO_PROJECTS = exports.DESC_COMMAND_ARTIFACT_VERSION_GET = exports.DESC_COMMAND_ARTIFACT_VERSION_LIST = exports.DESC_COMMAND_ARTIFACT_VERSION_DELETE = exports.DESC_COMMAND_ARTIFACT_DOCKER_LOGIN = exports.DESC_COMMAND_ARTIFACT_LIST = exports.DESC_COMMAND_ARTIFACT_VERSION = exports.ERR_COMMAND_DOMAIN_UNAVAILABLE = exports.OPTION_COMMAND_DOMAIN_IDENTIFIER = exports.ERR_COMMAND_DOMAIN_NO_DOMAINS = exports.TXT_COMMAND_DOMAIN_PROMPT_REQUIRED = exports.TXT_COMMAND_DOMAIN_BUY_SELECT_DOMAIN = exports.TXT_COMMAND_DOMAIN_PROVIDE_PROMPT = exports.ERR_COMMAND_DOMAIN_NOT_FOUND = exports.OPT_COMMAND_DOMAIN_ONLY_AVAILABLE = exports.OPT_COMMAND_DOMAIN_SORT = exports.OPT_COMMAND_DOMAIN_PHRASE = exports.OPT_COMMAND_DOMAIN_BUY_OWNER = exports.OPT_COMMAND_DOMAIN_BUY_TLD = exports.DESC_COMMAND_DOMAIN_GET = exports.DESC_COMMAND_DOMAIN_LIST = exports.DESC_COMMAND_DOMAIN_SEARCH = exports.DESC_COMMAND_DOMAIN_BUY = exports.DESC_COMMAND_DOMAIN = exports.ERR_ROUTE_NO_DEFAULT = exports.ERR_WRONG_ROUTE_TARGET = exports.ERR_COMMAND_ROUTE_NO_TARGET = exports.ERR_COMMAND_ROUTE_TYPE = exports.TXT_COMMAND_ROUTES_NOT_FOUND = exports.TXT_COMMAND_DISTROS_NOT_FOUND = exports.TXT_COMMAND_ROUTE_DELETED = exports.TXT_COMMAND_DISTRO_DELETED = exports.TXT_COMMAND_ROUTE_DELETE_CONFIRM = exports.TXT_COMMAND_DISTRO_DELETE_CONFIRM = exports.ERR_COMMAND_DISTRO_ENABLE_DISABLE = exports.ERR_COMMAND_NO_UPDATE = exports.ERR_COMMAND_DISTRO_NOT_FOUND = exports.ERR_COMMAND_SCOPE = exports.TXT_COMMAND_DISTRO_UPDATED = exports.TXT_COMMAND_ROUTE_UPDATED = exports.TXT_ROUTE_SERVE = exports.TXT_COMMAND_ROUTE_CREATED = exports.TXT_COMMAND_DISTRO_CREATED = void 0;
21
- exports.EXAMPLE_DISTRO_CREATE = exports.EXAMPLE_ROUTE_CREATE = exports.EXAMPLE_ROUTE_LIST = exports.EXAMPLE_ROUTE_UPDATE = exports.EXAMPLE_ROUTE_DELETE = exports.EXAMPLE_DISTRO_DELETE = exports.EXAMPLE_ROUTE_GET = exports.EXAMPLE_DISTRO_UPDATE = exports.EXAMPLE_DISTRO_GET = exports.EXAMPLE_DISTRO_LIST = exports.EXAMPLE_SANDBOX_CP = exports.ERR_PROJECT_NO_PROJECTS = exports.TXT_LOGIN_SELECT_PROJECT = exports.TXT_COMMAND_PROJECT_CREATED = exports.TXT_COMMAND_PROJECT_LINK_NOT_FOUND = exports.TXT_COMMAND_PROJECT_LINK_NAME = exports.TXT_COMMAND_PROJECT_LINK_SELECT_PROJECT = exports.TXT_COMMAND_PROJECT_LINK_TO = exports.TXT_COMMAND_PROJECT_LINK_EXISTING_DESC = exports.TXT_COMMAND_PROJECT_LINK_EXISTING = exports.TXT_COMMAND_PROJECT_LINK_CREATE_NEW_DESC = exports.TXT_COMMAND_PROJECT_LINK_CREATE_NEW = exports.ERR_COMMAND_PROJECT_LINK_DIR_NOT_DIR = exports.TXT_COMMAND_PROJECT_LINK_GIT_REPO_INITIALIZED = exports.TXT_COMMAND_PROJECT_LINK_GIT_REPO = exports.TXT_COMMAND_PROJECT_LINK_DIR_CONFIRM = exports.TXT_COMMAND_PROJECT_LINK_DIR_LINKED = exports.ERR_COMMAND_PROJECT_LINK_DIR_CREATE = exports.OPT_COMMAND_PROJECT_LINK_TRY_NOW = exports.OPT_COMMAND_PROJECT_LINK_SET_GIT_REMOTE = exports.OPT_COMMAND_PROJECT_LINK_HAS_REMOTE = exports.OPT_COMMAND_PROJECT_LINK_DIRECTORY = exports.OPT_COMMAND_PROJECT_LINK_GIT = exports.OPT_COMMAND_PROJECT_LINK_RELINK = exports.DESC_COMMAND_PROJECT_LINK = exports.DESC_COMMAND_PROJECT_LIST = exports.DESC_COMMAND_PROJECT_GIT = exports.DESC_COMMAND_PROJECT_GIT_CREDENTIAL = exports.DESC_COMMAND_PROJECT = exports.TXT_ARTIFACT_VERSION_DOWNLOAD = exports.TXT_ARTIFACT_PUBLISH = exports.TXT_ARTIFACT_CREATED = exports.TXT_ARTIFACT_VERSION_DELETED = exports.TXT_ARTIFACT_DELETED = exports.ERR_COMMAND_ARTIFACT_TYPE = exports.OPT_COMMAND_ARTIFACT_VERSION = exports.OPT_COMMAND_ARTIFACT_IDENTIFIER = exports.OPT_COMMAND_ARTIFACT_CREATE_IDENTIFIER = exports.OPT_COMMAND_ARTIFACT_NAME = exports.OPT_COMMAND_ARTIFACT_TYPE = void 0;
22
- exports.EXAMPLE_PIPELINE_RUN_APPLY = exports.EXAMPLE_PIPELINE_RUN_LOGS = exports.EXAMPLE_PIPELINE_RUN_JSONL = exports.EXAMPLE_PIPELINE_RUN_STATUS = exports.EXAMPLE_PIPELINE_RUN_START = exports.EXAMPLE_SANDBOX_ENDPOINT_LIST = exports.EXAMPLE_SANDBOX_ENDPOINT_GET = exports.EXAMPLE_SANDBOX_ENDPOINT_DELETE = exports.EXAMPLE_SANDBOX_ENDPOINT_CREATE = exports.EXAMPLE_ENVIRONMENT_DELETE = exports.EXAMPLE_ENVIRONMENT_UPDATE = exports.EXAMPLE_ENVIRONMENT_CREATE = exports.EXAMPLE_ENVIRONMENT_GET = exports.EXAMPLE_ENVIRONMENT_LIST = exports.EXAMPLE_TARGET_EXEC_LOGS = exports.EXAMPLE_TARGET_EXEC_LIST = exports.EXAMPLE_TARGET_EXEC_KILL = exports.EXAMPLE_TARGET_EXEC_STATUS = exports.EXAMPLE_TARGET_EXEC_COMMAND = exports.EXAMPLE_TARGET_DELETE = exports.EXAMPLE_TARGET_UPDATE = exports.EXAMPLE_TARGET_CREATE = exports.EXAMPLE_TARGET_GET = exports.EXAMPLE_TARGET_LIST = exports.EXAMPLE_SANDBOX_SNAPSHOT_LIST = exports.EXAMPLE_SANDBOX_SNAPSHOT_GET = exports.EXAMPLE_SANDBOX_SNAPSHOT_DELETE = exports.EXAMPLE_SANDBOX_SNAPSHOT_CREATE = exports.EXAMPLE_SANDBOX_EXEC_STATUS = exports.EXAMPLE_SANDBOX_EXEC_LOGS = exports.EXAMPLE_SANDBOX_APP_STATUS = exports.EXAMPLE_SANDBOX_APP_STOP = exports.EXAMPLE_SANDBOX_APP_REMOVE = exports.EXAMPLE_SANDBOX_APP_ADD = exports.EXAMPLE_SANDBOX_APP_START = exports.EXAMPLE_SANDBOX_APP_LOGS = exports.EXAMPLE_SANDBOX_EXEC_LIST = exports.EXAMPLE_SANDBOX_APP_LIST = exports.EXAMPLE_SANDBOX_EXEC_KILL = exports.EXAMPLE_SANDBOX_SSH = exports.EXAMPLE_SANDBOX_EXEC_COMMAND = exports.EXAMPLE_TUNNEL_START = exports.EXAMPLE_TUNNEL_TCP = exports.EXAMPLE_TUNNEL_TLS = exports.EXAMPLE_AGENT_TUNNEL_START = exports.EXAMPLE_AGENT_TUNNEL_STATUS = exports.EXAMPLE_AGENT_TUNNEL_REMOVE = exports.EXAMPLE_AGENT_TUNNEL_LIST = exports.EXAMPLE_TUNNEL_HTTP = exports.EXAMPLE_SANDBOX_CREATE = void 0;
23
- exports.EXAMPLE_CRAWL_LINK = exports.EXAMPLE_CRAWL_RUN = exports.EXAMPLE_TESTS_CAPTURE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CLOSE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CREATE = exports.EXAMPLE_TESTS_VISUAL_LINK = exports.EXAMPLE_TESTS_VISUAL_UPLOAD = exports.EXAMPLE_TESTS_VISUAL_SETUP = exports.EXAMPLE_TESTS_UNIT_LINK = exports.EXAMPLE_TESTS_UNIT_UPLOAD = exports.EXAMPLE_ARTIFACT_VERSION_DELETE = exports.EXAMPLE_ARTIFACT_VERSION_GET = exports.EXAMPLE_ARTIFACT_VERSION_LIST = exports.EXAMPLE_ARTIFACT_CREATE = exports.EXAMPLE_ARTIFACT_DELETE = exports.EXAMPLE_ARTIFACT_DOWNLOAD = exports.EXAMPLE_ARTIFACT_PUBLISH = exports.EXAMPLE_ARTIFACT_VERSION_CREATE = exports.EXAMPLE_PIPELINE_RUN_RETRY = exports.EXAMPLE_PIPELINE_RUN_LIST = exports.EXAMPLE_PIPELINE_LIST = exports.EXAMPLE_PIPELINE_YML = exports.EXAMPLE_PIPELINE_GET = exports.EXAMPLE_PIPELINE_UPDATE = exports.EXAMPLE_PIPELINE_DELETE = exports.EXAMPLE_PIPELINE_CREATE = exports.EXAMPLE_PIPELINE_RUN_CANCEL = void 0;
16
+ exports.ERR_TARGET_EXEC_NO_COMMAND = exports.ERR_TARGET_NO_EXECS = exports.ERR_TARGET_NOT_FOUND = exports.OPTION_TARGET_EXEC_FILE = exports.OPTION_TARGET_EXEC_ASYNC = exports.OPTION_TARGET_EXEC_COMMAND = exports.OPTION_TARGET_EXEC_LOG_LIMIT = exports.OPTION_TARGET_EXEC_LOG_OFFSET = exports.OPTION_TARGET_EXEC_LIMIT = exports.OPTION_TARGET_EXEC_ID = exports.OPTION_TARGET_YAML = exports.OPT_COMMAND_TARGET_SCOPE = exports.OPTION_TARGET_ENVIRONMENT = exports.OPTION_TARGET_PIPELINE = exports.OPTION_TARGET_IDENTIFIER = exports.DESC_COMMAND_TARGET_EXEC_LOGS = exports.DESC_COMMAND_TARGET_EXEC_LIST = exports.DESC_COMMAND_TARGET_EXEC_KILL = exports.DESC_COMMAND_TARGET_EXEC_STATUS = exports.DESC_COMMAND_TARGET_EXEC = exports.DESC_COMMAND_TARGET_DELETE = exports.DESC_COMMAND_TARGET_UPDATE = exports.DESC_COMMAND_TARGET_CREATE = exports.DESC_COMMAND_TARGET_GET = exports.DESC_COMMAND_TARGET_LIST = exports.DESC_COMMAND_TARGET = exports.TXT_SANDBOX_EXEC_FAILED = exports.TXT_SANDBOX_EXEC_INPROGRESS = exports.TXT_SANDBOX_EXEC_SUCCESS = exports.TXT_SANDBOX_EXEC_BACKGROUND = exports.TXT_SANDBOX_EXEC_ID = exports.ERR_SANDBOX_CP_INVALID_SOURCE = exports.ERR_SANDBOX_CP_INVALID_DEST = exports.ERR_SANDBOX_CP_REPLACE = exports.ERR_SANDBOX_CP_MKDIR = exports.ERR_SANDBOX_CP_PATH_EXISTS = exports.ERR_SANDBOX_CP_NOT_EMPTY_DIR = exports.ERR_SANDBOX_CP_READDIR = exports.ERR_SANDBOX_CP_DEST_NOT_FOLDER = exports.ERR_SANDBOX_CP_SOURCE_NOT_FOUND = exports.TXT_SANDBOX_CP_DONE = exports.TXT_SANDBOX_CP_PROGRESS = exports.TXT_SANDBOX_UNZIPPING_COUNT = exports.TXT_SANDBOX_UNZIP_DONE = exports.TXT_SANDBOX_UNZIP = exports.TXT_SANDBOX_CP_DOWNLOAD_DONE = exports.TXT_SANDBOX_CP_DOWNLOAD = exports.OPTION_SANDBOX_CP_IGNORE = exports.OPTION_SANDBOX_CP_USER = exports.OPTION_SANDBOX_CP_DOWNLOAD_REPLACE = void 0;
17
+ exports.DESC_COMMAND_API_REQUEST_URL = exports.DESC_COMMAND_API_GET = exports.DESC_COMMAND_API_PATCH = exports.DESC_COMMAND_API_DELETE = exports.DESC_COMMAND_API_PUT = exports.DESC_COMMAND_API_POST = exports.DESC_COMMAND_API_LIST = exports.DESC_COMMAND_API = exports.ERR_WHOAMI_LOGOUT = exports.TXT_WHOAMI_NO_WORKSPACE = exports.DESC_COMMAND_WHOAMI = exports.TXT_ENVIRONMENT_DELETED = exports.TXT_ENVIRONMENT_DELETE_CONFIRM = exports.TXT_ENVIRONMENT_UPDATED = exports.TXT_ENVIRONMENT_CREATED = exports.TXT_ENVIRONMENT_NOT_FOUND = exports.ERR_ENVIRONMENT_NOT_FOUND = exports.OPTION_ENVIRONMENT_ICON = exports.OPTION_ENVIRONMENT_PUBLIC_URL = exports.OPTION_ENVIRONMENT_TAGS = exports.OPTION_ENVIRONMENT_CREATE_IDENTIFIER = exports.OPTION_ENVIRONMENT_NAME = exports.OPTION_ENVIRONMENT_IDENTIFIER = exports.DESC_COMMAND_ENVIRONMENT_DELETE = exports.DESC_COMMAND_ENVIRONMENT_UPDATE = exports.DESC_COMMAND_ENVIRONMENT_CREATE = exports.DESC_COMMAND_ENVIRONMENT_GET = exports.DESC_COMMAND_ENVIRONMENT_LIST = exports.DESC_COMMAND_ENVIRONMENT = exports.TXT_TARGET_EXEC_KILLED = exports.TXT_TARGET_EXEC_KILL_CONFIRM = exports.WARN_TARGET_EXEC_TRUNCATED = exports.TXT_TARGET_EXEC_CANCELLED = exports.TXT_TARGET_EXEC_FAILED = exports.TXT_TARGET_EXEC_SUCCESS = exports.TXT_TARGET_EXEC_BACKGROUND = exports.TXT_TARGET_EXEC_ID = exports.TXT_TARGET_DELETED = exports.TXT_TARGET_DELETE_CONFIRM = exports.TXT_TARGET_UPDATED = exports.TXT_TARGET_CREATED = exports.TXT_TARGET_NOT_FOUND = exports.ERR_TARGET_SCOPE_NO_ENVIRONMENT = exports.ERR_TARGET_SCOPE_NO_PIPELINE = exports.ERR_TARGET_PIPELINE_ENV_CONFLICT = exports.ERR_TARGET_PIPELINE_REQUIRES_PROJECT = exports.ERR_TARGET_SCOPE = exports.ERR_TARGET_ENVIRONMENT_NOT_FOUND = exports.ERR_TARGET_EXEC_FILE_NOT_FOUND = exports.ERR_TARGET_EXEC_COMMAND_CONFLICT = void 0;
18
+ exports.TXT_LOGIN_SELECT_REGION = exports.TXT_WORKSPACE_NONE = exports.TXT_WORKSPACE_SET_SUCCESS = exports.ARG_COMMAND_WORKSPACE = exports.DESC_COMMAND_WORKSPACE_GET = exports.DESC_COMMAND_WORKSPACE_SET = exports.DESC_COMMAND_WORKSPACE_LIST = exports.DESC_COMMAND_WORKSPACE = exports.TXT_COMMAND_REGISTER_PROVIDE_NAME = exports.TXT_COMMAND_REGISTER_PROVIDE_EMAIL = exports.ERR_COMMAND_REGISTER_INVALID_NAME = exports.ERR_COMMAND_REGISTER_INVALID_EMAIL = exports.OPT_COMMAND_REGISTER_NAME = exports.OPT_COMMAND_REGISTER_EMAIL = exports.DESC_COMMAND_REGISTER = exports.TXT_LOGOUT_SUCCESS = exports.DESC_COMMAND_LOGOUT = exports.DESC_COMMAND_LOGIN = exports.HELP_COMMAND_MCP = exports.ERR_MCP_TOOL_FILTERED = exports.ERR_MCP_TOOLS_CATEGORY = exports.OPT_COMMAND_MCP_TOOLS = exports.ERR_MCP_REFRESH_FAILED = exports.ERR_MCP_URL_INVALID = exports.ERR_MCP_ENDPOINT = exports.DESC_COMMAND_MCP = exports.ERR_API_MEDIA_TYPE_NOT_IMPLEMENTED = exports.ERR_API_PARAMETER_NOT_REPLACED = exports.TXT_API_ENDPOINT_REQUIRED_SCOPES = exports.ERR_API_ENDPOINT_NOT_FOUND = exports.ERR_API_WRONG_METHOD = exports.ERR_SCHEMA_FETCH_FAILED = exports.OPT_COMMAND_API_INFO_URL = exports.OPT_COMMAND_API_INFO_SCHEMA = exports.OPT_COMMAND_API_INFO_METHOD = exports.OPT_COMMAND_API_LIST_SEARCH = exports.OPT_COMMAND_API_LIST_METHOD = exports.ERR_API_REQUEST_BODY_VALUE = exports.ERR_API_REQUEST_QUERY_VALUE = exports.ERR_API_REQUEST_INVALID_JSON = exports.ERR_API_REQUEST_FILE_ERROR = exports.ERR_API_REQUEST_OUTPUT_EXISTS = exports.DESC_COMMAND_API_INFO = exports.DESC_COMMAND_API_FORM = exports.DESC_COMMAND_API_JSON = exports.DESC_COMMAND_API_DATA = exports.DESC_COMMAND_API_OUTPUT = exports.DESC_COMMAND_API_REQUEST_QUERY = exports.DESC_COMMAND_API_PROJECT = exports.DESC_COMMAND_API_WORKSPACE = void 0;
19
+ exports.TXT_COMMAND_DISTRO_CREATED = exports.ERR_COMMAND_SCOPE_NO_PROJECT = exports.OPT_COMMAND_DISTRO_DISABLE = exports.OPT_COMMAND_DISTRO_ENABLE = exports.OPT_COMMAND_DISTRO_AGENT_NOTE = exports.OPT_COMMAND_DISTRO_NOTE = exports.OPT_COMMAND_DISTRO_NAME = exports.OPT_COMMAND_ROUTE_TARGET = exports.OPT_COMMAND_ROUTE_AGENT_NOTE = exports.OPT_COMMAND_ROUTE_NOTE = exports.OPT_COMMAND_ROUTE_PATH = exports.OPT_COMMAND_ROUTE_DOMAIN = exports.OPT_COMMAND_ROUTE_SUBDOMAIN = exports.OPT_COMMAND_ROUTE_TYPE = exports.OPT_COMMAND_ROUTE_ID = exports.OPT_COMMAND_DISTRO_IDENTIFIER = exports.OPT_COMMAND_SCOPE = exports.OPT_COMMAND_AGENT_NOTE = exports.OPT_COMMAND_NOTE = exports.DESC_COMMAND_ROUTE = exports.DESC_COMMAND_ROUTE_UPDATE = exports.DESC_COMMAND_ROUTE_DELETE = exports.DESC_COMMAND_ROUTE_GET = exports.DESC_COMMAND_DISTRO_UPDATE = exports.DESC_COMMAND_DISTRO_GET = exports.DESC_COMMAND_ROUTE_LIST = exports.DESC_COMMAND_DISTRO_LIST = exports.DESC_COMMAND_DISTRO_DELETE = exports.DESC_COMMAND_ROUTE_CREATE = exports.DESC_COMMAND_DISTRO_CREATE = exports.DESC_COMMAND_DISTRO = exports.ERR_API_MESSAGE_REPLACER = exports.ERR_LOGIN_INVALID_BASE_URL = exports.ERR_LOGIN_NO_WORKSPACE_FOUND = exports.ERR_LOGIN_NO_WORKSPACES = exports.ERR_REGISTER_HTTP_CANCEL = exports.ERR_LOGIN_HTTP_CANCEL = exports.ERR_LOGIN_HTTP_FAILED = exports.ERR_LOGIN_HTTP_SERVER_PORT_TAKEN = exports.TXT_REGISTER_SUCCESS = exports.TXT_LOGIN_SUCCESS = exports.TXT_LOGIN_SELECT_WORKSPACE = exports.TXT_LOGIN_ENTER_BASE_URL = exports.TXT_LOGIN_PROVIDE_CODE = exports.TXT_REGISTER_OPEN_URL = exports.TXT_LOGIN_OPEN_URL = exports.TXT_REGISTER_OPENING_STAR = exports.TXT_LOGIN_OPENING_STAR = exports.TXT_REGISTER_OPENING = exports.TXT_LOGIN_OPENING = void 0;
20
+ exports.OPT_COMMAND_ARTIFACT_TYPE = exports.DESC_COMMAND_ARTIFACT_CREATE = exports.DESC_COMMAND_ARTIFACT_GET = exports.TXT_ARTIFACT_DOCKER_LOGIN_FAILED = exports.TXT_ARTIFACT_DOCKER_LOGIN_SUCCESS = exports.TXT_ARTIFACT_VERSION_DELETE_CONFIRM = exports.TXT_ARTIFACT_DELETE_CONFIRM = exports.DESC_COMMAND_ARTIFACT_DELETE = exports.ERR_COMMAND_ARTIFACT_NO_PROJECTS = exports.DESC_COMMAND_ARTIFACT_VERSION_GET = exports.DESC_COMMAND_ARTIFACT_VERSION_LIST = exports.DESC_COMMAND_ARTIFACT_VERSION_DELETE = exports.DESC_COMMAND_ARTIFACT_DOCKER_LOGIN = exports.DESC_COMMAND_ARTIFACT_LIST = exports.DESC_COMMAND_ARTIFACT_VERSION = exports.ERR_COMMAND_DOMAIN_UNAVAILABLE = exports.OPTION_COMMAND_DOMAIN_IDENTIFIER = exports.ERR_COMMAND_DOMAIN_NO_DOMAINS = exports.TXT_COMMAND_DOMAIN_PROMPT_REQUIRED = exports.TXT_COMMAND_DOMAIN_BUY_SELECT_DOMAIN = exports.TXT_COMMAND_DOMAIN_PROVIDE_PROMPT = exports.ERR_COMMAND_DOMAIN_NOT_FOUND = exports.OPT_COMMAND_DOMAIN_ONLY_AVAILABLE = exports.OPT_COMMAND_DOMAIN_SORT = exports.OPT_COMMAND_DOMAIN_PHRASE = exports.OPT_COMMAND_DOMAIN_BUY_OWNER = exports.OPT_COMMAND_DOMAIN_BUY_TLD = exports.DESC_COMMAND_DOMAIN_GET = exports.DESC_COMMAND_DOMAIN_LIST = exports.DESC_COMMAND_DOMAIN_SEARCH = exports.DESC_COMMAND_DOMAIN_BUY = exports.DESC_COMMAND_DOMAIN = exports.ERR_ROUTE_NO_DEFAULT = exports.ERR_WRONG_ROUTE_TARGET = exports.ERR_COMMAND_ROUTE_NO_TARGET = exports.ERR_COMMAND_ROUTE_TYPE = exports.TXT_COMMAND_ROUTES_NOT_FOUND = exports.TXT_COMMAND_DISTROS_NOT_FOUND = exports.TXT_COMMAND_ROUTE_DELETED = exports.TXT_COMMAND_DISTRO_DELETED = exports.TXT_COMMAND_ROUTE_DELETE_CONFIRM = exports.TXT_COMMAND_DISTRO_DELETE_CONFIRM = exports.ERR_COMMAND_DISTRO_ENABLE_DISABLE = exports.ERR_COMMAND_NO_UPDATE = exports.ERR_COMMAND_DISTRO_NOT_FOUND = exports.ERR_COMMAND_SCOPE = exports.TXT_COMMAND_DISTRO_UPDATED = exports.TXT_COMMAND_ROUTE_UPDATED = exports.TXT_ROUTE_SERVE = exports.TXT_COMMAND_ROUTE_CREATED = void 0;
21
+ exports.EXAMPLE_SANDBOX_CREATE = exports.EXAMPLE_DISTRO_CREATE = exports.EXAMPLE_ROUTE_CREATE = exports.EXAMPLE_ROUTE_LIST = exports.EXAMPLE_ROUTE_UPDATE = exports.EXAMPLE_ROUTE_DELETE = exports.EXAMPLE_DISTRO_DELETE = exports.EXAMPLE_ROUTE_GET = exports.EXAMPLE_DISTRO_UPDATE = exports.EXAMPLE_DISTRO_GET = exports.EXAMPLE_DISTRO_LIST = exports.EXAMPLE_SANDBOX_CP = exports.ERR_PROJECT_NO_PROJECTS = exports.TXT_LOGIN_SELECT_PROJECT = exports.TXT_COMMAND_PROJECT_CREATED = exports.TXT_COMMAND_PROJECT_LINK_NOT_FOUND = exports.TXT_COMMAND_PROJECT_LINK_NAME = exports.TXT_COMMAND_PROJECT_LINK_SELECT_PROJECT = exports.TXT_COMMAND_PROJECT_LINK_TO = exports.TXT_COMMAND_PROJECT_LINK_EXISTING_DESC = exports.TXT_COMMAND_PROJECT_LINK_EXISTING = exports.TXT_COMMAND_PROJECT_LINK_CREATE_NEW_DESC = exports.TXT_COMMAND_PROJECT_LINK_CREATE_NEW = exports.ERR_COMMAND_PROJECT_LINK_DIR_NOT_DIR = exports.TXT_COMMAND_PROJECT_LINK_GIT_REPO_INITIALIZED = exports.TXT_COMMAND_PROJECT_LINK_GIT_REPO = exports.TXT_COMMAND_PROJECT_LINK_DIR_CONFIRM = exports.TXT_COMMAND_PROJECT_LINK_DIR_LINKED = exports.ERR_COMMAND_PROJECT_LINK_DIR_CREATE = exports.OPT_COMMAND_PROJECT_LINK_TRY_NOW = exports.OPT_COMMAND_PROJECT_LINK_SET_GIT_REMOTE = exports.OPT_COMMAND_PROJECT_LINK_HAS_REMOTE = exports.OPT_COMMAND_PROJECT_LINK_DIRECTORY = exports.OPT_COMMAND_PROJECT_LINK_GIT = exports.OPT_COMMAND_PROJECT_LINK_RELINK = exports.DESC_COMMAND_PROJECT_LINK = exports.DESC_COMMAND_PROJECT_LIST = exports.DESC_COMMAND_PROJECT_GIT = exports.DESC_COMMAND_PROJECT_GIT_CREDENTIAL = exports.DESC_COMMAND_PROJECT = exports.TXT_ARTIFACT_VERSION_DOWNLOAD = exports.TXT_ARTIFACT_PUBLISH = exports.TXT_ARTIFACT_CREATED = exports.TXT_ARTIFACT_VERSION_DELETED = exports.TXT_ARTIFACT_DELETED = exports.ERR_COMMAND_ARTIFACT_TYPE = exports.OPT_COMMAND_ARTIFACT_VERSION = exports.OPT_COMMAND_ARTIFACT_IDENTIFIER = exports.OPT_COMMAND_ARTIFACT_CREATE_IDENTIFIER = exports.OPT_COMMAND_ARTIFACT_NAME = void 0;
22
+ exports.EXAMPLE_PIPELINE_RUN_CANCEL = exports.EXAMPLE_PIPELINE_RUN_APPLY = exports.EXAMPLE_PIPELINE_RUN_LOGS = exports.EXAMPLE_PIPELINE_RUN_JSONL = exports.EXAMPLE_PIPELINE_RUN_STATUS = exports.EXAMPLE_PIPELINE_RUN_START = exports.EXAMPLE_SANDBOX_ENDPOINT_LIST = exports.EXAMPLE_SANDBOX_ENDPOINT_GET = exports.EXAMPLE_SANDBOX_ENDPOINT_DELETE = exports.EXAMPLE_SANDBOX_ENDPOINT_CREATE = exports.EXAMPLE_ENVIRONMENT_DELETE = exports.EXAMPLE_ENVIRONMENT_UPDATE = exports.EXAMPLE_ENVIRONMENT_CREATE = exports.EXAMPLE_ENVIRONMENT_GET = exports.EXAMPLE_ENVIRONMENT_LIST = exports.EXAMPLE_TARGET_EXEC_LOGS = exports.EXAMPLE_TARGET_EXEC_LIST = exports.EXAMPLE_TARGET_EXEC_KILL = exports.EXAMPLE_TARGET_EXEC_STATUS = exports.EXAMPLE_TARGET_EXEC_COMMAND = exports.EXAMPLE_TARGET_DELETE = exports.EXAMPLE_TARGET_UPDATE = exports.EXAMPLE_TARGET_CREATE = exports.EXAMPLE_TARGET_GET = exports.EXAMPLE_TARGET_LIST = exports.EXAMPLE_SANDBOX_SNAPSHOT_LIST = exports.EXAMPLE_SANDBOX_SNAPSHOT_GET = exports.EXAMPLE_SANDBOX_SNAPSHOT_DELETE = exports.EXAMPLE_SANDBOX_SNAPSHOT_CREATE = exports.EXAMPLE_SANDBOX_EXEC_STATUS = exports.EXAMPLE_SANDBOX_EXEC_LOGS = exports.EXAMPLE_SANDBOX_APP_STATUS = exports.EXAMPLE_SANDBOX_APP_STOP = exports.EXAMPLE_SANDBOX_APP_REMOVE = exports.EXAMPLE_SANDBOX_APP_ADD = exports.EXAMPLE_SANDBOX_APP_START = exports.EXAMPLE_SANDBOX_APP_LOGS = exports.EXAMPLE_SANDBOX_EXEC_LIST = exports.EXAMPLE_SANDBOX_APP_LIST = exports.EXAMPLE_SANDBOX_EXEC_KILL = exports.EXAMPLE_SANDBOX_SSH = exports.EXAMPLE_SANDBOX_EXEC_COMMAND = exports.EXAMPLE_TUNNEL_START = exports.EXAMPLE_TUNNEL_TCP = exports.EXAMPLE_TUNNEL_TLS = exports.EXAMPLE_AGENT_TUNNEL_START = exports.EXAMPLE_AGENT_TUNNEL_STATUS = exports.EXAMPLE_AGENT_TUNNEL_REMOVE = exports.EXAMPLE_AGENT_TUNNEL_LIST = exports.EXAMPLE_TUNNEL_HTTP = void 0;
23
+ exports.EXAMPLE_CRAWL_LINK = exports.EXAMPLE_CRAWL_RUN = exports.EXAMPLE_TESTS_CAPTURE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CLOSE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CREATE = exports.EXAMPLE_TESTS_VISUAL_LINK = exports.EXAMPLE_TESTS_VISUAL_UPLOAD = exports.EXAMPLE_TESTS_VISUAL_SETUP = exports.EXAMPLE_TESTS_UNIT_LINK = exports.EXAMPLE_TESTS_UNIT_UPLOAD = exports.EXAMPLE_ARTIFACT_VERSION_DELETE = exports.EXAMPLE_ARTIFACT_VERSION_GET = exports.EXAMPLE_ARTIFACT_VERSION_LIST = exports.EXAMPLE_ARTIFACT_CREATE = exports.EXAMPLE_ARTIFACT_DELETE = exports.EXAMPLE_ARTIFACT_DOWNLOAD = exports.EXAMPLE_ARTIFACT_PUBLISH = exports.EXAMPLE_ARTIFACT_VERSION_CREATE = exports.EXAMPLE_PIPELINE_RUN_RETRY = exports.EXAMPLE_PIPELINE_RUN_LIST = exports.EXAMPLE_PIPELINE_LIST = exports.EXAMPLE_PIPELINE_YML = exports.EXAMPLE_PIPELINE_GET = exports.EXAMPLE_PIPELINE_UPDATE = exports.EXAMPLE_PIPELINE_DELETE = exports.EXAMPLE_PIPELINE_CREATE = void 0;
24
24
  const utils_1 = require("./utils");
25
25
  exports.ERR_CANCELLED = 'Cancelled';
26
26
  exports.ERR_REST_API_GENERAL_ERROR = 'Something went wrong';
@@ -911,7 +911,6 @@ exports.OPTION_TARGET_EXEC_LOG_OFFSET = 'Log line offset. Default: 0';
911
911
  exports.OPTION_TARGET_EXEC_LOG_LIMIT = 'Maximum number of log lines. Default: all lines';
912
912
  exports.OPTION_TARGET_EXEC_COMMAND = 'Command to execute on the target (e.g. a SQL query or a shell command)';
913
913
  exports.OPTION_TARGET_EXEC_ASYNC = 'Start the command and return the execution id without waiting for completion';
914
- exports.OPTION_TARGET_EXEC_WAIT = 'Deprecated: waiting is the default. Use --async to run in background';
915
914
  exports.OPTION_TARGET_EXEC_FILE = 'Read the command from a file instead of the argument';
916
915
  // Target errors
917
916
  exports.ERR_TARGET_NOT_FOUND = 'Target not found';
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.getRootDir = exports.TARGET_ONLY_PORT_REGEX = exports.TARGET_HTTP_REGEX = exports.TARGET_TCP_TLS_REGEX = exports.ApiErrorTunnelsDisabled = exports.ApiErrorWorkspaceFlagged = exports.ApiErrorTunnelLimitReached = exports.ApiErrorAgentLimitReached = exports.ApiErrorDomainRestricted = exports.ApiErrorTargetInvalid = exports.ApiErrorWrongToken = exports.ApiErrorFailedToConnect = exports.ApiErrorAgentNotFound = exports.ARTIFACT_AUTH_TYPE = exports.TARGET_EXEC_STATUS = exports.TARGET_SCOPE = exports.ARTIFACT_TYPE = exports.SANDBOX_SNAPSHOT_STATUS = exports.SANDBOX_APP_STATUS = exports.SANDBOX_SETUP_STATUS = exports.SANDBOX_EXEC_STATUS = exports.SANDBOX_EXEC_RUNTIME = exports.SANDBOX_STATUS = exports.REST_API_ENDPOINT = exports.REST_API_REGION = exports.DEFAULT_SANDBOX_CP_USER = exports.ARTIFACT_DEFAULT_VERSION = exports.SUGGESTED_BROWSER_VERSION = exports.AGENT_UPDATE_STATUS_TTL_MS = exports.AGENT_UPDATE_PROBATION_MS = exports.AGENT_UPDATE_MAX_ATTEMPTS = exports.AGENT_FETCH_RETRY_MAX = exports.AGENT_FETCH_RETRY_MIN = exports.SSH_HANDSHAKE_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.getSshIdent = exports.TUNNEL_SSH_IDENT_SHARED_H2 = exports.TUNNEL_CLIENT_IP_HEADER = exports.TUNNEL_HTTP2_SHED_LOG_INTERVAL = exports.TUNNEL_HTTP2_MAX_SESSIONS = exports.TUNNEL_HTTP2_SESSION_IDLE_TIMEOUT = exports.TUNNEL_HTTP_RETRY_AFTER = exports.TUNNEL_HTTP_MAX_INFLIGHT = exports.TUNNEL_HTTP_CB_MIN_REQUESTS = exports.TUNNEL_HTTP_CB_WINDOW = exports.TUNNEL_MAX_REQUEST_SIZE_TO_SYNC = exports.TUNNEL_HTTP_LOG_MAX_REQUESTS = exports.TUNNEL_HTTP_LOG_MAX_BODY = exports.TUNNEL_HTTP_RATE_WINDOW = exports.TUNNEL_HTTP_RATE_LIMIT = void 0;
40
- exports.getGitName = exports.getGitEmail = exports.MCP_TOOL_CATEGORIES = exports.getBasicCommandTls = exports.getBasicCommandHttp = exports.getBasicCommandSandboxEndpoint = exports.getBasicCommandTcp = exports.getCurrentUser = exports.getServiceUser = exports.getRealTargetHost = exports.isWindows = exports.isLinux = exports.isOsx = exports.isDocker = exports.truncate = exports.sleep = exports.getLatestVersion = exports.getVersionEnv = exports.getCurrentVersionWithoutEnv = exports.getVersionWithoutEnv = exports.getVersion = exports.isInstalledByChoco = exports.isInstalledByApt = exports.isInstalledByBrew = exports.isInstalledByNpm = exports.isNpmGlobalWritable = exports.isPathWritable = exports.tryGetEmail = exports.execLocally = exports.getHomeDirectory = exports.HOME_DIR_NAME = exports.chownToHomeOwner = exports.isDomainAvailable = exports.newCommand = exports.formatBytes = exports.formatHelp = exports.getPlatform = exports.getHostname = exports.isStringRegExp = exports.getWorkingDir = void 0;
40
+ exports.getGitName = exports.getGitEmail = exports.MCP_TOOL_CATEGORIES = exports.getBasicCommandTls = exports.getBasicCommandHttp = exports.getBasicCommandSandboxEndpoint = exports.getBasicCommandTcp = exports.getCurrentUser = exports.getServiceUser = exports.getRealTargetHost = exports.isWindows = exports.isLinux = exports.isOsx = exports.isDocker = exports.truncate = exports.sleep = exports.getLatestVersion = exports.getVersionEnv = exports.getCurrentVersionWithoutEnv = exports.isVersionNewer = exports.getVersionWithoutEnv = exports.parseVersion = exports.getVersion = exports.isInstalledByChoco = exports.isInstalledByApt = exports.isInstalledByBrew = exports.isInstalledByNpm = exports.isNpmGlobalWritable = exports.isPathWritable = exports.tryGetEmail = exports.execLocally = exports.getHomeDirectory = exports.HOME_DIR_NAME = exports.chownToHomeOwner = exports.isDomainAvailable = exports.newCommand = exports.formatBytes = exports.formatHelp = exports.getPlatform = exports.getHostname = exports.isStringRegExp = exports.getWorkingDir = void 0;
41
41
  exports.apiErrorCodeToClass = apiErrorCodeToClass;
42
42
  exports.isFile = isFile;
43
43
  exports.getAppWorkspaceUrl = getAppWorkspaceUrl;
@@ -599,19 +599,44 @@ const getVersion = () => {
599
599
  return cachedVersion;
600
600
  };
601
601
  exports.getVersion = getVersion;
602
+ // The one place that knows what a version string looks like: `x.y.z` optionally followed by
603
+ // a channel suffix. AgentSystem.verifyBinary keeps a regex of its own on purpose - it fishes
604
+ // a version out of selftest output rather than parsing one, so it must not be anchored.
605
+ const parseVersion = (version) => {
606
+ const m = (version || '').match(/^(\d+)\.(\d+)\.(\d+)/);
607
+ if (!m)
608
+ return null;
609
+ return {
610
+ version: m[0],
611
+ major: Number(m[1]),
612
+ minor: Number(m[2]),
613
+ patch: Number(m[3]),
614
+ };
615
+ };
616
+ exports.parseVersion = parseVersion;
602
617
  const getVersionWithoutEnv = (version) => {
603
- const m = version.match(/^\d+\.\d+\.\d+/);
604
- if (m)
605
- return m[0];
606
- return '0.0.0';
618
+ return (0, exports.parseVersion)(version)?.version || '0.0.0';
607
619
  };
608
620
  exports.getVersionWithoutEnv = getVersionWithoutEnv;
621
+ // An update is only an update when the other side is actually ahead. Comparing the strings
622
+ // for inequality also fired on a build that is newer than what the channel publishes - a
623
+ // local dev build, or a machine that got the release before es.buddy.works did - and told
624
+ // the user to "update" to an older version. Both sides carry the same env suffix (latest is
625
+ // fetched per env), so the numeric triple decides.
626
+ const isVersionNewer = (version, than) => {
627
+ const a = (0, exports.parseVersion)(version);
628
+ const b = (0, exports.parseVersion)(than);
629
+ if (!a || !b)
630
+ return false;
631
+ if (a.major !== b.major)
632
+ return a.major > b.major;
633
+ if (a.minor !== b.minor)
634
+ return a.minor > b.minor;
635
+ return a.patch > b.patch;
636
+ };
637
+ exports.isVersionNewer = isVersionNewer;
609
638
  const getCurrentVersionWithoutEnv = () => {
610
- const v = (0, exports.getVersion)();
611
- const m = v.match(/^\d+\.\d+\.\d+/);
612
- if (m)
613
- return m[0];
614
- return '0.0.0';
639
+ return (0, exports.getVersionWithoutEnv)((0, exports.getVersion)());
615
640
  };
616
641
  exports.getCurrentVersionWithoutEnv = getCurrentVersionWithoutEnv;
617
642
  const getVersionEnv = () => {
@@ -640,10 +665,20 @@ const getLatestVersion = async () => {
640
665
  });
641
666
  if (response.status === 200) {
642
667
  const data = await response.text();
643
- const v = data.trim();
668
+ // A 200 whose body is not a version - a padded value, an error page from something in
669
+ // front of the bucket - is nothing a caller can act on, so it fails here rather than
670
+ // downstream, where every comparison would read it as "no update". The parsed triple
671
+ // is what gets returned, not the body: the regex is unanchored at the end, so a body
672
+ // that merely starts with a version would otherwise carry its tail into the banners,
673
+ // the update log and the equality test in AgentManager.remoteUpdate.
674
+ // Only the agent's remote update surfaces this - `commandPre` swallows it, so the CLI
675
+ // stays quiet about a channel it could not read.
676
+ const parsed = (0, exports.parseVersion)(data.trim());
677
+ if (!parsed)
678
+ throw new Error(texts_1.ERR_FETCH_VERSION);
644
679
  if (env === 'prod')
645
- return v;
646
- return `${v}-${env}`;
680
+ return parsed.version;
681
+ return `${parsed.version}-${env}`;
647
682
  }
648
683
  else {
649
684
  return '0.0.0';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bdy",
3
3
  "preferGlobal": false,
4
- "version": "1.23.14-dev-target-commands",
4
+ "version": "1.23.16-dev-target-commands",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
7
7
  "homepage": "https://buddy.works/docs/cli",