@duyquangnvx/create-agent-cli 0.24.0 → 0.26.0

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/CHANGELOG.md CHANGED
@@ -4,6 +4,22 @@ What changed in each release of `@duyquangnvx/agent-cli` (the Runtime) and `@duy
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## v0.26.0 (2026-11-06)
8
+
9
+ ### Added
10
+
11
+ - `ctx.dryRun` tells a Command whether the run is a dry run: true only in the `plan` of a run given `--dry-run`, false in `apply` and in every Command without a Plan. A plan whose reads change something of their own, such as a stored login, can skip that change without reading the command line.
12
+
13
+ ## v0.25.0 (2026-11-05)
14
+
15
+ ### Changed
16
+
17
+ - **Breaking:** a failure of Exit class `wait`, such as `DEADLINE_EXCEEDED` or a pending approval, prints `wait:` rather than `error:` in text mode, in yellow, since nothing is broken yet. Its exit code, hint, Next steps and `--json` form stay as they were. Root help describes exit 75 as "not done yet: do what the hint says, then run it again". A CLI whose tests pin these strings updates them.
18
+
19
+ ### Fixed
20
+
21
+ - The Scaffolder's README sentence to paste keeps its `<your task>` placeholder when rendered. A CLI that exists already adds the backticks to that line in its README.
22
+
7
23
  ## v0.24.0 (2026-11-05)
8
24
 
9
25
  ### Added
package/dist/bin.js CHANGED
@@ -6033,11 +6033,15 @@ function printedDetail(error, format) {
6033
6033
  const value = Reflect.get(details, key);
6034
6034
  return typeof value === "string" ? value : void 0;
6035
6035
  }
6036
+ function labelOf(error, { isBug, isWait, style }) {
6037
+ if (isWait(error)) return style.yellow("wait:");
6038
+ return style.red(isBug(error) ? "internal error:" : "error:");
6039
+ }
6036
6040
  function errorLines(error, format) {
6037
6041
  const fields = fieldsOf$1(error, format);
6038
6042
  const blocks = [printedDetail(error, format), debugTrace(error, format)].filter((block) => block !== void 0);
6039
6043
  const { style } = format;
6040
- const label = style.red(format.isBug(error) ? "internal error:" : "error:");
6044
+ const label = labelOf(error, format);
6041
6045
  const between = blocks.map((block) => `${block}\n`).join("");
6042
6046
  const runs = (fields.next ?? []).map((line) => `${style.cyan("run:")} ${line}\n`).join("");
6043
6047
  return `${label} ${fields.message}\n${between}${style.cyan("hint:")} ${fields.hint}\n${runs}`;
@@ -7085,9 +7089,9 @@ function secretRows(secrets, commands) {
7085
7089
  /** The bundler's stamp, absent when the CLI runs unbundled. Read per call, so a test can define it. */
7086
7090
  function buildStamp() {
7087
7091
  return {
7088
- "sha": "45caa4e",
7092
+ "sha": "ed7073b",
7089
7093
  "dirty": false,
7090
- "builtAt": "2026-11-05T07:43:22.000Z"
7094
+ "builtAt": "2026-11-06T05:43:19.000Z"
7091
7095
  };
7092
7096
  }
7093
7097
  /** The first line of `--version`: the version, and the commit and time of a stamped build. */
@@ -9367,6 +9371,9 @@ function exitClassOfOne(error, errors) {
9367
9371
  function isBug(error, errors) {
9368
9372
  return exitClassOfOne(error, errors) === "bug";
9369
9373
  }
9374
+ function isWait(error, errors) {
9375
+ return exitClassOfOne(error, errors) === "wait";
9376
+ }
9370
9377
  const ACT_FIRST = [
9371
9378
  "caller",
9372
9379
  "operator",
@@ -10023,7 +10030,7 @@ const EXIT_MEANINGS = {
10023
10030
  caller: "the caller fixes its command",
10024
10031
  operator: "the operator acts on their machine",
10025
10032
  source: "someone at the source acts",
10026
- wait: "nobody acts: wait, then run it again"
10033
+ wait: "not done yet: do what the hint says, then run it again"
10027
10034
  };
10028
10035
  function exitCodeRows(cli) {
10029
10036
  return [
@@ -10207,7 +10214,8 @@ function errorText(error, format) {
10207
10214
  const text = formatRuntimeError(error, {
10208
10215
  ...format,
10209
10216
  runAs: format.invocation.runAs,
10210
- isBug: (each) => isBug(each, format.errors)
10217
+ isBug: (each) => isBug(each, format.errors),
10218
+ isWait: (each) => isWait(each, format.errors)
10211
10219
  });
10212
10220
  const { usageHelp, json } = format;
10213
10221
  return usageHelp !== void 0 && !json && error instanceof UsageError ? `${text}\n${usageHelp}` : text;
@@ -11231,7 +11239,7 @@ function portsBaseOf(scope, signal) {
11231
11239
  };
11232
11240
  }
11233
11241
  function contextOf(portsBase, control, parts) {
11234
- const { ports, project, force, secrets = [], rerun, deliver, notice } = parts;
11242
+ const { ports, project, force, dryRun, secrets = [], rerun, deliver, notice } = parts;
11235
11243
  const declared = new Set(secrets.map(({ name }) => name));
11236
11244
  return {
11237
11245
  ...portsBase,
@@ -11249,6 +11257,7 @@ function contextOf(portsBase, control, parts) {
11249
11257
  },
11250
11258
  project,
11251
11259
  force,
11260
+ dryRun,
11252
11261
  rerun,
11253
11262
  poll: (check, { intervalMs, signal: stop }) => poll(portsBase.clock, check, intervalMs, stop === void 0 ? control.signal : AbortSignal.any([control.signal, stop])),
11254
11263
  deliver,
@@ -11372,6 +11381,7 @@ async function runCommand(cli, routed, options, write, baseFormat) {
11372
11381
  ports: once(() => ports(portsBase)),
11373
11382
  project,
11374
11383
  force: flags.force,
11384
+ dryRun: flags.dryRun,
11375
11385
  secrets: command.secrets,
11376
11386
  rerun: rerunOf,
11377
11387
  notice: (text) => write.stderr(noticeLine(text, routed.json)),
@@ -11604,7 +11614,7 @@ async function runProcess(cli) {
11604
11614
  //#region package.json
11605
11615
  var package_default = {
11606
11616
  name: "@duyquangnvx/create-agent-cli",
11607
- version: "0.24.0",
11617
+ version: "0.26.0",
11608
11618
  description: "Creates a new Agent CLI repository wired to @duyquangnvx/agent-cli.",
11609
11619
  type: "module",
11610
11620
  engines: { "node": ">=22.12.0" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duyquangnvx/create-agent-cli",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
4
  "description": "Creates a new Agent CLI repository wired to @duyquangnvx/agent-cli.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -21,7 +21,7 @@
21
21
  "access": "public"
22
22
  },
23
23
  "devDependencies": {
24
- "@duyquangnvx/agent-cli": "0.24.0",
24
+ "@duyquangnvx/agent-cli": "0.26.0",
25
25
  "tsdown": "0.23.0",
26
26
  "zod": "4.6.7"
27
27
  },
@@ -1,5 +1,5 @@
1
1
  Paste this to your coding agent, with your task in it:
2
2
 
3
- > Run `{{setupLine}}`, then use {{binName}} to <your task>.
3
+ > Run `{{setupLine}}`, then use {{binName}} to `<your task>`.
4
4
 
5
5
  That line installs the CLI and its skill. In a terminal it works the same.