@codacy/verity-cli 0.29.4-experimental.6726d0f → 0.29.4-experimental.8556e74

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.
Files changed (2) hide show
  1. package/bin/verity.js +198 -19
  2. package/package.json +1 -1
package/bin/verity.js CHANGED
@@ -10390,11 +10390,11 @@ var MAX_DELTA_BYTES = 194560;
10390
10390
  var MAX_FILES = 40;
10391
10391
  var MAX_FILE_BYTES = 51200;
10392
10392
  var DEBOUNCE_SECONDS = 30;
10393
- var MAX_SPEC_FILES = 10;
10394
- var MAX_SPEC_FILE_BYTES = 10240;
10395
- var MAX_TOTAL_SPEC_BYTES = 30720;
10393
+ var MAX_SPEC_FILES = 6;
10394
+ var MAX_SPEC_FILE_BYTES = 512e3;
10395
+ var MAX_TOTAL_SPEC_BYTES = 512e3;
10396
10396
  var MAX_PLAN_FILES = 3;
10397
- var MAX_PLAN_FILE_BYTES = 10240;
10397
+ var MAX_PLAN_FILE_BYTES = 512e3;
10398
10398
  var MAX_INTENT_CHARS = 2e3;
10399
10399
  var SNAPSHOT_DIR = `${VERITY_DIR}/.snapshot`;
10400
10400
  var BASELINE_DIR = `${VERITY_DIR}/.baseline`;
@@ -16601,6 +16601,7 @@ function createRun(opts, globals) {
16601
16601
  urlResult: { ok: false, error: "unresolved" },
16602
16602
  serviceUrl: "",
16603
16603
  token: "",
16604
+ modeDecision: null,
16604
16605
  sessionIdForMemory: "",
16605
16606
  contextFilePaths: [],
16606
16607
  analysisMode: "standard",
@@ -16713,8 +16714,15 @@ function formatRunEvidence(run, startedAt) {
16713
16714
  out += row("changed", `${run.changedUniverse.length} from git \xB7 analyzable ${run.analyzable.length} \xB7 reviewable ${run.reviewable.length} \xB7 security ${run.securityFiles.length} \xB7 forReview ${run.allForReview.length}`);
16714
16715
  const done = (phase) => run.phasesCompleted.includes(phase);
16715
16716
  const ifDone = (phase, value) => done(phase) ? value : "?";
16716
- out += row("signals", `mode=${ifDone("mode", run.analysisMode)} \xB7 baseline=${ifDone("bootstrap", run.baseline ? "yes" : "no")} \xB7 authored=${ifDone("intentInputs", run.turnAuthoredCode ? "yes" : "no")} \xB7 observable=${ifDone("intentInputs", run.authorshipIsObservable ? "yes" : "no")}` + (run.actionSummary?.transcript_windowed ? ` \xB7 window=${run.actionSummary.transcript_windowed}` : ""));
16717
- if (!done("mode") || !done("intentInputs")) {
16717
+ const md = run.modeDecision;
16718
+ if (md) {
16719
+ const how = md.forced ? "forced by --mode" : `predicted=${md.predicted ?? "none"} \u2192 ${md.resolved}`;
16720
+ out += row("mode", `${md.resolved} \xB7 ${how} \xB7 authored=${md.authored ? "yes" : "no"} \xB7 investigated=${md.investigated ? "yes" : "no"}`);
16721
+ } else {
16722
+ out += row("mode", `? (this run stopped in ${run.phaseReached || "no phase"}, before the mode was decided)`);
16723
+ }
16724
+ out += row("signals", `baseline=${ifDone("bootstrap", run.baseline ? "yes" : "no")} \xB7 authored=${ifDone("intentInputs", run.turnAuthoredCode ? "yes" : "no")} \xB7 observable=${ifDone("intentInputs", run.authorshipIsObservable ? "yes" : "no")}` + (run.actionSummary?.transcript_windowed ? ` \xB7 window=${run.actionSummary.transcript_windowed}` : ""));
16725
+ if (!done("intentInputs")) {
16718
16726
  out += row("", `(\`?\` = the phase that determines it did not complete \u2014 this run stopped in ${run.phaseReached})`);
16719
16727
  }
16720
16728
  out += row("sent", `${sent.length} \xB7 ${list(sent)}`);
@@ -16741,6 +16749,46 @@ function formatRunEvidence(run, startedAt) {
16741
16749
  out += row("withheld", "(nothing \u2014 every changed file was reviewed)");
16742
16750
  }
16743
16751
  }
16752
+ const cov = run.foldResult?.coverage;
16753
+ if (cov) {
16754
+ const delegated = run.foldResult.authored.filter((a) => a.owner === "subagent").length;
16755
+ if (cov.dispatched > 0 || cov.subagentFiles > 0 || cov.subagentSkipped > 0) {
16756
+ out += row("delegated", `${cov.dispatched} dispatched \xB7 ${cov.subagentFiles} agent log(s) read \xB7 ${delegated} path(s) attributed to subagents`);
16757
+ }
16758
+ if (cov.subagentSkipped > 0) {
16759
+ out += row("", `\u26A0 ${cov.subagentSkipped} agent log(s) REFUSED by the byte budget \u2014 the authored set above is PARTIAL`);
16760
+ }
16761
+ if (cov.dispatched > 0 && cov.subagentFiles === 0) {
16762
+ out += row("", `\u26A0 this turn dispatched ${cov.dispatched} agent(s) but no agent log was found \u2014 delegated work is unattributed (has the transcript layout moved?)`);
16763
+ }
16764
+ if (cov.outsideRepo > 0) {
16765
+ out += row("", `${cov.outsideRepo} authored path(s) refused as outside the repo`);
16766
+ }
16767
+ }
16768
+ if (run.foldResult?.tools?.length) {
16769
+ const shown = run.foldResult.tools.slice(0, 6).map((t) => {
16770
+ const outcome = t.failed > 0 ? `${t.failed} failed` : t.last_status === 0 ? "ok" : "?";
16771
+ const where = t.targets.length > 0 ? ` \u2192 ${t.targets.slice(0, 2).join(", ")}` : "";
16772
+ return `${t.runs}\xD7 ${t.name} (${outcome})${where}`;
16773
+ });
16774
+ const more = run.foldResult.tools.length > 6 ? ` \u2026 +${run.foldResult.tools.length - 6} more` : "";
16775
+ out += row("tools", shown.join(" \xB7 ") + more);
16776
+ if (run.foldResult.coverage.toolNamesDropped > 0) {
16777
+ out += row("", `\u26A0 ${run.foldResult.coverage.toolNamesDropped} tool name(s) refused by the cap`);
16778
+ }
16779
+ }
16780
+ if (run.foldResult?.tasks?.length) {
16781
+ const t = run.foldResult.tasks;
16782
+ const done2 = t.filter((x) => x.status === "completed").length;
16783
+ out += row("tasks", `${t.length} \xB7 ${done2} completed \xB7 ` + list(t.slice(0, 4).map((x) => `#${x.id} ${x.name} [${x.status}]`), 4));
16784
+ }
16785
+ if (run.specs?.length) {
16786
+ const readThisSession = new Set(run.actionSummary?.files_read ?? []);
16787
+ const labelled = run.specs.map(
16788
+ (s) => `${s.path}${readThisSession.has(s.path) ? " (read)" : " (positional)"}`
16789
+ );
16790
+ out += row("specs", `${run.specs.length} \xB7 ${list(labelled, 5)}`);
16791
+ }
16744
16792
  if (run.staticResults.findings.length > 0) {
16745
16793
  out += row("static", `${run.staticResults.findings.length} finding(s) from ${run.staticResults.summary.tools_run.join(", ") || "no tools"}`);
16746
16794
  }
@@ -16936,6 +16984,8 @@ function buildSummary(lines) {
16936
16984
  break;
16937
16985
  case "Agent":
16938
16986
  case "Task":
16987
+ case "Workflow":
16988
+ case "SendMessage":
16939
16989
  subagents++;
16940
16990
  break;
16941
16991
  case "WebFetch":
@@ -17190,7 +17240,7 @@ function channelSilence(input) {
17190
17240
  // src/lib/cli-version.ts
17191
17241
  function cliVersion() {
17192
17242
  try {
17193
- return true ? "0.29.4-experimental.6726d0f" : "dev";
17243
+ return true ? "0.29.4-experimental.8556e74" : "dev";
17194
17244
  } catch {
17195
17245
  return "dev";
17196
17246
  }
@@ -17541,18 +17591,26 @@ var SPEC_CANDIDATES = [
17541
17591
  "docs/API.md",
17542
17592
  "spec/ARCHITECTURE.md"
17543
17593
  ];
17544
- function discoverSpecs() {
17594
+ var DOC_EXT = /\.(md|mdx|ya?ml|txt|rst|adoc)$/i;
17595
+ var UNCONSULTED_FILE_BYTES = 10240;
17596
+ var UNCONSULTED_TOTAL_BYTES = 30720;
17597
+ function discoverSpecs(consulted = []) {
17545
17598
  const result = [];
17546
17599
  const seen = /* @__PURE__ */ new Set();
17547
17600
  let totalBytes = 0;
17548
- const addSpec = (specPath) => {
17601
+ const consultedDocs = new Set(
17602
+ consulted.filter((p) => DOC_EXT.test(p) && !p.startsWith("/") && !p.includes(".."))
17603
+ );
17604
+ const addSpec = (specPath, relevant = false) => {
17549
17605
  if (result.length >= MAX_SPEC_FILES) return false;
17550
- if (totalBytes >= MAX_TOTAL_SPEC_BYTES) return false;
17606
+ const totalCap = relevant ? MAX_TOTAL_SPEC_BYTES : UNCONSULTED_TOTAL_BYTES;
17607
+ if (totalBytes >= totalCap) return false;
17551
17608
  if (seen.has(specPath)) return true;
17552
17609
  if (!(0, import_node_fs21.existsSync)(specPath)) return true;
17553
17610
  seen.add(specPath);
17554
- const remaining = MAX_TOTAL_SPEC_BYTES - totalBytes;
17555
- const readBytes = Math.min(MAX_SPEC_FILE_BYTES, remaining);
17611
+ const remaining = totalCap - totalBytes;
17612
+ const fileCap = relevant ? MAX_SPEC_FILE_BYTES : UNCONSULTED_FILE_BYTES;
17613
+ const readBytes = Math.min(fileCap, remaining);
17556
17614
  try {
17557
17615
  const buf = Buffer.alloc(readBytes);
17558
17616
  const fd = (0, import_node_fs21.openSync)(specPath, "r");
@@ -17566,6 +17624,9 @@ function discoverSpecs() {
17566
17624
  }
17567
17625
  return true;
17568
17626
  };
17627
+ for (const doc of consultedDocs) {
17628
+ if (!addSpec(doc, true)) break;
17629
+ }
17569
17630
  for (const candidate of SPEC_CANDIDATES) {
17570
17631
  if (!addSpec(candidate)) break;
17571
17632
  }
@@ -17636,7 +17697,7 @@ function discoverPlans() {
17636
17697
  async function intentInputs(run) {
17637
17698
  const { actionSummary, allForReview, assistantResponse, baseline, baselineSessionId } = run;
17638
17699
  const conversation = await readAndClearConversationBuffer(baselineSessionId);
17639
- const specs = discoverSpecs();
17700
+ const specs = discoverSpecs(actionSummary?.files_read ?? []);
17640
17701
  const plans = discoverPlans();
17641
17702
  const agentAuthoredCodeThisTurn = !!(actionSummary && (actionSummary.files_edited.length > 0 || actionSummary.files_created.length > 0));
17642
17703
  const turnAuthoredCode = agentAuthoredCodeThisTurn || !!baseline && allForReview.some((f) => changedSinceBaseline(f, baseline));
@@ -17859,7 +17920,8 @@ async function mode(run) {
17859
17920
  let analysisMode;
17860
17921
  const sessionAuthoredCode = !!baseline && allForReview.some((f) => changedSinceBaseline(f, baseline));
17861
17922
  const modeOverride = opts.mode;
17862
- if (modeOverride && ["standard", "plan", "debug", "skip"].includes(modeOverride)) {
17923
+ const forced = !!modeOverride && ["standard", "plan", "debug", "skip"].includes(modeOverride);
17924
+ if (forced) {
17863
17925
  analysisMode = modeOverride;
17864
17926
  } else {
17865
17927
  analysisMode = reconcileAnalysisMode(
@@ -17867,6 +17929,25 @@ async function mode(run) {
17867
17929
  { noFilesChanged, assistantResponse, actionSummary, conversationPrompts, sessionAuthoredCode }
17868
17930
  );
17869
17931
  }
17932
+ const investigated = didAgentInvestigate(actionSummary);
17933
+ run.modeDecision = {
17934
+ predicted: predictedMode ?? null,
17935
+ resolved: analysisMode,
17936
+ authored: turnAuthoredCode,
17937
+ investigated,
17938
+ forced
17939
+ };
17940
+ logEvent("mode_resolved", {
17941
+ predicted: predictedMode ?? null,
17942
+ resolved: analysisMode,
17943
+ forced,
17944
+ authored: turnAuthoredCode,
17945
+ investigated,
17946
+ // The two counters that decide `investigated`, so a false reading is
17947
+ // traceable to the tool that was not recognised.
17948
+ subagents: actionSummary?.subagents ?? null,
17949
+ files_read: actionSummary?.files_read.length ?? null
17950
+ });
17870
17951
  if (analysisMode === "skip") {
17871
17952
  await passAndExit(
17872
17953
  run,
@@ -18132,6 +18213,18 @@ function commandShape(cmd) {
18132
18213
  return out.join(" ").slice(0, COMMAND_HEAD_CHARS);
18133
18214
  }
18134
18215
  var COMMAND_HEAD_CHARS = 80;
18216
+ var MAX_TOOL_NAMES = 64;
18217
+ var MAX_TOOL_TARGETS = 3;
18218
+ var MAX_TASKS = 64;
18219
+ var TASK_NAME_CHARS = 120;
18220
+ function toolTarget(name, input) {
18221
+ if (name === "Bash") return null;
18222
+ for (const key of ["file_path", "notebook_path", "path", "filePath"]) {
18223
+ const v = input[key];
18224
+ if (typeof v === "string" && v) return v.slice(0, 120);
18225
+ }
18226
+ return null;
18227
+ }
18135
18228
  var rootCandidateCache = /* @__PURE__ */ new Map();
18136
18229
  function candidateRoots(repoRoot2) {
18137
18230
  const cached2 = rootCandidateCache.get(repoRoot2);
@@ -18160,17 +18253,30 @@ function toRepoRelative(path, repoRoot2) {
18160
18253
  }
18161
18254
  return p.replace(/^\/+/, "");
18162
18255
  }
18256
+ function isInsideRepo(path, repoRoot2) {
18257
+ const p = path.replace(/\\/g, "/");
18258
+ if (!isAbsolutePath(p)) return true;
18259
+ if (!repoRoot2) return true;
18260
+ return candidateRoots(repoRoot2).some((root) => p === root || p.startsWith(root + "/"));
18261
+ }
18262
+ function isAbsolutePath(p) {
18263
+ return p.startsWith("/") || /^[A-Za-z]:\//.test(p);
18264
+ }
18163
18265
  function fold(transcriptPath, opts = {}) {
18164
18266
  const result = {
18165
18267
  authored: [],
18166
18268
  unobserved: [],
18167
18269
  commands: [],
18270
+ tools: [],
18271
+ tasks: [],
18168
18272
  unknownTypes: [],
18169
18273
  coverage: {
18170
18274
  recordCounts: {},
18171
18275
  totalRecords: 0,
18172
18276
  malformed: 0,
18173
18277
  subagentFiles: 0,
18278
+ outsideRepo: 0,
18279
+ toolNamesDropped: 0,
18174
18280
  dispatched: 0,
18175
18281
  userMessages: 0,
18176
18282
  subagentSkipped: 0,
@@ -18181,6 +18287,10 @@ function fold(transcriptPath, opts = {}) {
18181
18287
  const byPath = /* @__PURE__ */ new Map();
18182
18288
  const commandStats = /* @__PURE__ */ new Map();
18183
18289
  const pendingByToolUse = /* @__PURE__ */ new Map();
18290
+ const toolStats = /* @__PURE__ */ new Map();
18291
+ const pendingToolName = /* @__PURE__ */ new Map();
18292
+ const taskById = /* @__PURE__ */ new Map();
18293
+ const pendingTaskName = /* @__PURE__ */ new Map();
18184
18294
  const unknown = /* @__PURE__ */ new Set();
18185
18295
  const ingest = (raw, owner) => {
18186
18296
  for (const line of raw.split("\n")) {
@@ -18200,7 +18310,7 @@ function fold(transcriptPath, opts = {}) {
18200
18310
  result.coverage.compactions++;
18201
18311
  }
18202
18312
  if (type === "user" && hasUserText(record)) result.coverage.userMessages++;
18203
- collectFromRecord(record, owner, byPath, commandStats, pendingByToolUse, opts.repoRoot, result.coverage);
18313
+ collectFromRecord(record, owner, byPath, commandStats, pendingByToolUse, toolStats, pendingToolName, taskById, pendingTaskName, opts.repoRoot, result.coverage);
18204
18314
  }
18205
18315
  };
18206
18316
  try {
@@ -18211,7 +18321,11 @@ function fold(transcriptPath, opts = {}) {
18211
18321
  return result;
18212
18322
  }
18213
18323
  try {
18214
- const sidecarDir = (0, import_node_path18.join)((0, import_node_path18.dirname)(transcriptPath), "subagents");
18324
+ const sidecarDir = (0, import_node_path18.join)(
18325
+ (0, import_node_path18.dirname)(transcriptPath),
18326
+ (0, import_node_path18.basename)(transcriptPath).replace(/\.jsonl$/, ""),
18327
+ "subagents"
18328
+ );
18215
18329
  if ((0, import_node_fs23.existsSync)(sidecarDir)) {
18216
18330
  const maxFiles = opts.maxSidecars ?? 200;
18217
18331
  const maxBytes = opts.maxSidecarBytes ?? 16 * 1024 * 1024;
@@ -18254,6 +18368,14 @@ function fold(transcriptPath, opts = {}) {
18254
18368
  result.authored = [...byPath.values()].sort((a, b) => a.p.localeCompare(b.p));
18255
18369
  result.unknownTypes = [...unknown].sort();
18256
18370
  result.commands = [...commandStats.entries()].map(([cls, s]) => ({ class: cls, ...s })).sort((a, b) => a.class.localeCompare(b.class));
18371
+ result.tools = [...toolStats.entries()].map(([name, s]) => ({
18372
+ name,
18373
+ runs: s.runs,
18374
+ failed: s.failed,
18375
+ last_status: s.last_status,
18376
+ targets: [...s.targets].map((t) => toRepoRelative(t, opts.repoRoot)).sort()
18377
+ })).sort((a, b) => b.runs - a.runs || a.name.localeCompare(b.name));
18378
+ result.tasks = [...taskById.entries()].map(([id, t]) => ({ id, name: t.name, status: t.status })).sort((a, b) => (Number(a.id) || 0) - (Number(b.id) || 0));
18257
18379
  const authoredPaths = new Set(result.authored.map((a) => a.p));
18258
18380
  for (const raw of opts.changedFiles ?? []) {
18259
18381
  const p = toRepoRelative(raw, opts.repoRoot);
@@ -18272,7 +18394,7 @@ function classifyUnobserved(path) {
18272
18394
  if (/\.(png|jpg|jpeg|gif|pdf|zip|woff2?|ico|mp4)$/i.test(path)) return "binary";
18273
18395
  return "no_edit_record";
18274
18396
  }
18275
- function collectFromRecord(record, owner, byPath, commandStats, pendingByToolUse, repoRoot2, tally) {
18397
+ function collectFromRecord(record, owner, byPath, commandStats, pendingByToolUse, toolStats, pendingToolName, taskById, pendingTaskName, repoRoot2, tally) {
18276
18398
  const message = record.message;
18277
18399
  const content = message?.content ?? record.content;
18278
18400
  const blocks = Array.isArray(content) ? content : content && typeof content === "object" ? [content] : [];
@@ -18281,8 +18403,38 @@ function collectFromRecord(record, owner, byPath, commandStats, pendingByToolUse
18281
18403
  if (blockType === "tool_use") {
18282
18404
  const name = String(block.name ?? "");
18283
18405
  const input = block.input ?? {};
18406
+ if (name && toolStats.size < MAX_TOOL_NAMES) {
18407
+ const prev = toolStats.get(name) ?? { runs: 0, failed: 0, last_status: null, targets: /* @__PURE__ */ new Set() };
18408
+ prev.targets = prev.targets ?? /* @__PURE__ */ new Set();
18409
+ if (prev.targets.size < MAX_TOOL_TARGETS) {
18410
+ const target = toolTarget(name, input);
18411
+ if (target) prev.targets.add(target);
18412
+ }
18413
+ toolStats.set(name, { runs: prev.runs + 1, failed: prev.failed, last_status: null, targets: prev.targets });
18414
+ const toolId = typeof block.id === "string" ? block.id : null;
18415
+ if (toolId) pendingToolName.set(toolId, name);
18416
+ } else if (name && tally) {
18417
+ tally.toolNamesDropped += 1;
18418
+ }
18419
+ if (name === "TaskCreate") {
18420
+ const subject = typeof input.subject === "string" ? input.subject : "";
18421
+ const taskId = typeof block.id === "string" ? block.id : null;
18422
+ if (subject && taskId) pendingTaskName.set(taskId, subject.slice(0, TASK_NAME_CHARS));
18423
+ }
18424
+ if (name === "TaskUpdate") {
18425
+ const id = typeof input.taskId === "string" ? input.taskId : "";
18426
+ const status = typeof input.status === "string" ? input.status : "";
18427
+ if (id && status) {
18428
+ const entry = taskById.get(id);
18429
+ taskById.set(id, { name: entry?.name ?? `#${id}`, status });
18430
+ }
18431
+ }
18284
18432
  if (EDIT_TOOLS.has(name)) {
18285
18433
  const rawPath = typeof input.notebook_path === "string" ? input.notebook_path : typeof input.file_path === "string" ? input.file_path : null;
18434
+ if (rawPath && !isInsideRepo(rawPath, repoRoot2)) {
18435
+ if (tally) tally.outsideRepo += 1;
18436
+ continue;
18437
+ }
18286
18438
  const path = rawPath ? toRepoRelative(rawPath, repoRoot2) : null;
18287
18439
  if (path) {
18288
18440
  const entry = byPath.get(path) ?? { p: path, h: 0, a: 0, d: 0, owner };
@@ -18316,6 +18468,31 @@ function collectFromRecord(record, owner, byPath, commandStats, pendingByToolUse
18316
18468
  }
18317
18469
  if (blockType === "tool_result") {
18318
18470
  const id = typeof block.tool_use_id === "string" ? block.tool_use_id : null;
18471
+ const taskName = id ? pendingTaskName.get(id) : void 0;
18472
+ if (taskName) {
18473
+ pendingTaskName.delete(id);
18474
+ const body = typeof block.content === "string" ? block.content : "";
18475
+ const created = /Task #(\d+)/.exec(body);
18476
+ if (created && taskById.size < MAX_TASKS) {
18477
+ taskById.set(created[1], { name: taskName, status: taskById.get(created[1])?.status ?? "created" });
18478
+ }
18479
+ }
18480
+ const toolName = id ? pendingToolName.get(id) : void 0;
18481
+ if (toolName) {
18482
+ pendingToolName.delete(id);
18483
+ const prevTool = toolStats.get(toolName);
18484
+ if (prevTool) {
18485
+ const failed = block.is_error === true;
18486
+ toolStats.set(toolName, {
18487
+ runs: prevTool.runs,
18488
+ failed: prevTool.failed + (failed ? 1 : 0),
18489
+ last_status: block.is_error === true ? 1 : block.is_error === false ? 0 : null,
18490
+ // Carried, not rebuilt: the targets were collected on the `tool_use`
18491
+ // side and dropping them here would empty the ledger on every result.
18492
+ targets: prevTool.targets
18493
+ });
18494
+ }
18495
+ }
18319
18496
  const cls = id ? pendingByToolUse.get(id) : void 0;
18320
18497
  if (!cls) continue;
18321
18498
  pendingByToolUse.delete(id);
@@ -19309,6 +19486,8 @@ async function buildRequest(run) {
19309
19486
  authored_since_verdict: memorySession ? foldDossier(memorySession.d).authored_all.filter((a) => a.hash_now !== a.hash_at_last_verdict).map((a) => a.path) : [],
19310
19487
  unobserved: foldResult?.unobserved ?? [],
19311
19488
  commands: foldResult?.commands ?? [],
19489
+ tools: foldResult?.tools ?? [],
19490
+ tasks: foldResult?.tasks ?? [],
19312
19491
  unknown_types: foldResult?.unknownTypes ?? [],
19313
19492
  coverage: foldResult?.coverage ?? { recordCounts: {}, totalRecords: 0, malformed: 0, subagentFiles: 0, subagentSkipped: 0, complete: false },
19314
19493
  // INV-19, computed client-side and sent so a conservation failure is
@@ -21935,8 +22114,8 @@ function registerTelemetryCommands(program2) {
21935
22114
  }
21936
22115
 
21937
22116
  // src/cli.ts
21938
- program.name("verity").description("CLI for Verity quality gate service").version("0.29.4-experimental.6726d0f").option("--token <token>", "Override authentication token").option("--service-url <url>", "Override service URL").option("--verbose", "Log HTTP requests/responses to stderr").hook("preAction", async (_thisCommand, actionCommand) => {
21939
- installStderrLog(actionCommand.name(), process.argv.slice(2), "0.29.4-experimental.6726d0f");
22117
+ program.name("verity").description("CLI for Verity quality gate service").version("0.29.4-experimental.8556e74").option("--token <token>", "Override authentication token").option("--service-url <url>", "Override service URL").option("--verbose", "Log HTTP requests/responses to stderr").hook("preAction", async (_thisCommand, actionCommand) => {
22118
+ installStderrLog(actionCommand.name(), process.argv.slice(2), "0.29.4-experimental.8556e74");
21940
22119
  setUserNamedServiceUrl(program.opts().serviceUrl);
21941
22120
  try {
21942
22121
  await foldLegacyLocalCredential();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codacy/verity-cli",
3
- "version": "0.29.4-experimental.6726d0f",
3
+ "version": "0.29.4-experimental.8556e74",
4
4
  "description": "CLI for Verity quality gate service",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://verity.md",