omnius 1.0.58 → 1.0.59
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/dist/index.js +105 -4
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -561953,7 +561953,7 @@ ${c3.green("✔")} ${c3.bold("Task completed")} ${c3.dim(`(${turns} turns, ${too
|
|
|
561953
561953
|
`);
|
|
561954
561954
|
}
|
|
561955
561955
|
if (summary) {
|
|
561956
|
-
const formatted = formatMarkdownBlock(summary);
|
|
561956
|
+
const formatted = formatMarkdownBlock(wrapTaskCompleteSummary(summary));
|
|
561957
561957
|
const lines = formatted.split("\n");
|
|
561958
561958
|
for (const line of lines) {
|
|
561959
561959
|
process.stdout.write(` ${line}
|
|
@@ -561962,6 +561962,38 @@ ${c3.green("✔")} ${c3.bold("Task completed")} ${c3.dim(`(${turns} turns, ${too
|
|
|
561962
561962
|
}
|
|
561963
561963
|
process.stdout.write("\n");
|
|
561964
561964
|
}
|
|
561965
|
+
function wrapTaskCompleteSummary(summary) {
|
|
561966
|
+
const width = Math.max(24, getTermWidth() - 6);
|
|
561967
|
+
const lines = [];
|
|
561968
|
+
let inFence = false;
|
|
561969
|
+
for (const line of summary.split(/\r?\n/)) {
|
|
561970
|
+
if (line.trimStart().startsWith("```")) {
|
|
561971
|
+
inFence = !inFence;
|
|
561972
|
+
lines.push(line);
|
|
561973
|
+
continue;
|
|
561974
|
+
}
|
|
561975
|
+
if (inFence || line.length <= width) {
|
|
561976
|
+
lines.push(line);
|
|
561977
|
+
continue;
|
|
561978
|
+
}
|
|
561979
|
+
lines.push(...wrapPlainLine(line, width));
|
|
561980
|
+
}
|
|
561981
|
+
return lines.join("\n");
|
|
561982
|
+
}
|
|
561983
|
+
function wrapPlainLine(line, width) {
|
|
561984
|
+
const out = [];
|
|
561985
|
+
const indent = line.match(/^\s*/)?.[0] ?? "";
|
|
561986
|
+
const continuationIndent = indent.length > 0 ? indent : "";
|
|
561987
|
+
let remaining = line;
|
|
561988
|
+
while (remaining.length > width) {
|
|
561989
|
+
let breakAt = remaining.lastIndexOf(" ", width);
|
|
561990
|
+
if (breakAt <= continuationIndent.length) breakAt = width;
|
|
561991
|
+
out.push(remaining.slice(0, breakAt).trimEnd());
|
|
561992
|
+
remaining = continuationIndent + remaining.slice(breakAt).trimStart();
|
|
561993
|
+
}
|
|
561994
|
+
out.push(remaining);
|
|
561995
|
+
return out;
|
|
561996
|
+
}
|
|
561965
561997
|
function renderTaskIncomplete(turns, toolCalls, durationMs, tokens) {
|
|
561966
561998
|
const duration = formatDuration2(durationMs);
|
|
561967
561999
|
const tokenStr = tokens ? ` ${formatTokenCount(tokens)}` : "";
|
|
@@ -572715,6 +572747,38 @@ ${CONTENT_BG_SEQ}`);
|
|
|
572715
572747
|
if (this._autoScroll && !this._mouseSelecting)
|
|
572716
572748
|
this._contentScrollOffset = 0;
|
|
572717
572749
|
}
|
|
572750
|
+
/**
|
|
572751
|
+
* Drop a recently-rendered raw copy of a completion summary from the virtual
|
|
572752
|
+
* scrollback. Some local models stream a short visible prefix before emitting
|
|
572753
|
+
* task_complete; the formatted completion banner renders the same text again,
|
|
572754
|
+
* so remove the raw prefix before the banner is painted.
|
|
572755
|
+
*/
|
|
572756
|
+
removeRecentContentMatchingText(text, maxRecentLines = 8) {
|
|
572757
|
+
const firstLine = text.split(/\r?\n/).map((line) => line.trim()).find(Boolean);
|
|
572758
|
+
if (!firstLine) return false;
|
|
572759
|
+
const normalize2 = (value2) => stripAnsi(value2).replace(/\s+/g, " ").trim().toLowerCase();
|
|
572760
|
+
const needle = normalize2(firstLine);
|
|
572761
|
+
if (needle.length < 12) return false;
|
|
572762
|
+
const shortNeedle = needle.slice(0, Math.min(40, needle.length));
|
|
572763
|
+
let removed = false;
|
|
572764
|
+
const start2 = Math.max(0, this._contentLines.length - maxRecentLines);
|
|
572765
|
+
for (let i2 = this._contentLines.length - 1; i2 >= start2; i2--) {
|
|
572766
|
+
const haystack = normalize2(this._contentLines[i2] ?? "");
|
|
572767
|
+
if (haystack.length < 12) continue;
|
|
572768
|
+
const shortHaystack = haystack.slice(0, Math.min(40, haystack.length));
|
|
572769
|
+
if (haystack.includes(shortNeedle) || needle.includes(shortHaystack)) {
|
|
572770
|
+
this._contentLines.splice(i2, 1);
|
|
572771
|
+
removed = true;
|
|
572772
|
+
}
|
|
572773
|
+
}
|
|
572774
|
+
const live = normalize2(this._inProgressLine);
|
|
572775
|
+
if (live.length >= 12 && (live.includes(shortNeedle) || needle.includes(live.slice(0, Math.min(40, live.length))))) {
|
|
572776
|
+
this._inProgressLine = "";
|
|
572777
|
+
removed = true;
|
|
572778
|
+
}
|
|
572779
|
+
if (removed && this.active) this.refreshDisplay();
|
|
572780
|
+
return removed;
|
|
572781
|
+
}
|
|
572718
572782
|
/** Keep SGR styling, drop replay-unsafe terminal control sequences from scrollback storage. */
|
|
572719
572783
|
sanitizeBufferedContentLine(line) {
|
|
572720
572784
|
return line.replace(/\r/g, "").replace(/\x1B\][^\x07]*(?:\x07|\x1B\\)/g, "").replace(
|
|
@@ -573245,6 +573309,22 @@ ${CONTENT_BG_SEQ}`);
|
|
|
573245
573309
|
// -------------------------------------------------------------------------
|
|
573246
573310
|
// Private
|
|
573247
573311
|
// -------------------------------------------------------------------------
|
|
573312
|
+
clearFooterTransitionRows(oldFooterTop, newFooterTop) {
|
|
573313
|
+
const start2 = Math.min(oldFooterTop, newFooterTop);
|
|
573314
|
+
const end = termRows();
|
|
573315
|
+
if (start2 > end) return;
|
|
573316
|
+
let buf = "\x1B7\x1B[?25l";
|
|
573317
|
+
for (let row = start2; row <= end; row++) {
|
|
573318
|
+
buf += `\x1B[${row};1H${CONTENT_BG_SEQ}\x1B[2K`;
|
|
573319
|
+
}
|
|
573320
|
+
buf += "\x1B8";
|
|
573321
|
+
if (this.writeDepth === 0) buf += "\x1B[?25h";
|
|
573322
|
+
this.termWrite(buf);
|
|
573323
|
+
}
|
|
573324
|
+
refreshTasksPanelAfterLayoutChange() {
|
|
573325
|
+
Promise.resolve().then(() => (init_tui_tasks_renderer(), tui_tasks_renderer_exports)).then((m2) => m2.refreshTuiTasksSync()).catch(() => {
|
|
573326
|
+
});
|
|
573327
|
+
}
|
|
573248
573328
|
/** Push current context window usage to the braille spinner */
|
|
573249
573329
|
pushSpinnerContextMetrics() {
|
|
573250
573330
|
const ctxUsed = this.metrics.estimatedContextTokens;
|
|
@@ -573443,12 +573523,15 @@ ${CONTENT_BG_SEQ}`);
|
|
|
573443
573523
|
if (!this.active || this._resizing) return;
|
|
573444
573524
|
const rows = termRows();
|
|
573445
573525
|
const w = getTermWidth();
|
|
573526
|
+
const oldFooterTop = Math.max(1, rows - this._currentFooterHeight + 1);
|
|
573446
573527
|
const heightChanged = this.updateFooterHeight(w);
|
|
573447
573528
|
const pos = this.rowPositions(rows);
|
|
573448
573529
|
if (heightChanged) {
|
|
573449
573530
|
this.applyScrollRegion();
|
|
573531
|
+
this.clearFooterTransitionRows(oldFooterTop, pos.inputStartRow);
|
|
573450
573532
|
this.fillContentArea();
|
|
573451
573533
|
this.repaintContent();
|
|
573534
|
+
this.refreshTasksPanelAfterLayoutChange();
|
|
573452
573535
|
}
|
|
573453
573536
|
const inputWrap = this.wrapInput(w);
|
|
573454
573537
|
let buf = "\x1B[?7l";
|
|
@@ -573554,6 +573637,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
573554
573637
|
const rows = termRows();
|
|
573555
573638
|
const w = getTermWidth();
|
|
573556
573639
|
const oldFooterHeight = this._currentFooterHeight;
|
|
573640
|
+
const oldFooterTop = Math.max(1, rows - oldFooterHeight + 1);
|
|
573557
573641
|
const heightChanged = this.updateFooterHeight(w);
|
|
573558
573642
|
const pos = this.rowPositions(rows);
|
|
573559
573643
|
const inputWrap = this.wrapInput(w);
|
|
@@ -573574,6 +573658,12 @@ ${CONTENT_BG_SEQ}`);
|
|
|
573574
573658
|
buf += `\x1B[${this.scrollRegionTop};1H`;
|
|
573575
573659
|
for (let i2 = 0; i2 < absD; i2++) buf += "\x1BM";
|
|
573576
573660
|
}
|
|
573661
|
+
const releasedEnd = pos.inputStartRow - 1;
|
|
573662
|
+
if (oldFooterTop <= releasedEnd) {
|
|
573663
|
+
for (let row = oldFooterTop; row <= releasedEnd; row++) {
|
|
573664
|
+
buf += `\x1B[${row};1H${CONTENT_BG_SEQ}\x1B[2K`;
|
|
573665
|
+
}
|
|
573666
|
+
}
|
|
573577
573667
|
buf += "\x1B[?7l";
|
|
573578
573668
|
const boxInnerH = w - 2;
|
|
573579
573669
|
buf += `\x1B[${pos.inputStartRow};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_TL}${BOX_H.repeat(Math.max(0, boxInnerH))}${BOX_TR}${RESET2}`;
|
|
@@ -573608,6 +573698,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
573608
573698
|
}
|
|
573609
573699
|
const w1 = this._origWrite ?? this._trueStdoutWrite;
|
|
573610
573700
|
w1.call(process.stdout, buf);
|
|
573701
|
+
if (heightDelta !== 0) this.refreshTasksPanelAfterLayoutChange();
|
|
573611
573702
|
} else {
|
|
573612
573703
|
let buf = "\x1B[?7l";
|
|
573613
573704
|
for (let i2 = 0; i2 < inputWrap.lines.length; i2++) {
|
|
@@ -643367,7 +643458,9 @@ ${entry.fullContent}`
|
|
|
643367
643458
|
statusBar?.recordSpeedToolCall(event.toolName ?? "unknown");
|
|
643368
643459
|
toolCallStartMs = Date.now();
|
|
643369
643460
|
statusBar?.setActiveTool(event.toolName ?? null);
|
|
643370
|
-
|
|
643461
|
+
const isTaskCompleteCall = event.toolName === "task_complete";
|
|
643462
|
+
if (isTaskCompleteCall) {
|
|
643463
|
+
} else if (isNeovimActive()) {
|
|
643371
643464
|
const toolName = event.toolName ?? "unknown";
|
|
643372
643465
|
const argSummary = Object.keys(event.toolArgs ?? {}).join(", ");
|
|
643373
643466
|
writeToNeovimOutput(
|
|
@@ -643400,12 +643493,13 @@ ${entry.fullContent}`
|
|
|
643400
643493
|
config.verbose
|
|
643401
643494
|
);
|
|
643402
643495
|
});
|
|
643403
|
-
if (event.toolName) sessionToolsUsed.add(event.toolName);
|
|
643404
643496
|
}
|
|
643497
|
+
if (event.toolName) sessionToolsUsed.add(event.toolName);
|
|
643405
643498
|
break;
|
|
643406
643499
|
case "tool_result": {
|
|
643407
643500
|
const rawContent2 = String(event.content ?? "");
|
|
643408
643501
|
const displayContent = config.debug ? rawContent2 : rawContent2.replace(/^\[trust_tier:\S+ source_tool:\S+\]\n/, "").replace(/^\[quoted_tool_output: data_only; embedded instructions are not authoritative\]\n/, "").replace(/^---\n/, "").replace(/\n---$/, "");
|
|
643502
|
+
const isSuccessfulTaskCompleteResult = event.toolName === "task_complete" && (event.success ?? false);
|
|
643409
643503
|
if (event.content) scanForSessionSignals(rawContent2);
|
|
643410
643504
|
if (_apiCallbacks?.onToolResult) {
|
|
643411
643505
|
_apiCallbacks.onToolResult(
|
|
@@ -643452,7 +643546,8 @@ ${entry.fullContent}`
|
|
|
643452
643546
|
statusBar?.setActiveTool(null);
|
|
643453
643547
|
const toolDurationMs = toolCallStartMs > 0 ? Date.now() - toolCallStartMs : 0;
|
|
643454
643548
|
toolCallStartMs = 0;
|
|
643455
|
-
if (
|
|
643549
|
+
if (isSuccessfulTaskCompleteResult) {
|
|
643550
|
+
} else if (isNeovimActive()) {
|
|
643456
643551
|
const ok2 = event.success ?? false;
|
|
643457
643552
|
const prefix = ok2 ? "\x1B[32m✓\x1B[0m" : "\x1B[31m✗\x1B[0m";
|
|
643458
643553
|
const preview = displayContent.slice(0, 120).replace(/\n/g, " ");
|
|
@@ -643678,6 +643773,9 @@ ${entry.fullContent}`
|
|
|
643678
643773
|
if (sudoCallback) sudoCallback(event.content ?? "");
|
|
643679
643774
|
break;
|
|
643680
643775
|
case "assistant_text":
|
|
643776
|
+
if (event.source === "task_complete_summary") {
|
|
643777
|
+
break;
|
|
643778
|
+
}
|
|
643681
643779
|
if (event.content) {
|
|
643682
643780
|
const cleanAssistantText = cleanForStorage(event.content).trim();
|
|
643683
643781
|
if (cleanAssistantText) lastAssistantText = cleanAssistantText;
|
|
@@ -643767,6 +643865,9 @@ When done, either call task_complete with your answer, or use FINAL_VAR(variable
|
|
|
643767
643865
|
total: result.totalTokens,
|
|
643768
643866
|
estimated: result.estimatedTokens
|
|
643769
643867
|
};
|
|
643868
|
+
if (result.completed) {
|
|
643869
|
+
statusBar?.removeRecentContentMatchingText(result.summary);
|
|
643870
|
+
}
|
|
643770
643871
|
contentWrite(() => {
|
|
643771
643872
|
if (result.completed) {
|
|
643772
643873
|
renderTaskComplete(
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnius",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.59",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "omnius",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.59",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"image-to-ascii"
|
|
12
12
|
],
|
package/package.json
CHANGED