@levr-one/cli 0.12.15 → 0.12.17

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.
@@ -885,7 +885,9 @@ function besideName(serverName, url) {
885
885
  * `McpToolAdapterService.DESTRUCTIVE_TOOL_NAMES`.
886
886
  *
887
887
  * Rules for this list:
888
- * - Only the non-destructive tools a first task actually calls. A tool that
888
+ * - Only the non-destructive tools a first task or an ordinary gated issue
889
+ * actually calls (`batch_verify_gates`: agents used it in the real-agent
890
+ * trial, user decision 2026-11-04). A tool that
889
891
  * can delete, merge away or permanently unlink anything never belongs here.
890
892
  * - Nor does a tool whose PURPOSE is to waive a check (waive_gate): see
891
893
  * {@link LEVR_NEVER_PREAPPROVED_TOOLS}.
@@ -914,7 +916,8 @@ const LEVR_PREAPPROVED_TOOLS = [
914
916
  "get_issue_comments",
915
917
  "add_issue_comment",
916
918
  "deploy_gates",
917
- "verify_deliverable_gates",
919
+ "verify_gates",
920
+ "batch_verify_gates",
918
921
  "report_gate_results",
919
922
  "get_gate_status",
920
923
  "transition_issue",
@@ -937,7 +940,8 @@ const LEVR_PREAPPROVED_TOOL_DESCRIPTIONS = {
937
940
  add_issue_comment: "adds a comment to a task",
938
941
  deploy_gates: "writes the task's gates; it can also change or withdraw a gate (recorded)",
939
942
  transition_issue: "moves a task to another status; Done is refused while a required check fails, unless your agent waives that check (the waiver is recorded)",
940
- verify_deliverable_gates: "runs the task's checklist",
943
+ verify_gates: "runs the task's checklist",
944
+ batch_verify_gates: "runs the checklists of several tasks in one call",
941
945
  report_gate_results: "records the checklist results your agent ran",
942
946
  get_gate_status: "reads the task's checklist results",
943
947
  get_practice_app: "reads the sample practice app",
@@ -1704,7 +1704,7 @@ const WRAPPER_PREFIX_RE = /* @__PURE__ */ new RegExp("^(?:" + [
1704
1704
  */
1705
1705
  const TEST_RUNNER_RE = new RegExp([
1706
1706
  String.raw`^yarn(?:\s+(?:-s|--silent|--verbose|--offline|--frozen-lockfile|--immutable|workspace\s+\S+|--cwd\s+\S+))*\s+(?:run\s+)?(?:test(?::[\w-]+)?\b|vitest\b|jest\b)`,
1707
- String.raw`^yarn\s+workspaces\s+foreach(?:\s+(?:--(?:include|exclude|from|jobs)(?:=|\s+)\S+|-j\s+\S+|-[A-Za-z]+|--[\w-]+(?:=\S+)?))*\s+(?:run\s+)?test(?::[\w-]+)?\b`,
1707
+ String.raw`^yarn\s+workspaces\s+foreach(?:\s+(?:--(?:include|exclude|from|jobs)(?:=\S+|\s+[^-\s]\S*)|-j\s+[^-\s]\S*|-[A-Za-z]+|--[\w-]+(?:=\S+)?))*\s+(?:run\s+)?test(?::[\w-]+)?\b`,
1708
1708
  String.raw`^npm\s+(?:run\s+)?test(?::[\w-]+)?\b`,
1709
1709
  String.raw`^pnpm\s+(?:(?:--filter|-F|--dir|-C)\s+\S+\s+|(?:-r|--recursive)\s+)*(?:run\s+)?test(?::[\w-]+)?\b`,
1710
1710
  String.raw`^pnpm\s+(?:exec\s+|dlx\s+)?(?:vitest|jest|playwright)\b`,
@@ -1722,6 +1722,9 @@ const TEST_RUNNER_RE = new RegExp([
1722
1722
  String.raw`^dotnet\s+test(?:\s|$)`,
1723
1723
  String.raw`^(?:bundle\s+exec\s+)?(?:bin\/)?rspec(?:\s|$)`,
1724
1724
  String.raw`^(?:npx\s+(?:(?:--yes|-y|--no-install|--no|-p\s+\S+|--package(?:=|\s+)\S+)\s+)*|yarn\s+(?:run\s+)?|pnpm\s+(?:exec\s+)?|(?:\.\/)?node_modules\/\.bin\/)?mocha(?:\s|$)`,
1725
+ String.raw`^(?:(?:\S*\/)?node|(?:(?:npx(?:\s+(?:--yes|-y))*|pnpm(?:\s+exec)?|yarn)\s+)?(?:\S*\/)?tsx)\s+(?:(?:--(?:import|require|loader|experimental-loader|test-reporter|test-reporter-destination|test-name-pattern|test-skip-pattern|test-concurrency|test-timeout|test-shard|test-isolation|test-global-setup|test-coverage-exclude|test-coverage-include|test-coverage-branches|test-coverage-functions|test-coverage-lines|env-file|env-file-if-exists|watch-path|disable-warning|experimental-config-file|tsconfig|conditions|input-type|title)|-r|-C)\s+[^-\s]\S*\s+|-\S+\s+)*?--test(?:\s|$)`,
1726
+ String.raw`^(?:(?:uv|poetry|pipenv|hatch)\s+run\s+)?(?:\S*\/)?python[\d.]*\s+(?:-[WX]\s+[^-\s]\S*\s+|-[A-Za-z]+\s+)*-m\s+unittest(?:\s|$)`,
1727
+ String.raw`^(?:(?:uv|poetry|pipenv|hatch)\s+run\s+)?(?:(?:\S*\/)?python[\d.]*\s+-m\s+)?coverage\s+run\s+(?:--(?:source|rcfile|include|omit|data-file|context|concurrency)\s+[^-\s]\S*\s+|-\S+\s+)*?-m\s+unittest(?:\s|$)`,
1725
1728
  String.raw`^yarn\s+playwright\s+test(?:\s|$)`
1726
1729
  ].join("|"));
1727
1730
  /**
@@ -1756,6 +1759,24 @@ const SEMANTIC_RUNNER_RE = /* @__PURE__ */ new RegExp(`(?:^|[\\s|;&(])(?:${JUDGE
1756
1759
  * any wrapper) is a candidate; a judge is one whose FIRST word is the binary.
1757
1760
  */
1758
1761
  const JUDGE_COMMAND_RE = /* @__PURE__ */ new RegExp(`^(?:${JUDGE_BINARIES})(?:\\s|$)`);
1762
+ /**
1763
+ * Commands that build, install or tear down around a run, by shape — review
1764
+ * round 3 (CRA F-007). Taken for the run, a `yarn build` that printed `Done
1765
+ * in 2.1s` stood in for a silent `make test` beside it. Maven and Gradle
1766
+ * lifecycles (`mvn install`, `gradle build`) run the tests, so they are not
1767
+ * listed; and a segment a runner rule recognises is never one of these.
1768
+ */
1769
+ const BUILD_OR_TEARDOWN_RE = new RegExp([
1770
+ String.raw`^(?:yarn|npm|pnpm|bun)(?:\s+run)?\s+(?:build|install|ci|i|add|lint|format|typecheck|tsc|prepare|compile|codegen|generate)(?::[\w-]+)?(?:\s|$)`,
1771
+ String.raw`^(?:yarn|pnpm|bun)$`,
1772
+ String.raw`^(?:(?:\S*\/)?python[\d.]*\s+-m\s+)?pip[\d.]*\s+install(?:\s|$)`,
1773
+ String.raw`^(?:\S*\/)?tsc(?:\s|$)`,
1774
+ String.raw`^cargo\s+(?:\+\S+\s+)?(?:build|check|fetch)(?:\s|$)`,
1775
+ String.raw`^go\s+(?:build|mod|generate|vet|install)(?:\s|$)`,
1776
+ String.raw`^docker(?:-compose|\s+compose)?(?:\s+-\S+(?:\s+[^-\s]\S*)?)*\s+(?:build|up|down|stop|pull|start|rm|kill|restart)(?:\s|$)`,
1777
+ String.raw`^(?:bundle|composer)\s+install(?:\s|$)`,
1778
+ String.raw`^dotnet\s+(?:build|restore)(?:\s|$)`
1779
+ ].join("|"));
1759
1780
 
1760
1781
  //#endregion
1761
1782
  //#region ../shared/dist/runs/gate-binding-config.js
package/dist/cli.js CHANGED
@@ -226,7 +226,7 @@ Examples:
226
226
  aliases: { y: "yes" }
227
227
  },
228
228
  loader: async () => {
229
- const { mcpAddHandler } = await import("./addHandler-DG2flbF8.js");
229
+ const { mcpAddHandler } = await import("./addHandler-CefzsA_l.js");
230
230
  return mcpAddHandler;
231
231
  }
232
232
  });
@@ -688,7 +688,7 @@ Examples:
688
688
  }
689
689
  },
690
690
  loader: async () => {
691
- const { gatesBindingsExportHandler } = await import("./bindingsHandler-DQHF9AqQ.js");
691
+ const { gatesBindingsExportHandler } = await import("./bindingsHandler-WiV3-m6N.js");
692
692
  return gatesBindingsExportHandler;
693
693
  }
694
694
  });
@@ -761,7 +761,7 @@ Examples:
761
761
  aliases: { w: "workspace-id" }
762
762
  },
763
763
  loader: async () => {
764
- const { gatesBindingsImportHandler } = await import("./bindingsHandler-DQHF9AqQ.js");
764
+ const { gatesBindingsImportHandler } = await import("./bindingsHandler-WiV3-m6N.js");
765
765
  return gatesBindingsImportHandler;
766
766
  }
767
767
  });
@@ -980,8 +980,8 @@ Examples:
980
980
  //#region src/commands/gates/run.ts
981
981
  const gatesRunCommand = buildCommand({
982
982
  docs: {
983
- brief: "Run a deliverable's gate commands and report the raw results",
984
- fullDescription: `Verify a deliverable's gates, run every local command from the current
983
+ brief: "Run an issue's gate commands and report the raw results",
984
+ fullDescription: `Verify an issue's gates, run every local command from the current
985
985
  directory (run it from the repo root), and report the raw exit code and output
986
986
  tails so the server can derive each verdict.
987
987
 
@@ -1012,7 +1012,7 @@ Examples:
1012
1012
  kind: "tuple",
1013
1013
  parameters: [{
1014
1014
  parse: String,
1015
- brief: "Deliverable issue identifier (ENG-50) or UUID",
1015
+ brief: "Issue identifier (ENG-50) or UUID",
1016
1016
  placeholder: "issue",
1017
1017
  optional: false
1018
1018
  }]
@@ -1248,7 +1248,7 @@ Examples:
1248
1248
 
1249
1249
  //#endregion
1250
1250
  //#region package.json
1251
- var version = "0.12.15";
1251
+ var version = "0.12.17";
1252
1252
 
1253
1253
  //#endregion
1254
1254
  //#region src/app.ts
@@ -1283,7 +1283,7 @@ const gatesRoutes = buildRouteMap({
1283
1283
  refs: gatesRefsCommand,
1284
1284
  run: gatesRunCommand
1285
1285
  },
1286
- docs: { brief: "Run a deliverable's gates and report the raw results" }
1286
+ docs: { brief: "Run an issue's gates and report the raw results" }
1287
1287
  });
1288
1288
  const resultRoutes = buildRouteMap({
1289
1289
  routes: { append: resultAppendCommand },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levr-one/cli",
3
- "version": "0.12.15",
3
+ "version": "0.12.17",
4
4
  "description": "The command-line interface for Levr",
5
5
  "type": "module",
6
6
  "license": "MIT",