@moda-ai/cli 1.55.93 → 1.55.94

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/README.md CHANGED
@@ -437,3 +437,32 @@ Both commands accept two flags to inline a message window per row:
437
437
  ## License
438
438
 
439
439
  MIT
440
+
441
+ ### Local change impact (experimental)
442
+
443
+ `moda harness impact --path=<checkout> --from=<old-commit> --to=<new-commit> --json`
444
+ follows changed JavaScript/TypeScript symbols through checker-confirmed references to model
445
+ calls, agents, prompt units, and tool definitions. Alternatively pass `--diff=<zero-context-diff>`
446
+ against `--from`. Control-flow additions use the old enclosing function. Single-line edits use
447
+ changed columns to distinguish changed literals from unchanged siblings.
448
+
449
+ The command builds a disposable old source snapshot, preserves working-tree edits, returns only
450
+ the reached slice, and makes no API calls or replays. It excludes assets and source files above
451
+ 1 MiB; diff inputs have a 16 MiB aggregate source budget. Closure is bounded to 5,000 symbols and
452
+ 100,000 references; returned units are bounded to 2,000 units / 2 MiB of literal text. Unchanged
453
+ context reached through a changed symbol is capped at 20 units per call site and 400 in all
454
+ (`contextTruncated`), so it never displaces changed text. Skips, closure budgets and a dropped
455
+ changed-text unit (`unitSliceTruncated`) are reported as warnings and mean the result is incomplete.
456
+ Changed styles, media and fonts are listed in `ignoredFiles`: they carry no prompt or tool text.
457
+
458
+ Optional `--calls=<json>` accepts `{sourceCommit, candidate, sections, tools}` records.
459
+ `sourceCommit` must equal the resolved old commit, and `candidate` uses the frontend change-tests
460
+ `ChangeCase` fields. Sections/tools supply `text` and `sources: [{path, line, endLine}]` from a
461
+ same-agent source join. Optional `agentIds` rejects mismatched owners. Optional `toolDefinitions`
462
+ (`[{name, definition}]`) joins recorded definitions to unique extracted tool names, owners and
463
+ old source text. Ambiguous definitions remain unlinked. Templates require all static fragments
464
+ in order; changed old literals cannot qualify through unchanged sibling text.
465
+
466
+ Keep call inputs and redirected output outside the repository: they can contain customer content.
467
+ Python, unresolved dynamic dispatch and new files without old context remain unmodelled. This
468
+ local result does not establish deployment attribution or production precision/recall.
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  buildDoctorReport
3
- } from "./cli-2ctk8gy8.js";
3
+ } from "./cli-gdm94hh4.js";
4
4
  import"./cli-qwnkv4jy.js";
5
- import"./cli-0qgxw8cx.js";
5
+ import"./cli-dk08ywkn.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-fjrhp1af.js") : undefined;
98
+ const harness = graph ? await import("./harness-wnye9acm.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),