teamshare-bridge 0.14.50 → 0.14.51
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,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.ChartBuilderTool = void 0;
|
|
4
7
|
/**
|
|
5
8
|
* Chart Builder tool.
|
|
6
|
-
* Creates PNG chart images from CSV data using Chart.js +
|
|
7
|
-
* Supports line, bar, pie, scatter
|
|
9
|
+
* Creates PNG chart images from CSV data using Chart.js + @napi-rs/canvas.
|
|
10
|
+
* Supports line, bar, pie, scatter chart types.
|
|
11
|
+
* Zero deprecation warnings — no native build tools required.
|
|
8
12
|
*/
|
|
9
|
-
const
|
|
13
|
+
const canvas_1 = require("@napi-rs/canvas");
|
|
14
|
+
const auto_1 = __importDefault(require("chart.js/auto"));
|
|
10
15
|
function parseCsv(csv) {
|
|
11
16
|
const lines = csv.trim().split(/\r?\n/);
|
|
12
17
|
if (lines.length === 0)
|
|
@@ -44,6 +49,19 @@ const PALETTE = [
|
|
|
44
49
|
'#3b82f6', '#ef4444', '#10b981', '#f59e0b', '#8b5cf6',
|
|
45
50
|
'#ec4899', '#06b6d4', '#84cc16', '#f97316', '#6366f1',
|
|
46
51
|
];
|
|
52
|
+
/** Render a Chart.js config to a PNG buffer using @napi-rs/canvas. */
|
|
53
|
+
async function renderChart(config, width, height) {
|
|
54
|
+
const canvas = (0, canvas_1.createCanvas)(width, height);
|
|
55
|
+
const ctx = canvas.getContext('2d');
|
|
56
|
+
const chart = new auto_1.default(ctx, config);
|
|
57
|
+
// Wait for Chart.js to finish rendering
|
|
58
|
+
await new Promise((resolve) => {
|
|
59
|
+
setTimeout(resolve, 0);
|
|
60
|
+
});
|
|
61
|
+
const buffer = canvas.toBuffer('image/png');
|
|
62
|
+
chart.destroy();
|
|
63
|
+
return buffer;
|
|
64
|
+
}
|
|
47
65
|
class ChartBuilderTool {
|
|
48
66
|
key = 'chart-builder';
|
|
49
67
|
async run(params) {
|
|
@@ -71,11 +89,6 @@ class ChartBuilderTool {
|
|
|
71
89
|
const bgColor = isDark ? '#1f2937' : '#ffffff';
|
|
72
90
|
const textColor = isDark ? '#e5e7eb' : '#374151';
|
|
73
91
|
const gridColor = isDark ? '#4b5563' : '#e5e7eb';
|
|
74
|
-
const canvas = new chartjs_node_canvas_1.ChartJSNodeCanvas({
|
|
75
|
-
width,
|
|
76
|
-
height,
|
|
77
|
-
backgroundColour: bgColor,
|
|
78
|
-
});
|
|
79
92
|
const outputs = [];
|
|
80
93
|
for (const chartType of chartTypes) {
|
|
81
94
|
let config;
|
|
@@ -92,6 +105,7 @@ class ChartBuilderTool {
|
|
|
92
105
|
],
|
|
93
106
|
},
|
|
94
107
|
options: {
|
|
108
|
+
animation: false,
|
|
95
109
|
plugins: {
|
|
96
110
|
legend: { labels: { color: textColor, font: { size: 14 } } },
|
|
97
111
|
title: { display: true, text: `${yKey ?? 'Value'} by ${xKey ?? 'Category'}`, color: textColor },
|
|
@@ -117,6 +131,7 @@ class ChartBuilderTool {
|
|
|
117
131
|
],
|
|
118
132
|
},
|
|
119
133
|
options: {
|
|
134
|
+
animation: false,
|
|
120
135
|
plugins: {
|
|
121
136
|
legend: { labels: { color: textColor } },
|
|
122
137
|
title: { display: true, text: `${yKey ?? 'Y'} vs ${xKey ?? 'X'}`, color: textColor },
|
|
@@ -129,9 +144,9 @@ class ChartBuilderTool {
|
|
|
129
144
|
};
|
|
130
145
|
}
|
|
131
146
|
else {
|
|
132
|
-
// line, bar
|
|
147
|
+
// line, bar
|
|
133
148
|
config = {
|
|
134
|
-
type: chartType === '
|
|
149
|
+
type: chartType === 'bar' ? 'bar' : 'line',
|
|
135
150
|
data: {
|
|
136
151
|
labels,
|
|
137
152
|
datasets: [
|
|
@@ -149,7 +164,7 @@ class ChartBuilderTool {
|
|
|
149
164
|
],
|
|
150
165
|
},
|
|
151
166
|
options: {
|
|
152
|
-
|
|
167
|
+
animation: false,
|
|
153
168
|
plugins: {
|
|
154
169
|
legend: { labels: { color: textColor } },
|
|
155
170
|
title: { display: true, text: `${yKey ?? 'Value'} by ${xKey ?? 'Category'}`, color: textColor },
|
|
@@ -161,14 +176,13 @@ class ChartBuilderTool {
|
|
|
161
176
|
},
|
|
162
177
|
};
|
|
163
178
|
}
|
|
164
|
-
const buffer = await
|
|
179
|
+
const buffer = await renderChart(config, width, height);
|
|
165
180
|
outputs.push({
|
|
166
181
|
buffer,
|
|
167
182
|
fileName: `chart-${chartType}.png`,
|
|
168
183
|
mime: 'image/png',
|
|
169
184
|
});
|
|
170
185
|
}
|
|
171
|
-
const safeName = (yKey ?? 'data').replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 32);
|
|
172
186
|
return {
|
|
173
187
|
outputs,
|
|
174
188
|
log: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-builder.js","sourceRoot":"","sources":["../../../src/lib/tools/chart-builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chart-builder.js","sourceRoot":"","sources":["../../../src/lib/tools/chart-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,23 @@ exports.XlsxWorkbookTool = void 0;
|
|
|
7
7
|
/**
|
|
8
8
|
* Excel Workbook Builder tool.
|
|
9
9
|
* Creates .xlsx files with styled headers, freeze panes, auto-fit columns,
|
|
10
|
-
*
|
|
10
|
+
* and formula support using xlsx-populate (zero deprecation warnings).
|
|
11
11
|
*/
|
|
12
|
-
const
|
|
12
|
+
const xlsx_populate_1 = __importDefault(require("xlsx-populate"));
|
|
13
|
+
/** Convert column index (0-based) to Excel column letter (A, B, ... Z, AA, ...). */
|
|
14
|
+
function colLetter(idx) {
|
|
15
|
+
let letter = '';
|
|
16
|
+
let n = idx;
|
|
17
|
+
while (n >= 0) {
|
|
18
|
+
letter = String.fromCharCode(65 + (n % 26)) + letter;
|
|
19
|
+
n = Math.floor(n / 26) - 1;
|
|
20
|
+
}
|
|
21
|
+
return letter;
|
|
22
|
+
}
|
|
23
|
+
const HEADER_FILL = { type: 'solid', color: { rgb: '1a56db' } };
|
|
24
|
+
const HEADER_BORDER = { style: 'thin', color: { rgb: 'CCCCCC' } };
|
|
25
|
+
const DATA_BORDER = { style: 'thin', color: { rgb: 'E5E7EB' } };
|
|
26
|
+
const ALT_FILL = { type: 'solid', color: { rgb: 'F9FAFB' } };
|
|
13
27
|
class XlsxWorkbookTool {
|
|
14
28
|
key = 'xlsx-workbook';
|
|
15
29
|
async run(params) {
|
|
@@ -19,82 +33,77 @@ class XlsxWorkbookTool {
|
|
|
19
33
|
if (sheets.length === 0) {
|
|
20
34
|
return { outputs: [], error: 'No sheets provided' };
|
|
21
35
|
}
|
|
22
|
-
const workbook =
|
|
23
|
-
workbook.creator = 'TeamShare';
|
|
24
|
-
workbook.created = new Date();
|
|
36
|
+
const workbook = await xlsx_populate_1.default.fromBlankAsync();
|
|
25
37
|
for (const sheetDef of sheets) {
|
|
26
|
-
const
|
|
38
|
+
const sheet = workbook.addSheet(sheetDef.name || 'Sheet1');
|
|
27
39
|
const headers = sheetDef.headers ?? [];
|
|
28
40
|
const rows = sheetDef.rows ?? [];
|
|
29
|
-
//
|
|
41
|
+
// Write headers with styling
|
|
30
42
|
if (headers.length > 0) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
cell.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
headerRow.height = 22;
|
|
43
|
+
for (let c = 0; c < headers.length; c++) {
|
|
44
|
+
const col = colLetter(c);
|
|
45
|
+
sheet.cell(`${col}1`).value(headers[c]).style({
|
|
46
|
+
bold: true,
|
|
47
|
+
fontColor: 'FFFFFF',
|
|
48
|
+
fill: HEADER_FILL,
|
|
49
|
+
horizontalAlignment: 'center',
|
|
50
|
+
verticalAlignment: 'center',
|
|
51
|
+
border: {
|
|
52
|
+
top: HEADER_BORDER,
|
|
53
|
+
bottom: HEADER_BORDER,
|
|
54
|
+
left: HEADER_BORDER,
|
|
55
|
+
right: HEADER_BORDER,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
48
59
|
}
|
|
49
|
-
//
|
|
50
|
-
for (
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
// Write data rows
|
|
61
|
+
for (let r = 0; r < rows.length; r++) {
|
|
62
|
+
const rowData = rows[r];
|
|
63
|
+
for (let c = 0; c < rowData.length; c++) {
|
|
64
|
+
const col = colLetter(c);
|
|
65
|
+
const rowNum = r + 2; // row 1 is headers
|
|
66
|
+
const cell = sheet.cell(`${col}${rowNum}`).value(rowData[c]);
|
|
67
|
+
const style = {
|
|
68
|
+
border: {
|
|
69
|
+
top: DATA_BORDER,
|
|
70
|
+
bottom: DATA_BORDER,
|
|
71
|
+
left: DATA_BORDER,
|
|
72
|
+
right: DATA_BORDER,
|
|
73
|
+
},
|
|
58
74
|
};
|
|
59
75
|
// Alternate row shading
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
type: 'pattern',
|
|
63
|
-
pattern: 'solid',
|
|
64
|
-
fgColor: { argb: 'FFF9FAFB' },
|
|
65
|
-
};
|
|
76
|
+
if (r % 2 === 1) {
|
|
77
|
+
style.fill = ALT_FILL;
|
|
66
78
|
}
|
|
67
|
-
|
|
79
|
+
cell.style(style);
|
|
80
|
+
}
|
|
68
81
|
}
|
|
69
|
-
//
|
|
82
|
+
// Column widths
|
|
70
83
|
if (sheetDef.columnWidths) {
|
|
71
|
-
sheetDef.columnWidths.
|
|
72
|
-
|
|
73
|
-
}
|
|
84
|
+
for (let c = 0; c < sheetDef.columnWidths.length; c++) {
|
|
85
|
+
sheet.column(colLetter(c)).width(sheetDef.columnWidths[c]);
|
|
86
|
+
}
|
|
74
87
|
}
|
|
75
88
|
else if (headers.length > 0) {
|
|
76
|
-
|
|
77
|
-
const maxData = rows.reduce((max,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
ws.getColumn(idx + 1).width = w;
|
|
82
|
-
});
|
|
89
|
+
for (let c = 0; c < headers.length; c++) {
|
|
90
|
+
const maxData = rows.reduce((max, row) => Math.max(max, String(row[c] ?? '').length), 0);
|
|
91
|
+
const width = Math.min(Math.max(headers[c].length, maxData) + 4, 50);
|
|
92
|
+
sheet.column(colLetter(c)).width(width);
|
|
93
|
+
}
|
|
83
94
|
}
|
|
84
95
|
// Freeze header row
|
|
85
96
|
if (sheetDef.freezeHeader && headers.length > 0) {
|
|
86
|
-
|
|
97
|
+
sheet.freezePanes(0, 1);
|
|
87
98
|
}
|
|
88
|
-
// Auto-filter
|
|
99
|
+
// Auto-filter on header row
|
|
89
100
|
if (headers.length > 0 && rows.length > 0) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
};
|
|
101
|
+
const lastCol = colLetter(headers.length - 1);
|
|
102
|
+
const lastRow = rows.length + 1;
|
|
103
|
+
sheet.autoFilter(sheet.range(`A1:${lastCol}${lastRow}`));
|
|
94
104
|
}
|
|
95
105
|
}
|
|
96
|
-
const buffer = await workbook.
|
|
97
|
-
const buf = Buffer.from(buffer);
|
|
106
|
+
const buffer = (await workbook.outputAsync());
|
|
98
107
|
const sheetNames = sheets.map((s) => s.name || 'Sheet1').join(', ');
|
|
99
108
|
const safeName = (sheets[0]?.name ?? 'workbook')
|
|
100
109
|
.replace(/[^a-zA-Z0-9_-]/g, '_')
|
|
@@ -102,7 +111,7 @@ class XlsxWorkbookTool {
|
|
|
102
111
|
return {
|
|
103
112
|
outputs: [
|
|
104
113
|
{
|
|
105
|
-
buffer:
|
|
114
|
+
buffer: Buffer.from(buffer),
|
|
106
115
|
fileName: `${safeName}.xlsx`,
|
|
107
116
|
mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
108
117
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx-workbook.js","sourceRoot":"","sources":["../../../src/lib/tools/xlsx-workbook.ts"],"names":[],"mappings":";;;;;;AAAA;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"xlsx-workbook.js","sourceRoot":"","sources":["../../../src/lib/tools/xlsx-workbook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "teamshare-bridge",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.51",
|
|
4
4
|
"description": "Local bridge for TeamShare agents - CLI session runner, auto-wake WebSocket daemon, and teamshare:// protocol handler.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,17 +38,17 @@
|
|
|
38
38
|
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
+
"@napi-rs/canvas": "^1.0.8",
|
|
41
42
|
"@napi-rs/keyring": "^1.3.0",
|
|
42
43
|
"@types/better-sqlite3": "^9.6.0",
|
|
43
44
|
"better-sqlite3": "^13.0.3",
|
|
44
45
|
"chart.js": "^4.5.1",
|
|
45
|
-
"chartjs-node-canvas": "^5.0.0",
|
|
46
46
|
"docx": "^9.7.1",
|
|
47
|
-
"exceljs": "^4.4.0",
|
|
48
47
|
"pdfkit": "^0.20.2",
|
|
49
48
|
"pptxgenjs": "^4.0.1",
|
|
50
49
|
"sharp": "^0.35.4",
|
|
51
|
-
"socket.io-client": "^4.8.3"
|
|
50
|
+
"socket.io-client": "^4.8.3",
|
|
51
|
+
"xlsx-populate": "^1.21.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/node": "^22.20.1",
|