@operator-labs/darwin 0.2.0 → 0.4.0
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 +1 -2
- package/dist/app.js +69 -11
- package/dist/app.js.map +1 -1
- package/dist/lib/collaboration-mode.d.ts +5 -0
- package/dist/lib/collaboration-mode.js +65 -0
- package/dist/lib/collaboration-mode.js.map +1 -0
- package/dist/lib/command-surface.d.ts +3 -0
- package/dist/lib/command-surface.js +9 -0
- package/dist/lib/command-surface.js.map +1 -1
- package/dist/lib/operator-harness.d.ts +6 -3
- package/dist/lib/operator-harness.js +97 -19
- package/dist/lib/operator-harness.js.map +1 -1
- package/dist/lib/package-version.d.ts +1 -0
- package/dist/lib/package-version.js +7 -0
- package/dist/lib/package-version.js.map +1 -0
- package/dist/lib/pi-tools.d.ts +2 -1
- package/dist/lib/pi-tools.js +27 -1
- package/dist/lib/pi-tools.js.map +1 -1
- package/dist/ui/components/answer-box.js +4 -5
- package/dist/ui/components/answer-box.js.map +1 -1
- package/dist/ui/components/footer.d.ts +2 -0
- package/dist/ui/components/footer.js +6 -2
- package/dist/ui/components/footer.js.map +1 -1
- package/dist/ui/components/intro.d.ts +2 -1
- package/dist/ui/components/intro.js +5 -2
- package/dist/ui/components/intro.js.map +1 -1
- package/dist/ui/components/note-box.js +1 -2
- package/dist/ui/components/note-box.js.map +1 -1
- package/dist/ui/components/response-content.d.ts +9 -0
- package/dist/ui/components/response-content.js +47 -0
- package/dist/ui/components/response-content.js.map +1 -0
- package/dist/ui/components/timeline-chart.d.ts +11 -0
- package/dist/ui/components/timeline-chart.js +181 -0
- package/dist/ui/components/timeline-chart.js.map +1 -0
- package/dist/utils/response-blocks.d.ts +24 -0
- package/dist/utils/response-blocks.js +147 -0
- package/dist/utils/response-blocks.js.map +1 -0
- package/package.json +2 -2
- package/dist/utils/markdown-table.d.ts +0 -8
- package/dist/utils/markdown-table.js +0 -123
- package/dist/utils/markdown-table.js.map +0 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
function parseNumber(value) {
|
|
2
|
+
const normalized = value.trim().replace(/,/g, "");
|
|
3
|
+
if (!normalized) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
const parsed = Number(normalized);
|
|
7
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
8
|
+
}
|
|
9
|
+
function parseTimestamp(value) {
|
|
10
|
+
const numeric = parseNumber(value);
|
|
11
|
+
if (numeric !== null) {
|
|
12
|
+
return numeric;
|
|
13
|
+
}
|
|
14
|
+
const parsed = Date.parse(value.trim());
|
|
15
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
16
|
+
}
|
|
17
|
+
function parsePoint(value) {
|
|
18
|
+
const parts = (value.includes("|") ? value.split("|") : value.split(",")).map((part) => part.trim());
|
|
19
|
+
if (parts.length < 2) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const time = parseTimestamp(parts[0] || "");
|
|
23
|
+
const numericValue = parseNumber(parts[1] || "");
|
|
24
|
+
if (time === null || numericValue === null) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const series = parts[2] || "default";
|
|
28
|
+
const label = parts[3] || undefined;
|
|
29
|
+
const emphasisValue = (parts[4] || "").toLowerCase();
|
|
30
|
+
return {
|
|
31
|
+
time,
|
|
32
|
+
value: numericValue,
|
|
33
|
+
series,
|
|
34
|
+
label,
|
|
35
|
+
emphasis: emphasisValue === "true" || emphasisValue === "yes" || emphasisValue === "highlight",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function parseChartBlock(chartText) {
|
|
39
|
+
const lines = chartText
|
|
40
|
+
.replace(/\r\n/g, "\n")
|
|
41
|
+
.split("\n")
|
|
42
|
+
.map((line) => line.trim())
|
|
43
|
+
.filter(Boolean);
|
|
44
|
+
if (lines.length === 0) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const points = [];
|
|
48
|
+
let title;
|
|
49
|
+
let yLabel;
|
|
50
|
+
let yMin;
|
|
51
|
+
let yMax;
|
|
52
|
+
let explicitSeriesOrder = [];
|
|
53
|
+
for (const line of lines) {
|
|
54
|
+
const separatorIndex = line.indexOf(":");
|
|
55
|
+
if (separatorIndex === -1) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const key = line.slice(0, separatorIndex).trim().toLowerCase();
|
|
59
|
+
const value = line.slice(separatorIndex + 1).trim();
|
|
60
|
+
if (!value) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
switch (key) {
|
|
64
|
+
case "title":
|
|
65
|
+
title = value;
|
|
66
|
+
break;
|
|
67
|
+
case "y":
|
|
68
|
+
case "ylabel":
|
|
69
|
+
case "y_label":
|
|
70
|
+
yLabel = value;
|
|
71
|
+
break;
|
|
72
|
+
case "ymin":
|
|
73
|
+
case "y_min": {
|
|
74
|
+
const parsed = parseNumber(value);
|
|
75
|
+
if (parsed !== null) {
|
|
76
|
+
yMin = parsed;
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "ymax":
|
|
81
|
+
case "y_max": {
|
|
82
|
+
const parsed = parseNumber(value);
|
|
83
|
+
if (parsed !== null) {
|
|
84
|
+
yMax = parsed;
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case "series":
|
|
89
|
+
explicitSeriesOrder = value
|
|
90
|
+
.split(",")
|
|
91
|
+
.map((item) => item.trim())
|
|
92
|
+
.filter(Boolean);
|
|
93
|
+
break;
|
|
94
|
+
case "point": {
|
|
95
|
+
const point = parsePoint(value);
|
|
96
|
+
if (point) {
|
|
97
|
+
points.push(point);
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (points.length === 0) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
points.sort((a, b) => a.time - b.time);
|
|
107
|
+
const derivedSeries = points.map((point) => point.series).filter((series, index, array) => array.indexOf(series) === index);
|
|
108
|
+
const seriesOrder = explicitSeriesOrder.length > 0 ? explicitSeriesOrder : derivedSeries;
|
|
109
|
+
return {
|
|
110
|
+
title,
|
|
111
|
+
yLabel,
|
|
112
|
+
yMin,
|
|
113
|
+
yMax,
|
|
114
|
+
seriesOrder,
|
|
115
|
+
points,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export function splitResponseBlocks(text) {
|
|
119
|
+
const blocks = [];
|
|
120
|
+
const regex = /```chart\s*\n([\s\S]*?)```/g;
|
|
121
|
+
let lastIndex = 0;
|
|
122
|
+
for (const match of text.matchAll(regex)) {
|
|
123
|
+
const matchIndex = match.index ?? 0;
|
|
124
|
+
const before = text.slice(lastIndex, matchIndex).trim();
|
|
125
|
+
if (before) {
|
|
126
|
+
blocks.push({ type: "markdown", text: before });
|
|
127
|
+
}
|
|
128
|
+
const chartBody = match[1] ?? "";
|
|
129
|
+
const parsedChart = parseChartBlock(chartBody);
|
|
130
|
+
if (parsedChart) {
|
|
131
|
+
blocks.push({ type: "chart", spec: parsedChart });
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const rawChart = match[0]?.trim();
|
|
135
|
+
if (rawChart) {
|
|
136
|
+
blocks.push({ type: "markdown", text: rawChart });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
lastIndex = matchIndex + match[0].length;
|
|
140
|
+
}
|
|
141
|
+
const trailing = text.slice(lastIndex).trim();
|
|
142
|
+
if (trailing) {
|
|
143
|
+
blocks.push({ type: "markdown", text: trailing });
|
|
144
|
+
}
|
|
145
|
+
return blocks.length > 0 ? blocks : [{ type: "markdown", text: text.trim() }];
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=response-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-blocks.js","sourceRoot":"","sources":["../../src/utils/response-blocks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@operator-labs/darwin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Darwin implements natural selection for OpenClaw agents on Operator.io",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@mariozechner/pi-ai": "^0.58.3",
|
|
31
31
|
"@mariozechner/pi-coding-agent": "^0.58.3",
|
|
32
32
|
"@mariozechner/pi-tui": "^0.58.3",
|
|
33
|
-
"@operator-labs/sdk": "
|
|
33
|
+
"@operator-labs/sdk": "0.2.0",
|
|
34
34
|
"chalk": "^5.6.2",
|
|
35
35
|
"open": "^10.2.0"
|
|
36
36
|
},
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare function parseMarkdownTable(tableText: string): {
|
|
2
|
-
headers: string[];
|
|
3
|
-
rows: string[][];
|
|
4
|
-
} | null;
|
|
5
|
-
export declare function renderBoxTable(headers: string[], rows: string[][]): string;
|
|
6
|
-
export declare function transformMarkdownTables(content: string): string;
|
|
7
|
-
export declare function transformBold(content: string): string;
|
|
8
|
-
export declare function formatResponse(content: string): string;
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
const BOX = {
|
|
3
|
-
topLeft: "┌",
|
|
4
|
-
topRight: "┐",
|
|
5
|
-
bottomLeft: "└",
|
|
6
|
-
bottomRight: "┘",
|
|
7
|
-
horizontal: "─",
|
|
8
|
-
vertical: "│",
|
|
9
|
-
topT: "┬",
|
|
10
|
-
bottomT: "┴",
|
|
11
|
-
leftT: "├",
|
|
12
|
-
rightT: "┤",
|
|
13
|
-
cross: "┼",
|
|
14
|
-
};
|
|
15
|
-
function isNumeric(value) {
|
|
16
|
-
const trimmed = value.trim();
|
|
17
|
-
return /^[$]?[-+]?[\d,]+\.?\d*[%BMK]?$/.test(trimmed);
|
|
18
|
-
}
|
|
19
|
-
export function parseMarkdownTable(tableText) {
|
|
20
|
-
const lines = tableText.trim().split("\n").map((line) => line.trim());
|
|
21
|
-
if (lines.length < 2) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
const headerLine = lines[0];
|
|
25
|
-
if (!headerLine.includes("|")) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
const headers = headerLine
|
|
29
|
-
.split("|")
|
|
30
|
-
.map((cell) => cell.trim())
|
|
31
|
-
.filter((_, index, array) => (index > 0 && index < array.length - 1) || array.length === 1);
|
|
32
|
-
if (headers.length === 0) {
|
|
33
|
-
headers.push(...headerLine.split("|").map((cell) => cell.trim()));
|
|
34
|
-
}
|
|
35
|
-
const separatorLine = lines[1];
|
|
36
|
-
if (!separatorLine || !/^[\s|:-]+$/.test(separatorLine)) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const rows = [];
|
|
40
|
-
for (let index = 2; index < lines.length; index += 1) {
|
|
41
|
-
const line = lines[index];
|
|
42
|
-
if (!line.includes("|")) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
const cells = line.split("|").map((cell) => cell.trim());
|
|
46
|
-
if (cells[0] === "") {
|
|
47
|
-
cells.shift();
|
|
48
|
-
}
|
|
49
|
-
if (cells[cells.length - 1] === "") {
|
|
50
|
-
cells.pop();
|
|
51
|
-
}
|
|
52
|
-
if (cells.length > 0) {
|
|
53
|
-
rows.push(cells);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return headers.length > 0 ? { headers, rows } : null;
|
|
57
|
-
}
|
|
58
|
-
export function renderBoxTable(headers, rows) {
|
|
59
|
-
const widths = headers.map((header) => header.length);
|
|
60
|
-
for (const row of rows) {
|
|
61
|
-
for (let index = 0; index < row.length; index += 1) {
|
|
62
|
-
if (index < widths.length) {
|
|
63
|
-
widths[index] = Math.max(widths[index], row[index].length);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const alignRight = headers.map((_, index) => {
|
|
68
|
-
let numericCount = 0;
|
|
69
|
-
for (const row of rows) {
|
|
70
|
-
if (row[index] && isNumeric(row[index])) {
|
|
71
|
-
numericCount += 1;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return numericCount > rows.length / 2;
|
|
75
|
-
});
|
|
76
|
-
const pad = (value, width, right) => right ? value.padStart(width) : value.padEnd(width);
|
|
77
|
-
const lines = [];
|
|
78
|
-
lines.push(BOX.topLeft + widths.map((width) => BOX.horizontal.repeat(width + 2)).join(BOX.topT) + BOX.topRight);
|
|
79
|
-
lines.push(BOX.vertical +
|
|
80
|
-
headers.map((header, index) => ` ${pad(header, widths[index], false)} `).join(BOX.vertical) +
|
|
81
|
-
BOX.vertical);
|
|
82
|
-
lines.push(BOX.leftT + widths.map((width) => BOX.horizontal.repeat(width + 2)).join(BOX.cross) + BOX.rightT);
|
|
83
|
-
for (const row of rows) {
|
|
84
|
-
lines.push(BOX.vertical +
|
|
85
|
-
widths
|
|
86
|
-
.map((width, index) => ` ${pad(row[index] || "", width, alignRight[index])} `)
|
|
87
|
-
.join(BOX.vertical) +
|
|
88
|
-
BOX.vertical);
|
|
89
|
-
}
|
|
90
|
-
lines.push(BOX.bottomLeft +
|
|
91
|
-
widths.map((width) => BOX.horizontal.repeat(width + 2)).join(BOX.bottomT) +
|
|
92
|
-
BOX.bottomRight);
|
|
93
|
-
return lines.join("\n");
|
|
94
|
-
}
|
|
95
|
-
export function transformMarkdownTables(content) {
|
|
96
|
-
const normalized = content
|
|
97
|
-
.replace(/\r\n/g, "\n")
|
|
98
|
-
.split("\n")
|
|
99
|
-
.map((line) => line.trimEnd())
|
|
100
|
-
.join("\n");
|
|
101
|
-
const tableRegex = /^(\|[^\n]+\|\n\|[-:| \t]+\|(?:\n\|[^\n]+\|)*)/gm;
|
|
102
|
-
const tableRegex2 = /^([^\n|]*\|[^\n]+\n[-:| \t]+(?:\n[^\n|]*\|[^\n]+)*)/gm;
|
|
103
|
-
let result = normalized;
|
|
104
|
-
result = result.replace(tableRegex, (match) => {
|
|
105
|
-
const parsed = parseMarkdownTable(match);
|
|
106
|
-
return parsed && parsed.rows.length > 0 ? renderBoxTable(parsed.headers, parsed.rows) : match;
|
|
107
|
-
});
|
|
108
|
-
result = result.replace(tableRegex2, (match) => {
|
|
109
|
-
if (match.includes(BOX.topLeft)) {
|
|
110
|
-
return match;
|
|
111
|
-
}
|
|
112
|
-
const parsed = parseMarkdownTable(match);
|
|
113
|
-
return parsed && parsed.rows.length > 0 ? renderBoxTable(parsed.headers, parsed.rows) : match;
|
|
114
|
-
});
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
export function transformBold(content) {
|
|
118
|
-
return content.replace(/\*\*([^*]+)\*\*/g, (_, text) => chalk.bold(text));
|
|
119
|
-
}
|
|
120
|
-
export function formatResponse(content) {
|
|
121
|
-
return transformBold(transformMarkdownTables(content));
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=markdown-table.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-table.js","sourceRoot":"","sources":["../../src/utils/markdown-table.ts"],"names":[],"mappings":"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"}
|