omp-fabric 1.12.0 → 1.13.1

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
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.13.1
4
+
5
+ ### Fixed
6
+
7
+ - The status line no longer reads `healthy` beside a fault. `state` described the ledger file and the fault message described the runtime, and printing them side by side produced `lcm · healthy · … · degraded: …`. The report now carries one reconciled status, with the ledger's own word kept separately, so a renderer added later is correct without repeating the reconciliation. When the two facts differ the line says `degraded (ledger healthy)`.
8
+ - Reconciling the live session's own file while that file is being appended is counted as a raced read and retried, no longer as an error. The reader validates the file size before and after, and a session writing its own transcript trips that check by construction. A source that never settles is reported as incomplete discovery. An unreadable file, a cross-project mismatch and a dropped entry are all still counted and surfaced exactly as before.
9
+ - A reconciliation fault no longer outlives its cause. It was recorded once at session selection, and with a single call site nothing revisited it, so one momentary race pinned the message for the rest of the session. While an error is outstanding the runtime re-runs the same check at the turn boundary, at most three times per session, and only a clean pass replaces the record.
10
+ - Long lines wrap on every tool surface. 1.13.0 fixed the multicall renderer; the single-call and settled-result surfaces in `fabric-exec-tool.ts` kept clipping, one of them because wrapping was tied to whether the call happened to produce agent preview lines. That flag was tracked to the commit that introduced it and protected nothing. Wrapping is now the default in `BoundedLineList` and cannot be omitted at a call site; the row limit is the only knob. Nine call sites across two files were audited, and the four that could clip user-visible content now wrap.
11
+
12
+ ## 1.13.0
13
+
14
+ ### Fixed
15
+
16
+ - LCM maintenance runs when there is work, so the summary DAG exists before a compaction needs it. 1.12.0 gated maintenance on context occupancy reaching `compaction.softThresholdRatio`, but compaction serves a precomputed frontier and itself pushes occupancy back down, so a real project could sit below the threshold indefinitely while its backlog grew. Measured on a live ledger across a turn boundary: entries rose from 10,001 to 10,005 while pending jobs stayed at 96, completed stayed at 84 and zero model calls were made. A pass is now due when the active branch carries a leaf's worth of uncovered entries, when a claimable job for that branch is waiting, or when occupancy reaches the ratio. The daily and per-session model budgets are the ceiling: an exhausted budget schedules no pass at all, which also stops an exhausted budget from burning a job's attempts until it retires.
17
+ - A maintenance job whose owner died is reclaimed whatever the occupancy. The sweep sat inside the gated pass, so on a project below the threshold a dead lease was stranded forever; the live ledger carried nine, expired between ten and eighteen hours earlier.
18
+ - Long tool rows wrap in the compact display. They were clipped at the right edge with no marker, so the end of a command or an error was simply gone. Compact rows wrap to three rows and say ` …+N` when more was dropped; expanded output is unchanged. The header, the phase row, a failed call's error text and the hidden-calls line were never wrappable in either mode and now are.
19
+
20
+ ### Changed
21
+
22
+ - `compaction.softThresholdRatio` is a floor that forces a maintenance pass, no longer the permission to run one. Maintenance also runs on its own backlog, so the ratio now covers the tail below one leaf before a compaction asks for it. The `0`-is-off convention, the fail-open on an unreadable occupancy reading, and the clamp range are unchanged.
23
+
3
24
  ## 1.12.0
4
25
 
5
26
  ### Fixed
@@ -3981,6 +3981,7 @@ var configuredDiffWrapRows = Number.parseInt(
3981
3981
  10
3982
3982
  );
3983
3983
  var DIFF_WRAP_ROWS = Number.isFinite(configuredDiffWrapRows) && configuredDiffWrapRows > 0 ? configuredDiffWrapRows : 3;
3984
+ var COMPACT_WRAP_ROWS = 3;
3984
3985
  var EXPAND_KEYBINDING = "app.tools.expand";
3985
3986
  var COLLAPSED_MULTICALL_LIMIT = 8;
3986
3987
  var EXPANDED_MULTICALL_LIMIT = 30;
@@ -4040,12 +4041,19 @@ var truncateBoundedLine = (line, width) => {
4040
4041
  }
4041
4042
  return truncated.endsWith(TEXT_SGR_RESET) ? truncated : truncated + TEXT_SGR_RESET;
4042
4043
  };
4044
+ var appendWrapDropMarker = (row, width, dropped, theme) => {
4045
+ const marker = ` \u2026+${dropped}`;
4046
+ const markerWidth = visibleWidth2(marker);
4047
+ if (width <= markerWidth + 2) return truncateBoundedLine(row, width);
4048
+ const head = truncateBoundedLine(row, width - markerWidth);
4049
+ return head + (theme ? theme.fg("dim", marker) : marker);
4050
+ };
4043
4051
  var BoundedLineList = class _BoundedLineList {
4044
- constructor(lines, theme, diffIntensity = "off", wrapLineIndexes, inheritBackground = false) {
4052
+ constructor(lines, theme, diffIntensity = "off", wrapRowLimit, inheritBackground = false) {
4045
4053
  this.lines = lines;
4046
4054
  this.theme = theme;
4047
4055
  this.diffIntensity = diffIntensity;
4048
- this.wrapLineIndexes = wrapLineIndexes;
4056
+ this.wrapRowLimit = wrapRowLimit;
4049
4057
  this.inheritBackground = inheritBackground;
4050
4058
  }
4051
4059
  #cachedWidth;
@@ -4059,20 +4067,19 @@ var BoundedLineList = class _BoundedLineList {
4059
4067
  const rawLine = this.lines[lineIndex];
4060
4068
  const { kind, line } = parseMarkedDiffLine(rawLine);
4061
4069
  if (!kind) {
4062
- let renderedRows;
4063
- if (this.wrapLineIndexes?.has(lineIndex)) {
4064
- const continuationIndent = width > 2 ? " " : "";
4065
- const wrapped = wrapTextWithAnsi(
4066
- line,
4067
- Math.max(1, width - visibleWidth2(continuationIndent))
4068
- );
4069
- renderedRows = wrapped.map(
4070
- (row, index) => truncateBoundedLine(
4071
- index === 0 ? row : continuationIndent + row,
4072
- width
4073
- )
4074
- );
4075
- } else renderedRows = [truncateBoundedLine(line, width)];
4070
+ const continuationIndent = width > 2 ? " " : "";
4071
+ const wrapped = wrapTextWithAnsi(
4072
+ line,
4073
+ Math.max(1, width - visibleWidth2(continuationIndent))
4074
+ );
4075
+ if (wrapped.length === 0) wrapped.push("");
4076
+ const limit = Math.max(1, this.wrapRowLimit ?? wrapped.length);
4077
+ const kept = wrapped.slice(0, limit);
4078
+ const dropped = wrapped.length - kept.length;
4079
+ const renderedRows = kept.map((row, index) => {
4080
+ const indented = index === 0 ? row : continuationIndent + row;
4081
+ return dropped > 0 && index === kept.length - 1 ? appendWrapDropMarker(indented, width, dropped, this.theme) : truncateBoundedLine(indented, width);
4082
+ });
4076
4083
  rows.push(...this.inheritBackground ? renderedRows.map(inheritEnclosingBackground) : renderedRows);
4077
4084
  continue;
4078
4085
  }
@@ -4101,7 +4108,7 @@ var BoundedLineList = class _BoundedLineList {
4101
4108
  this.lines,
4102
4109
  this.theme,
4103
4110
  this.diffIntensity,
4104
- this.wrapLineIndexes,
4111
+ this.wrapRowLimit,
4105
4112
  true
4106
4113
  );
4107
4114
  }
@@ -4123,7 +4130,8 @@ var InheritedBackgroundComponent = class {
4123
4130
  }
4124
4131
  };
4125
4132
  var inheritComponentBackground = (component) => component instanceof BoundedLineList ? component.withInheritedBackground() : new InheritedBackgroundComponent(component);
4126
- var renderBoundedLines = (lines, theme, diffIntensity = "off", wrapLineIndexes) => new BoundedLineList(lines, theme, diffIntensity, wrapLineIndexes);
4133
+ var renderBoundedLines = (lines, theme, diffIntensity = "off", wrapRowLimit) => new BoundedLineList(lines, theme, diffIntensity, wrapRowLimit);
4134
+ var wrapRowLimitFor = (expanded) => expanded ? void 0 : COMPACT_WRAP_ROWS;
4127
4135
  var fabricMulticallCallLimit = (expanded) => expanded ? EXPANDED_MULTICALL_LIMIT : COLLAPSED_MULTICALL_LIMIT;
4128
4136
  var visibleMulticallAudits = (audits, expanded) => {
4129
4137
  const limit = fabricMulticallCallLimit(expanded);
@@ -4264,7 +4272,7 @@ var renderFabricWriteArgumentPreview = (input, theme, invalidate) => {
4264
4272
  theme.fg("dim", `\u2026 ${body.hidden} more ${body.hidden === 1 ? "line" : "lines"}`) + (input.expanded ? "" : theme.fg("dim", " \xB7 ") + expandHint(theme))
4265
4273
  );
4266
4274
  }
4267
- return renderBoundedLines(rows2);
4275
+ return renderBoundedLines(rows2, theme, "off", wrapRowLimitFor(input.expanded));
4268
4276
  }
4269
4277
  const completed = Math.max(
4270
4278
  0,
@@ -4320,7 +4328,7 @@ var renderFabricWriteArgumentPreview = (input, theme, invalidate) => {
4320
4328
  theme.fg("dim", `\u2026 ${hidden} more ${hidden === 1 ? "write" : "writes"}`) + (input.expanded ? "" : theme.fg("dim", " \xB7 ") + expandHint(theme))
4321
4329
  );
4322
4330
  }
4323
- return renderBoundedLines(rows);
4331
+ return renderBoundedLines(rows, theme, "off", wrapRowLimitFor(input.expanded));
4324
4332
  };
4325
4333
  var shortIdOf = (value) => typeof value === "string" ? value.slice(0, 8) : void 0;
4326
4334
  var countOf = (result) => Array.isArray(result) ? String(result.length) : "";
@@ -4620,7 +4628,6 @@ var renderFabricMulticallPartial = (input, theme, invalidate) => {
4620
4628
  const progress = input.progress ? compactProgressPreview(input.progress) : "";
4621
4629
  if (progress) header += theme.fg("dim", ` \xB7 ${progress}`);
4622
4630
  const rows = [header];
4623
- const wrapLineIndexes = input.expanded ? /* @__PURE__ */ new Set() : void 0;
4624
4631
  if (input.phases.length > 0) {
4625
4632
  rows.push(theme.fg("dim", input.phases.map((phase) => `\u25C6 ${phase}`).join(" ")));
4626
4633
  }
@@ -4642,7 +4649,6 @@ var renderFabricMulticallPartial = (input, theme, invalidate) => {
4642
4649
  } else if (previewLines[0]) {
4643
4650
  callRow += ` ${previewLines[0]}`;
4644
4651
  }
4645
- if (previewLines.length > 0) wrapLineIndexes?.add(rows.length);
4646
4652
  rows.push(callRow);
4647
4653
  if (audit.success !== false && input.preview?.auditIndex === auditIndex) {
4648
4654
  for (const line of input.preview.body.split("\n")) rows.push(` ${line}`);
@@ -4656,10 +4662,7 @@ var renderFabricMulticallPartial = (input, theme, invalidate) => {
4656
4662
  }
4657
4663
  }
4658
4664
  if (audit.success !== false && previewLines.length > 1) {
4659
- for (const line of previewLines.slice(1)) {
4660
- wrapLineIndexes?.add(rows.length);
4661
- rows.push(line);
4662
- }
4665
+ for (const line of previewLines.slice(1)) rows.push(line);
4663
4666
  }
4664
4667
  }
4665
4668
  const callsHidden = input.audits.length - callsShown.length;
@@ -4673,7 +4676,7 @@ var renderFabricMulticallPartial = (input, theme, invalidate) => {
4673
4676
  rows,
4674
4677
  theme,
4675
4678
  input.core?.settings.diffIntensity ?? "off",
4676
- wrapLineIndexes
4679
+ wrapRowLimitFor(input.expanded)
4677
4680
  );
4678
4681
  };
4679
4682
  var CORE_TOOL_NAMES = /* @__PURE__ */ new Set(["bash", "read", "write", "edit", "grep", "find", "ls"]);
@@ -4952,6 +4955,7 @@ export {
4952
4955
  safeTerminalText,
4953
4956
  inheritComponentBackground,
4954
4957
  renderBoundedLines,
4958
+ wrapRowLimitFor,
4955
4959
  fabricMulticallCallLimit,
4956
4960
  expandHint,
4957
4961
  restoreLegacyBashCommands,
@@ -4976,4 +4980,4 @@ export {
4976
4980
  formatJsonAsYaml,
4977
4981
  formatFabricValue
4978
4982
  };
4979
- //# sourceMappingURL=chunk-NVLD2FPK.js.map
4983
+ //# sourceMappingURL=chunk-LWD4273F.js.map