@moda-ai/cli 1.55.77 → 1.55.78

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,8 +1,8 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-37gk6etv.js";
3
+ } from "./cli-rp1079xm.js";
4
4
  import"./cli-rrggdmf8.js";
5
- import"./cli-0799n1ej.js";
5
+ import"./cli-8y7tzqkf.js";
6
6
  import"./cli-mm48br00.js";
7
7
  import {
8
8
  readHarnessSyncState
@@ -95,7 +95,7 @@ async function buildAgentContext(context) {
95
95
  const graph = readHarnessGraphIfPresent(context.cwd);
96
96
  const reportState = readHarnessReportState(context.cwd);
97
97
  const syncState = readHarnessSyncState(context.cwd);
98
- const harness = graph ? await import("./harness-gkc072np.js") : undefined;
98
+ const harness = graph ? await import("./harness-nryjq52p.js") : undefined;
99
99
  const topFindings = doctor.checks.filter((check) => check.status === "fail" || check.status === "warning").slice(0, 12).map(checkToFinding);
100
100
  const evidenceRefs = [
101
101
  ...doctor.checks.map(checkToEvidenceRef),
@@ -5768,7 +5768,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
5768
5768
  const analyzedDefinitions = new Map;
5769
5769
  if (flags["no-analyze"] !== "true") {
5770
5770
  options.onProgress?.("Analyzing prompt sources before sync.");
5771
- const { analyzeHarnessPrompts } = await import("./harness-gkc072np.js");
5771
+ const { analyzeHarnessPrompts } = await import("./harness-nryjq52p.js");
5772
5772
  const result = await analyzeHarnessPrompts({
5773
5773
  rootDir: process.cwd(),
5774
5774
  existing: established.flatMap((prompt) => prompt.sourceDefinition ? [prompt.sourceDefinition.source] : []),
@@ -5796,7 +5796,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
5796
5796
  const mergedSources = mergePromptSources(manifest.sources, extraSources);
5797
5797
  const manifestUpdate = stableJson(mergedSources) === stableJson(mergePromptSources(manifest.sources, [])) ? undefined : $stringify({ version: 2, prompt_paths: manifest.promptPaths, sources: mergedSources });
5798
5798
  const prompts = await discoverPrompts(extraSources);
5799
- const { checkPromptAttribution } = await import("./prompt-attribution-jqer74f1.js");
5799
+ const { checkPromptAttribution } = await import("./prompt-attribution-2srq4cp7.js");
5800
5800
  const attribution = checkPromptAttribution(process.cwd(), prompts.map((prompt) => prompt.key));
5801
5801
  const brokenAttribution = attribution.references.filter((reference) => reference.status === "missing");
5802
5802
  if (brokenAttribution.length) {
@@ -6102,7 +6102,7 @@ async function migratePromptManifest(options = {}) {
6102
6102
  let addedSources = [];
6103
6103
  let pendingSources = [];
6104
6104
  if (options.discover) {
6105
- const { analyzeHarnessPrompts } = await import("./harness-gkc072np.js");
6105
+ const { analyzeHarnessPrompts } = await import("./harness-nryjq52p.js");
6106
6106
  const result = await analyzeHarnessPrompts({
6107
6107
  rootDir: root,
6108
6108
  existing: manifest.sources,
@@ -17654,7 +17654,7 @@ function toolResultIsPrompt(owner, pieces) {
17654
17654
  if (own.length === 0)
17655
17655
  return false;
17656
17656
  const text = withoutLabels(own.join(`
17657
- `));
17657
+ `)).replace(/(^|[.!?;\n]\s*)[A-Za-z][\w-]*\s+(?:(?:was|were|is|are|has been|have been)\s+)?(?:saved|cleared|completed|created|updated|deleted|removed|scheduled|sent|loaded|finished|cancelled|canceled)\b(?=\s*(?:$|[.!?,;:(\n]))/gi, "$1");
17658
17658
  if (own.every((piece) => ERROR_TEXT.test(piece)) && !IMPERATIVE.test(text))
17659
17659
  return false;
17660
17660
  if (!hasDirective(text) && !IMPERATIVE.test(text))
@@ -19149,7 +19149,7 @@ async function runHarnessCommand(context) {
19149
19149
  throw new CliInputError("Focused remote prompt analysis is not supported yet.", "Use local --analyst=claude|codex|cursor|local-scan, or drop --concern for a full remote report.");
19150
19150
  }
19151
19151
  if (context.flags["github-actions"] === "true") {
19152
- const { runGithubActionsAnalyze } = await import("./harness-github-actions-551gfrhe.js");
19152
+ const { runGithubActionsAnalyze } = await import("./harness-github-actions-pdm6ee74.js");
19153
19153
  const result = await runGithubActionsAnalyze(rootDir, {
19154
19154
  writeReport: (report2) => {
19155
19155
  const normalized = normalizeHarnessReport(report2);
@@ -19295,8 +19295,8 @@ async function runHarnessCommand(context) {
19295
19295
  }
19296
19296
  const { artifacts, unknowns } = deterministicGraphItems(rootDir, promote === "all" ? undefined : promote);
19297
19297
  tagComponentStatus({ runtimeAgents: [], artifacts }, rootDir);
19298
- const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-skaf1djt.js");
19299
- const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-05gdag9e.js");
19298
+ const { extractHarnessWithContext: extractHarnessWithContext2 } = await import("./index-xqa9km2a.js");
19299
+ const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ms5t7pph.js");
19300
19300
  let components = { runtimeAgents: [], artifacts: [], warnings: [] };
19301
19301
  if (promote === "all" || promote === "topology" || promote === "tools") {
19302
19302
  const { result, ctx } = extractHarnessWithContext2(rootDir);
@@ -19330,8 +19330,8 @@ async function runHarnessCommand(context) {
19330
19330
  }
19331
19331
  case "extract": {
19332
19332
  writeHumanProgress(context, "Harness extract: tracing model call sites (no LLM, no network)...");
19333
- const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-skaf1djt.js");
19334
- const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-05gdag9e.js");
19333
+ const { extractHarnessWithContext: extractHarnessWithContext2, serializeExtractResult } = await import("./index-xqa9km2a.js");
19334
+ const { enumerateHarnessComponents, mergeEnumeratedComponents } = await import("./index-ms5t7pph.js");
19335
19335
  const { result, ctx } = extractHarnessWithContext2(rootDir, { fresh: true });
19336
19336
  const artifacts = deterministicArtifacts(rootDir);
19337
19337
  tagComponentStatus({ runtimeAgents: [], artifacts }, rootDir);
@@ -27558,6 +27558,12 @@ var TOOL_FACTORY = /^(?:tool|dynamicTool|agentTool|createTool|defineTool)$/;
27558
27558
  var TOOL_MODULE = /^(?:ai|agents(?:\/.*)?|@cloudflare\/[\w-]+(?:\/.*)?|@mastra\/[\w-]+|@ai-sdk\/[\w-]+|@openai\/agents(?:-core)?|@langchain\/[\w-]+)$/;
27559
27559
  var MODEL_FACING_NAME = /^[A-Za-z_][\w.:-]{0,127}$/;
27560
27560
  var MAX_NAMES_PER_SITE = 64;
27561
+ var EVAL_PATH3 = /(?:^|\/)evals?\/|\.eval\.[cm]?[jt]sx?$/;
27562
+ function surfaceOf(rel2, pkg) {
27563
+ const inside = pkg ? rel2.slice(pkg.length + 1) : rel2;
27564
+ const dirs = posix3.dirname(inside).split("/").filter((part) => part && part !== ".");
27565
+ return `${pkg}:${dirs.slice(0, 2).join("/")}`;
27566
+ }
27561
27567
  var MAX_TOOLS = 1e4;
27562
27568
  var MAX_EVIDENCE_PER_TOOL = 64;
27563
27569
  var MAX_DEFINITIONS_PER_TOOL = 64;
@@ -27592,18 +27598,22 @@ function emitTools(result, ctx, options = {}) {
27592
27598
  if (!result.warnings.includes(warning))
27593
27599
  result.warnings.push(warning);
27594
27600
  };
27595
- const add = (name, via, evidence, toolOwners, definition, displayName, enclosing) => {
27601
+ const add = (name, via, evidence, toolOwners, definition, displayName, enclosing, surfaceHint) => {
27596
27602
  if (!MODEL_FACING_NAME.test(name))
27597
27603
  return;
27598
- const pkg = packageOf(evidence.path);
27599
- const key = name;
27604
+ const definedIn = definition ? relPath(ctx.rootDir, definition.getSourceFile().fileName) : undefined;
27605
+ const pkg = packageOf(definedIn ?? evidence.path);
27606
+ const surface = surfaceHint ?? (definedIn && !EVAL_PATH3.test(definedIn) ? surfaceOf(definedIn, pkg) : undefined);
27607
+ const tracedSurface = surfaceOf(evidence.path, pkg);
27608
+ const matchingKey = `${name}\x00${tracedSurface}`;
27609
+ const key = surface ? `${name}\x00${surface}` : found.has(matchingKey) ? matchingKey : `${name}\x01${pkg}`;
27600
27610
  let tool = found.get(key);
27601
27611
  if (!tool) {
27602
27612
  if (found.size >= MAX_TOOLS) {
27603
27613
  limit();
27604
27614
  return;
27605
27615
  }
27606
- tool = { name, status: enumerationRepository(ctx).status(evidence.path) === "defined_only" ? "defined_only" : "reachable", ...pkg ? { package: pkg } : {}, via, evidence: [], agents: [], calledFrom: [], definitions: [] };
27616
+ tool = { name, status: enumerationRepository(ctx).status(evidence.path) === "defined_only" ? "defined_only" : "reachable", ...pkg ? { package: pkg } : {}, ...surface ? { surface } : {}, via, evidence: [], agents: [], calledFrom: [], definitions: [] };
27607
27617
  found.set(key, tool);
27608
27618
  ownersByTool.set(key, { direct: [], rpc: [], open: [] });
27609
27619
  }
@@ -27702,6 +27712,17 @@ function emitTools(result, ctx, options = {}) {
27702
27712
  };
27703
27713
  visit2(source);
27704
27714
  }
27715
+ const targetFor = (name, path) => {
27716
+ const candidates = [...found.values()].filter((tool) => tool.name === name && tool.surface);
27717
+ const exact = candidates.filter((tool) => tool.definitions.some((definition) => definition.path === path));
27718
+ if (exact.length === 1)
27719
+ return exact[0];
27720
+ const nearby = candidates.filter((tool) => tool.surface === surfaceOf(path, packageOf(path)));
27721
+ if (nearby.length === 1)
27722
+ return nearby[0];
27723
+ const local = candidates.filter((tool) => (tool.package ?? "") === packageOf(path));
27724
+ return local.length === 1 ? local[0] : candidates.length === 1 ? candidates[0] : undefined;
27725
+ };
27705
27726
  for (const role of result.roles) {
27706
27727
  if (role.role !== "tools" || role.sink.isTest || skipPath(role.sink.path))
27707
27728
  continue;
@@ -27710,10 +27731,16 @@ function emitTools(result, ctx, options = {}) {
27710
27731
  for (const hit of toolNamesOf(role.tree).names) {
27711
27732
  if (skipPath(hit.path))
27712
27733
  continue;
27713
- add(hit.name, "tools-arg", { path: hit.path, line: hit.line, reason: `named in the tools argument of ${role.sink.callee} at ${role.sink.path}:${role.sink.line}` }, siteOwners, undefined, undefined, role.sink.enclosing);
27734
+ const target = targetFor(hit.name, hit.path);
27735
+ const ambiguous = !target && [...found.values()].some((tool) => tool.name === hit.name && tool.surface);
27736
+ add(hit.name, "tools-arg", { path: hit.path, line: hit.line, reason: `named in the tools argument of ${role.sink.callee} at ${role.sink.path}:${role.sink.line}` }, ambiguous ? { direct: [], rpc: [], open: [] } : siteOwners, undefined, undefined, role.sink.enclosing, target?.surface);
27714
27737
  }
27715
27738
  }
27739
+ joinSurfaces(found, ownersByTool);
27716
27740
  owners.indexAllowlists(new Set([...found.values()].map((tool) => tool.name)));
27741
+ const surfacesByName = new Map;
27742
+ for (const tool of found.values())
27743
+ surfacesByName.set(tool.name, (surfacesByName.get(tool.name) ?? 0) + 1);
27717
27744
  const callOwners = new Map;
27718
27745
  for (const role of result.roles) {
27719
27746
  if (role.role !== "tools" || role.sink.isTest || skipPath(role.sink.path))
@@ -27722,24 +27749,86 @@ function emitTools(result, ctx, options = {}) {
27722
27749
  for (const hit of toolNamesOf(role.tree).names) {
27723
27750
  let owners2 = callOwners.get(hit.name);
27724
27751
  if (!owners2)
27725
- callOwners.set(hit.name, owners2 = new Set);
27726
- for (const id of ids)
27727
- owners2.add(id);
27752
+ callOwners.set(hit.name, owners2 = []);
27753
+ owners2.push({ pkg: packageOf(hit.path), surface: surfaceOf(hit.path, packageOf(hit.path)), ids });
27728
27754
  }
27729
27755
  }
27730
27756
  for (const [key, tool] of found) {
27731
27757
  const ids = new Set;
27732
- for (const name of owners.agentsFor(tool.name, ownersByTool.get(key))) {
27758
+ const allowlistApplies = (allowlistPath) => targetFor(tool.name, allowlistPath) === tool || (surfacesByName.get(tool.name) ?? 1) === 1;
27759
+ for (const name of owners.agentsFor(tool.name, ownersByTool.get(key), allowlistApplies)) {
27733
27760
  const classes = owners.classes.filter((entry) => entry.name === name);
27734
27761
  if (classes.length === 1)
27735
27762
  for (const id of agentForScope(`${classes[0].path}#${name}`))
27736
27763
  ids.add(id);
27737
27764
  }
27738
- for (const id of callOwners.get(tool.name) ?? [])
27739
- ids.add(id);
27765
+ const single = (surfacesByName.get(tool.name) ?? 1) === 1;
27766
+ for (const entry of callOwners.get(tool.name) ?? []) {
27767
+ if (single || entry.surface === tool.surface || !tool.surface && entry.pkg === (tool.package ?? ""))
27768
+ for (const id of entry.ids)
27769
+ ids.add(id);
27770
+ }
27740
27771
  tool.agents = [...ids].sort();
27741
27772
  }
27742
- return [...found.values()].sort((a, b) => a.name.localeCompare(b.name) || (a.package ?? "").localeCompare(b.package ?? ""));
27773
+ assignToolIds(found.values());
27774
+ return [...found.values()].sort((a, b) => a.name.localeCompare(b.name) || (a.package ?? "").localeCompare(b.package ?? "") || (a.surface ?? "").localeCompare(b.surface ?? ""));
27775
+ }
27776
+ function joinSurfaces(found, ownersByTool) {
27777
+ for (const [key, pending] of [...found]) {
27778
+ if (pending.surface)
27779
+ continue;
27780
+ const defined = [...found.entries()].filter(([, tool]) => tool.name === pending.name && tool.surface);
27781
+ if (defined.length === 0)
27782
+ continue;
27783
+ const local = defined.filter(([, tool]) => (tool.package ?? "") === (pending.package ?? ""));
27784
+ const matching = local.filter(([, tool]) => pending.evidence.some((entry) => surfaceOf(entry.path, pending.package ?? "") === tool.surface));
27785
+ const selected = matching.length === 1 ? matching[0] : local.length === 1 ? local[0] : defined.length === 1 ? defined[0] : undefined;
27786
+ if (!selected) {
27787
+ if (pending.evidence.every((entry) => EVAL_PATH3.test(entry.path))) {
27788
+ found.delete(key);
27789
+ ownersByTool.delete(key);
27790
+ }
27791
+ continue;
27792
+ }
27793
+ const [targetKey, target] = selected;
27794
+ for (const entry of pending.evidence) {
27795
+ if (target.evidence.length >= MAX_EVIDENCE_PER_TOOL)
27796
+ break;
27797
+ if (!target.evidence.some((other) => other.path === entry.path && other.line === entry.line))
27798
+ target.evidence.push(entry);
27799
+ }
27800
+ for (const entry of pending.calledFrom) {
27801
+ if (!target.calledFrom.some((other) => other.path === entry.path && other.line === entry.line))
27802
+ target.calledFrom.push(entry);
27803
+ }
27804
+ if (pending.status === "reachable")
27805
+ target.status = "reachable";
27806
+ target.displayName ??= pending.displayName;
27807
+ const from = ownersByTool.get(key), into = ownersByTool.get(targetKey);
27808
+ if (from && into) {
27809
+ for (const field of ["direct", "rpc", "open"])
27810
+ for (const agent2 of from[field])
27811
+ if (!into[field].includes(agent2))
27812
+ into[field].push(agent2);
27813
+ }
27814
+ found.delete(key);
27815
+ ownersByTool.delete(key);
27816
+ }
27817
+ }
27818
+ function assignToolIds(tools) {
27819
+ const byName = new Map;
27820
+ for (const tool of tools) {
27821
+ let list = byName.get(tool.name);
27822
+ if (!list)
27823
+ byName.set(tool.name, list = []);
27824
+ list.push(tool);
27825
+ }
27826
+ for (const list of byName.values()) {
27827
+ list.sort((a, b) => Number(Boolean(a.package)) - Number(Boolean(b.package)) || (a.surface ?? "").localeCompare(b.surface ?? ""));
27828
+ list.forEach((tool, index) => {
27829
+ tool.id = toolArtifactId(tool.name, index === 0 ? undefined : tool.surface ?? surfaceOf(tool.evidence[0]?.path ?? "", tool.package ?? ""));
27830
+ });
27831
+ }
27743
27832
  }
27744
27833
  function registryEntryOf(object) {
27745
27834
  const parent = object.parent;
@@ -27872,9 +27961,9 @@ function emitToolsCached(result, ctx) {
27872
27961
  }
27873
27962
  return tools;
27874
27963
  }
27875
- function toolArtifactId(name, pkg) {
27964
+ function toolArtifactId(name, surface) {
27876
27965
  const slug2 = (text) => text.replace(/[^A-Za-z0-9_.:-]+/g, "_");
27877
- return `tool.extract.${slug2(name)}`;
27966
+ return surface ? `tool.extract.${slug2(name)}@${encodeURIComponent(surface)}` : `tool.extract.${slug2(name)}`;
27878
27967
  }
27879
27968
  function workspacePackages(rootDir) {
27880
27969
  const cache2 = new Map;
@@ -27893,16 +27982,15 @@ function workspacePackages(rootDir) {
27893
27982
  function toolDefinitionRefs(tools) {
27894
27983
  const out = [];
27895
27984
  for (const tool of tools) {
27896
- const definition = tool.definitions[0];
27897
- if (!definition)
27898
- continue;
27899
- out.push({
27900
- toolId: toolArtifactId(tool.name, tool.package),
27901
- name: tool.name,
27902
- definition: { path: definition.path, start: definition.start, end: definition.end, line: definition.line },
27903
- ...tool.agents.length > 0 ? { agentIds: [...tool.agents] } : {},
27904
- scope: definition.scope
27905
- });
27985
+ for (const definition of tool.definitions) {
27986
+ out.push({
27987
+ toolId: tool.id ?? toolArtifactId(tool.name),
27988
+ name: tool.name,
27989
+ definition: { path: definition.path, start: definition.start, end: definition.end, line: definition.line },
27990
+ ...tool.agents.length > 0 ? { agentIds: [...tool.agents] } : {},
27991
+ scope: definition.scope
27992
+ });
27993
+ }
27906
27994
  }
27907
27995
  return out;
27908
27996
  }
@@ -27911,7 +27999,7 @@ function toolArtifacts(tools, runtimeAgents = []) {
27911
27999
  return tools.map((tool) => {
27912
28000
  const usedByAgentIds = [...new Set(tool.agents.filter((id) => knownIds.has(id)))];
27913
28001
  const artifact2 = {
27914
- id: toolArtifactId(tool.name, tool.package),
28002
+ id: tool.id ?? toolArtifactId(tool.name),
27915
28003
  type: "tool",
27916
28004
  name: tool.name,
27917
28005
  status: tool.status,
@@ -29251,8 +29339,12 @@ function enumerateToolCatalog(result, ctx) {
29251
29339
  }
29252
29340
  }
29253
29341
  const merged = new Map;
29342
+ const packageOf = workspacePackages(ctx.rootDir);
29254
29343
  for (const item of output.artifacts) {
29255
- const previous = merged.get(item.name);
29344
+ const path = item.sourcePath ?? "";
29345
+ const surface = surfaceOf(path, packageOf(path));
29346
+ const key = `${item.name}\x00${surface}`;
29347
+ const previous = merged.get(key);
29256
29348
  if (previous) {
29257
29349
  previous.usedByAgentIds = [...new Set([...previous.usedByAgentIds, ...item.usedByAgentIds])].sort();
29258
29350
  const seen = new Set(previous.evidence.map((e) => `${e.path}:${e.line}`));
@@ -29260,8 +29352,8 @@ function enumerateToolCatalog(result, ctx) {
29260
29352
  if (item.status === "in_prod" || item.status === "reachable" && previous.status === "defined_only")
29261
29353
  previous.status = item.status;
29262
29354
  } else {
29263
- item.id = `tool:catalog:${item.name}`;
29264
- merged.set(item.name, item);
29355
+ item.id = `tool:catalog:${item.name}@${encodeURIComponent(surface)}`;
29356
+ merged.set(key, item);
29265
29357
  }
29266
29358
  }
29267
29359
  output.artifacts = [...merged.values()];
@@ -29283,8 +29375,25 @@ function mergeEnumeratedComponents(artifacts, components) {
29283
29375
  const merged = new Map;
29284
29376
  const definitions = new Map;
29285
29377
  const registry = components.artifacts.filter((item) => item.type === "tool" && item.id.startsWith("tool.extract."));
29378
+ const extractedByName = new Map;
29379
+ for (const item of registry) {
29380
+ let list = extractedByName.get(item.name);
29381
+ if (!list)
29382
+ extractedByName.set(item.name, list = []);
29383
+ list.push(item);
29384
+ }
29385
+ const toolKey2 = (item) => {
29386
+ if (registry.includes(item))
29387
+ return `tool:${item.id}`;
29388
+ const candidates = extractedByName.get(item.name) ?? [];
29389
+ if (candidates.length === 0)
29390
+ return item.id.startsWith("tool:catalog:") ? `tool:${item.id}` : `tool:${item.name}`;
29391
+ const paths = new Set([item.sourcePath, ...item.evidence.map((entry) => entry.path)].filter(Boolean));
29392
+ const target = candidates.find((candidate) => candidate.sourcePath && paths.has(candidate.sourcePath) || candidate.definitionVariants?.some((variant) => variant.sourcePath && paths.has(variant.sourcePath))) ?? candidates.find((candidate) => !candidate.id.includes("@")) ?? candidates[0];
29393
+ return `tool:${target.id}`;
29394
+ };
29286
29395
  for (const item of [...registry, ...artifacts, ...components.artifacts.filter((item2) => !registry.includes(item2))]) {
29287
- const key = item.type === "tool" ? `tool:${item.name}` : item.id;
29396
+ const key = item.type === "tool" ? toolKey2(item) : item.id;
29288
29397
  if (item.type === "tool") {
29289
29398
  const own = item.definitionVariants ?? (item.body ? [{ sourcePath: item.sourcePath, body: item.body, evidence: item.evidence }] : []);
29290
29399
  let variants = definitions.get(key);
@@ -4,7 +4,7 @@ import {
4
4
  } from "./cli-rrggdmf8.js";
5
5
  import {
6
6
  inspectPromptManifest
7
- } from "./cli-0799n1ej.js";
7
+ } from "./cli-8y7tzqkf.js";
8
8
  import {
9
9
  readHarnessSyncState,
10
10
  renderDoctorHuman,
@@ -395,7 +395,7 @@ async function harnessCurrentCheck(cwd, manifestPath, manifestExists, tenantId)
395
395
  };
396
396
  }
397
397
  try {
398
- const { scanHarness } = await import("./harness-gkc072np.js");
398
+ const { scanHarness } = await import("./harness-nryjq52p.js");
399
399
  const current = scanHarness({
400
400
  rootDir: cwd,
401
401
  scannerVersion: "doctor",
package/dist/cli.js CHANGED
@@ -2975,25 +2975,25 @@ function leafManifestFields(leaf, commands) {
2975
2975
  import { fileURLToPath } from "url";
2976
2976
  import { realpathSync } from "fs";
2977
2977
  async function runPromptsCommand(...args) {
2978
- return (await import("./prompts-8n2ctn3g.js")).runPromptsCommand(...args);
2978
+ return (await import("./prompts-tr91zg4n.js")).runPromptsCommand(...args);
2979
2979
  }
2980
2980
  async function runSkillsCommand(...args) {
2981
2981
  return (await import("./skills-knpeqryb.js")).runSkillsCommand(...args);
2982
2982
  }
2983
2983
  async function runHarnessCommand(...args) {
2984
- return (await import("./harness-gkc072np.js")).runHarnessCommand(...args);
2984
+ return (await import("./harness-nryjq52p.js")).runHarnessCommand(...args);
2985
2985
  }
2986
2986
  async function runSyncCommand(...args) {
2987
- return (await import("./sync-e71ew4yt.js")).runSyncCommand(...args);
2987
+ return (await import("./sync-nfdd69cw.js")).runSyncCommand(...args);
2988
2988
  }
2989
2989
  async function runRegistryCommand(...args) {
2990
2990
  return (await import("./registry-c64qr7ta.js")).runRegistryCommand(...args);
2991
2991
  }
2992
2992
  async function runDoctorCommand(...args) {
2993
- return (await import("./doctor-7bd2q83j.js")).runDoctorCommand(...args);
2993
+ return (await import("./doctor-swctmdap.js")).runDoctorCommand(...args);
2994
2994
  }
2995
2995
  async function runStatusCommand(...args) {
2996
- return (await import("./doctor-7bd2q83j.js")).runStatusCommand(...args);
2996
+ return (await import("./doctor-swctmdap.js")).runStatusCommand(...args);
2997
2997
  }
2998
2998
  async function runAuthCommand(...args) {
2999
2999
  return (await import("./profile-commands-1fdvrs5y.js")).runAuthCommand(...args);
@@ -3005,7 +3005,7 @@ async function runProfilesCommand(...args) {
3005
3005
  return (await import("./profile-commands-1fdvrs5y.js")).runProfilesCommand(...args);
3006
3006
  }
3007
3007
  async function runAgentCommand(...args) {
3008
- return (await import("./agent-wrc7kn21.js")).runAgentCommand(...args);
3008
+ return (await import("./agent-9bb3wryr.js")).runAgentCommand(...args);
3009
3009
  }
3010
3010
  async function runProductionCommand(...args) {
3011
3011
  return (await import("./production-intelligence-f9sd68te.js")).runProductionCommand(...args);
@@ -6769,7 +6769,7 @@ var commandRegistry = createCommandRegistry([
6769
6769
  resetApiRequestCountBeforeRun: true,
6770
6770
  telemetry: "result-and-error",
6771
6771
  handler: async (context) => {
6772
- const { runInit } = await import("./index-smy7hrm5.js");
6772
+ const { runInit } = await import("./index-y5ay9p49.js");
6773
6773
  if (context.outputMode === "agent-stream") {
6774
6774
  context.output.writeEvent({
6775
6775
  event: "started",
@@ -3,9 +3,9 @@ import {
3
3
  promptsDiscoveredCheck,
4
4
  runDoctorCommand,
5
5
  runStatusCommand
6
- } from "./cli-37gk6etv.js";
6
+ } from "./cli-rp1079xm.js";
7
7
  import"./cli-rrggdmf8.js";
8
- import"./cli-0799n1ej.js";
8
+ import"./cli-8y7tzqkf.js";
9
9
  import"./cli-mm48br00.js";
10
10
  import"./cli-k0vxtzxb.js";
11
11
  import"./cli-22yvg5kh.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-t8mvqe7n.js";
3
+ } from "./cli-pqnd8are.js";
4
4
  import"./cli-k0vxtzxb.js";
5
5
  import"./cli-97fnztpy.js";
6
6
  import"./cli-y333w08f.js";
@@ -47,7 +47,7 @@ import {
47
47
  writeHarnessAnalyzeResult,
48
48
  writeHarnessArtifacts,
49
49
  writeHumanProgress
50
- } from "./cli-t8mvqe7n.js";
50
+ } from "./cli-pqnd8are.js";
51
51
  import"./cli-k0vxtzxb.js";
52
52
  import"./cli-97fnztpy.js";
53
53
  import {
@@ -7,7 +7,7 @@ import {
7
7
  enumerateToolCatalog,
8
8
  enumerateWorkflows,
9
9
  mergeEnumeratedComponents
10
- } from "./cli-t8mvqe7n.js";
10
+ } from "./cli-pqnd8are.js";
11
11
  import"./cli-k0vxtzxb.js";
12
12
  import"./cli-97fnztpy.js";
13
13
  import"./cli-y333w08f.js";
@@ -21,7 +21,7 @@ import {
21
21
  serializeExtractResult,
22
22
  toolNamesOf,
23
23
  valueChildren
24
- } from "./cli-t8mvqe7n.js";
24
+ } from "./cli-pqnd8are.js";
25
25
  import"./cli-k0vxtzxb.js";
26
26
  import"./cli-97fnztpy.js";
27
27
  import"./cli-y333w08f.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-37gk6etv.js";
3
+ } from "./cli-rp1079xm.js";
4
4
  import {
5
5
  selectTenantAndCreateKey
6
6
  } from "./cli-n1406hqg.js";
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  initPrompts,
22
22
  runPromptSync
23
- } from "./cli-0799n1ej.js";
23
+ } from "./cli-8y7tzqkf.js";
24
24
  import {
25
25
  agentsMdProblem,
26
26
  runSkillSync
@@ -46,7 +46,7 @@ import {
46
46
  runCodingAgent,
47
47
  runHarnessCommand,
48
48
  startRemoteAnalyze
49
- } from "./cli-t8mvqe7n.js";
49
+ } from "./cli-pqnd8are.js";
50
50
  import {
51
51
  canonicalText,
52
52
  renderInitBanner,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  inventoryFiles,
3
3
  safePromptEvidencePath
4
- } from "./cli-t8mvqe7n.js";
4
+ } from "./cli-pqnd8are.js";
5
5
  import"./cli-k0vxtzxb.js";
6
6
  import"./cli-97fnztpy.js";
7
7
  import"./cli-y333w08f.js";
@@ -3,7 +3,7 @@ import {
3
3
  checkPromptMapping,
4
4
  discoverHarnessPromptSources,
5
5
  safePromptEvidencePath
6
- } from "./cli-t8mvqe7n.js";
6
+ } from "./cli-pqnd8are.js";
7
7
  import"./cli-k0vxtzxb.js";
8
8
  import"./cli-97fnztpy.js";
9
9
  import"./cli-y333w08f.js";
@@ -9,7 +9,7 @@ import {
9
9
  runPromptSync,
10
10
  runPromptsCommand,
11
11
  writePromptSyncProgress
12
- } from "./cli-0799n1ej.js";
12
+ } from "./cli-8y7tzqkf.js";
13
13
  import {
14
14
  promptSourceHashPayload
15
15
  } from "./cli-mm48br00.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runPromptsCommand
3
- } from "./cli-0799n1ej.js";
3
+ } from "./cli-8y7tzqkf.js";
4
4
  import {
5
5
  runSkillsCommand
6
6
  } from "./cli-1smcq5pf.js";
@@ -10,7 +10,7 @@ import"./cli-hcwdz9sd.js";
10
10
  import"./cli-mm48br00.js";
11
11
  import {
12
12
  runHarnessCommand
13
- } from "./cli-t8mvqe7n.js";
13
+ } from "./cli-pqnd8are.js";
14
14
  import"./cli-k0vxtzxb.js";
15
15
  import"./cli-97fnztpy.js";
16
16
  import"./cli-y333w08f.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-ai/cli",
3
- "version": "1.55.77",
3
+ "version": "1.55.78",
4
4
  "description": "CLI for Moda: production monitoring and evals for AI agents.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": "moda.skill_index.v1",
3
- "bundled_at": "2026-10-21T09:26:39.170Z",
4
- "cli_version": "1.55.77",
3
+ "bundled_at": "2026-10-21T09:55:25.979Z",
4
+ "cli_version": "1.55.78",
5
5
  "skills": [
6
6
  {
7
7
  "id": "integration-cloudflare-think",