tuimon 0.1.0 → 0.3.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.
Files changed (139) hide show
  1. package/AI.md +191 -0
  2. package/README.md +240 -94
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +3 -0
  5. package/dist/browser.js.map +1 -1
  6. package/dist/cli.js +224 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config.d.ts +17 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +106 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/fkeybar.d.ts.map +1 -1
  13. package/dist/fkeybar.js +13 -0
  14. package/dist/fkeybar.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +148 -18
  17. package/dist/index.js.map +1 -1
  18. package/dist/layout/generator-css.d.ts +3 -0
  19. package/dist/layout/generator-css.d.ts.map +1 -0
  20. package/dist/layout/generator-css.js +202 -0
  21. package/dist/layout/generator-css.js.map +1 -0
  22. package/dist/layout/generator-js.d.ts +3 -0
  23. package/dist/layout/generator-js.d.ts.map +1 -0
  24. package/dist/layout/generator-js.js +353 -0
  25. package/dist/layout/generator-js.js.map +1 -0
  26. package/dist/layout/generator.d.ts +4 -0
  27. package/dist/layout/generator.d.ts.map +1 -0
  28. package/dist/layout/generator.js +124 -0
  29. package/dist/layout/generator.js.map +1 -0
  30. package/dist/layout/theme.d.ts +4 -0
  31. package/dist/layout/theme.d.ts.map +1 -0
  32. package/dist/layout/theme.js +28 -0
  33. package/dist/layout/theme.js.map +1 -0
  34. package/dist/layout/types.d.ts +68 -0
  35. package/dist/layout/types.d.ts.map +1 -0
  36. package/dist/layout/types.js +3 -0
  37. package/dist/layout/types.js.map +1 -0
  38. package/dist/quick/auto-layout.d.ts +5 -0
  39. package/dist/quick/auto-layout.d.ts.map +1 -0
  40. package/dist/quick/auto-layout.js +262 -0
  41. package/dist/quick/auto-layout.js.map +1 -0
  42. package/dist/quick/db/detect.d.ts +16 -0
  43. package/dist/quick/db/detect.d.ts.map +1 -0
  44. package/dist/quick/db/detect.js +131 -0
  45. package/dist/quick/db/detect.js.map +1 -0
  46. package/dist/quick/db/mongo.d.ts +10 -0
  47. package/dist/quick/db/mongo.d.ts.map +1 -0
  48. package/dist/quick/db/mongo.js +81 -0
  49. package/dist/quick/db/mongo.js.map +1 -0
  50. package/dist/quick/db/mysql.d.ts +8 -0
  51. package/dist/quick/db/mysql.d.ts.map +1 -0
  52. package/dist/quick/db/mysql.js +43 -0
  53. package/dist/quick/db/mysql.js.map +1 -0
  54. package/dist/quick/db/postgres.d.ts +8 -0
  55. package/dist/quick/db/postgres.d.ts.map +1 -0
  56. package/dist/quick/db/postgres.js +47 -0
  57. package/dist/quick/db/postgres.js.map +1 -0
  58. package/dist/quick/db/sqlite.d.ts +8 -0
  59. package/dist/quick/db/sqlite.d.ts.map +1 -0
  60. package/dist/quick/db/sqlite.js +43 -0
  61. package/dist/quick/db/sqlite.js.map +1 -0
  62. package/dist/quick/db-mode.d.ts +13 -0
  63. package/dist/quick/db-mode.d.ts.map +1 -0
  64. package/dist/quick/db-mode.js +159 -0
  65. package/dist/quick/db-mode.js.map +1 -0
  66. package/dist/quick/detect.d.ts +4 -0
  67. package/dist/quick/detect.d.ts.map +1 -0
  68. package/dist/quick/detect.js +76 -0
  69. package/dist/quick/detect.js.map +1 -0
  70. package/dist/quick/file-mode.d.ts +5 -0
  71. package/dist/quick/file-mode.d.ts.map +1 -0
  72. package/dist/quick/file-mode.js +158 -0
  73. package/dist/quick/file-mode.js.map +1 -0
  74. package/dist/quick/parsers/csv.d.ts +3 -0
  75. package/dist/quick/parsers/csv.d.ts.map +1 -0
  76. package/dist/quick/parsers/csv.js +145 -0
  77. package/dist/quick/parsers/csv.js.map +1 -0
  78. package/dist/quick/parsers/detect-meta.d.ts +7 -0
  79. package/dist/quick/parsers/detect-meta.d.ts.map +1 -0
  80. package/dist/quick/parsers/detect-meta.js +35 -0
  81. package/dist/quick/parsers/detect-meta.js.map +1 -0
  82. package/dist/quick/parsers/json.d.ts +3 -0
  83. package/dist/quick/parsers/json.d.ts.map +1 -0
  84. package/dist/quick/parsers/json.js +74 -0
  85. package/dist/quick/parsers/json.js.map +1 -0
  86. package/dist/quick/parsers/log.d.ts +3 -0
  87. package/dist/quick/parsers/log.d.ts.map +1 -0
  88. package/dist/quick/parsers/log.js +185 -0
  89. package/dist/quick/parsers/log.js.map +1 -0
  90. package/dist/quick/parsers/modsec.d.ts +3 -0
  91. package/dist/quick/parsers/modsec.d.ts.map +1 -0
  92. package/dist/quick/parsers/modsec.js +338 -0
  93. package/dist/quick/parsers/modsec.js.map +1 -0
  94. package/dist/quick/presets/coverage.d.ts +3 -0
  95. package/dist/quick/presets/coverage.d.ts.map +1 -0
  96. package/dist/quick/presets/coverage.js +362 -0
  97. package/dist/quick/presets/coverage.js.map +1 -0
  98. package/dist/quick/presets/deps.d.ts +3 -0
  99. package/dist/quick/presets/deps.d.ts.map +1 -0
  100. package/dist/quick/presets/deps.js +194 -0
  101. package/dist/quick/presets/deps.js.map +1 -0
  102. package/dist/quick/presets/docker.d.ts +3 -0
  103. package/dist/quick/presets/docker.d.ts.map +1 -0
  104. package/dist/quick/presets/docker.js +100 -0
  105. package/dist/quick/presets/docker.js.map +1 -0
  106. package/dist/quick/presets/git.d.ts +3 -0
  107. package/dist/quick/presets/git.d.ts.map +1 -0
  108. package/dist/quick/presets/git.js +116 -0
  109. package/dist/quick/presets/git.js.map +1 -0
  110. package/dist/quick/presets/ps.d.ts +3 -0
  111. package/dist/quick/presets/ps.d.ts.map +1 -0
  112. package/dist/quick/presets/ps.js +168 -0
  113. package/dist/quick/presets/ps.js.map +1 -0
  114. package/dist/quick/presets/runner.d.ts +3 -0
  115. package/dist/quick/presets/runner.d.ts.map +1 -0
  116. package/dist/quick/presets/runner.js +20 -0
  117. package/dist/quick/presets/runner.js.map +1 -0
  118. package/dist/quick/presets/types.d.ts +7 -0
  119. package/dist/quick/presets/types.d.ts.map +1 -0
  120. package/dist/quick/presets/types.js +2 -0
  121. package/dist/quick/presets/types.js.map +1 -0
  122. package/dist/quick/types.d.ts +90 -0
  123. package/dist/quick/types.d.ts.map +1 -0
  124. package/dist/quick/types.js +3 -0
  125. package/dist/quick/types.js.map +1 -0
  126. package/dist/quick/watch-mode.d.ts +3 -0
  127. package/dist/quick/watch-mode.d.ts.map +1 -0
  128. package/dist/quick/watch-mode.js +156 -0
  129. package/dist/quick/watch-mode.js.map +1 -0
  130. package/dist/server.js +2 -2
  131. package/dist/server.js.map +1 -1
  132. package/dist/types.d.ts +9 -2
  133. package/dist/types.d.ts.map +1 -1
  134. package/examples/demo.ts +134 -0
  135. package/examples/generate-access-log.ts +42 -0
  136. package/examples/screenshot-test.ts +105 -0
  137. package/examples/screenshot.png +0 -0
  138. package/frame-log.txt +830 -0
  139. package/package.json +10 -5
@@ -0,0 +1,100 @@
1
+ import { execSync } from 'node:child_process';
2
+ function parsePercent(value) {
3
+ return parseFloat(value.replace('%', '')) || 0;
4
+ }
5
+ function execCommand(cmd) {
6
+ try {
7
+ return execSync(cmd, { encoding: 'utf-8', timeout: 10_000 });
8
+ }
9
+ catch (err) {
10
+ const msg = err instanceof Error ? err.message : String(err);
11
+ if (msg.includes('ENOENT') || msg.includes('not found') || msg.includes('command not found')) {
12
+ throw new Error('[tuimon] Docker not found. Make sure Docker is installed and running.');
13
+ }
14
+ throw err;
15
+ }
16
+ }
17
+ function parseJsonLines(output) {
18
+ return output
19
+ .trim()
20
+ .split('\n')
21
+ .filter((line) => line.trim() !== '')
22
+ .map((line) => JSON.parse(line));
23
+ }
24
+ export function dockerPreset() {
25
+ // Verify docker is available on init
26
+ try {
27
+ execSync('docker --version', { encoding: 'utf-8', stdio: 'pipe' });
28
+ }
29
+ catch {
30
+ throw new Error('[tuimon] Docker not found. Make sure Docker is installed and running.');
31
+ }
32
+ const layout = {
33
+ title: 'Docker',
34
+ stats: [
35
+ { id: 'containers', label: 'Containers', type: 'stat' },
36
+ { id: 'running', label: 'Running', type: 'stat' },
37
+ { id: 'totalCpu', label: 'CPU Usage', type: 'gauge' },
38
+ { id: 'totalMem', label: 'Memory', type: 'gauge' },
39
+ ],
40
+ panels: [
41
+ { id: 'cpuHistory', label: 'CPU per Container', type: 'line', span: 2 },
42
+ { id: 'health', label: 'Container Status', type: 'status-grid' },
43
+ { id: 'memUsage', label: 'Memory per Container', type: 'bar' },
44
+ { id: 'events', label: 'Recent Events', type: 'event-log', throttle: 3000 },
45
+ ],
46
+ };
47
+ const data = () => {
48
+ const statsOutput = execCommand("docker stats --no-stream --format '{{json .}}'");
49
+ const statsEntries = parseJsonLines(statsOutput);
50
+ const psOutput = execCommand("docker ps --format '{{json .}}'");
51
+ const psEntries = parseJsonLines(psOutput);
52
+ const totalContainers = psEntries.length;
53
+ const runningCount = psEntries.filter((c) => c.State === 'running').length;
54
+ const totalCpu = statsEntries.reduce((sum, e) => sum + parsePercent(e.CPUPerc), 0);
55
+ const totalMem = statsEntries.length > 0
56
+ ? statsEntries.reduce((sum, e) => sum + parsePercent(e.MemPerc), 0) / statsEntries.length
57
+ : 0;
58
+ const cpuHistory = {};
59
+ for (const entry of statsEntries) {
60
+ cpuHistory[entry.Name] = parsePercent(entry.CPUPerc);
61
+ }
62
+ const health = psEntries.map((c) => ({
63
+ label: c.Names,
64
+ status: c.State === 'running' ? 'ok' : c.State === 'exited' ? 'error' : 'warn',
65
+ }));
66
+ const memUsage = {};
67
+ for (const entry of statsEntries) {
68
+ memUsage[entry.Name] = parsePercent(entry.MemPerc);
69
+ }
70
+ let events = [];
71
+ try {
72
+ const eventsOutput = execCommand("docker events --since 60s --until 0s --format '{{json .}}'");
73
+ const lines = eventsOutput
74
+ .trim()
75
+ .split('\n')
76
+ .filter((line) => line.trim() !== '');
77
+ events = lines.map((line) => {
78
+ const parsed = JSON.parse(line);
79
+ const name = parsed.Actor?.Attributes?.name ?? 'unknown';
80
+ const action = parsed.Action ?? 'unknown';
81
+ return { text: `${name}: ${action}`, type: 'info' };
82
+ });
83
+ }
84
+ catch {
85
+ events = [];
86
+ }
87
+ return {
88
+ containers: totalContainers,
89
+ running: runningCount,
90
+ totalCpu: Math.round(totalCpu * 100) / 100,
91
+ totalMem: Math.round(totalMem * 100) / 100,
92
+ cpuHistory,
93
+ health,
94
+ memUsage,
95
+ events,
96
+ };
97
+ };
98
+ return { layout, data, refresh: 1000 };
99
+ }
100
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/quick/presets/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PresetResult } from './types.js';
2
+ export declare function gitPreset(): PresetResult;
3
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/git.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAiB9C,wBAAgB,SAAS,IAAI,YAAY,CA+GxC"}
@@ -0,0 +1,116 @@
1
+ import { execSync } from 'node:child_process';
2
+ function execGit(cmd) {
3
+ try {
4
+ return execSync(cmd, { encoding: 'utf-8', timeout: 30_000, stdio: ['pipe', 'pipe', 'pipe'] });
5
+ }
6
+ catch (err) {
7
+ const msg = err instanceof Error ? err.message : String(err);
8
+ if (msg.includes('not a git repository') || msg.includes('Not a git repository')) {
9
+ throw new Error('[tuimon] Not a git repository. Run this command from inside a git repo.');
10
+ }
11
+ if (msg.includes('ENOENT') || msg.includes('not found') || msg.includes('command not found')) {
12
+ throw new Error('[tuimon] Git not found. Make sure git is installed.');
13
+ }
14
+ throw err;
15
+ }
16
+ }
17
+ export function gitPreset() {
18
+ // Verify we're in a git repo on init
19
+ try {
20
+ execSync('git rev-parse --is-inside-work-tree', { encoding: 'utf-8', stdio: 'pipe' });
21
+ }
22
+ catch {
23
+ throw new Error('[tuimon] Not a git repository. Run this command from inside a git repo.');
24
+ }
25
+ const layout = {
26
+ title: 'Git',
27
+ stats: [
28
+ { id: 'commits', label: 'Total Commits', type: 'stat' },
29
+ { id: 'contributors', label: 'Contributors', type: 'stat' },
30
+ { id: 'branches', label: 'Branches', type: 'stat' },
31
+ { id: 'filesChanged', label: 'Files Changed (30d)', type: 'stat' },
32
+ ],
33
+ panels: [
34
+ { id: 'frequency', label: 'Commits per Day (30 days)', type: 'bar', span: 2 },
35
+ { id: 'topContributors', label: 'Top Contributors', type: 'bar' },
36
+ { id: 'topFiles', label: 'Most Changed Files', type: 'bar' },
37
+ { id: 'recentCommits', label: 'Recent Commits', type: 'event-log', span: 2 },
38
+ ],
39
+ };
40
+ const data = () => {
41
+ // Total commits
42
+ const commitCountStr = execGit('git rev-list --count HEAD').trim();
43
+ const commits = parseInt(commitCountStr, 10) || 0;
44
+ // Contributors
45
+ const shortlogOutput = execGit('git shortlog -sn --no-merges HEAD');
46
+ const contributorLines = shortlogOutput
47
+ .trim()
48
+ .split('\n')
49
+ .filter((line) => line.trim() !== '');
50
+ const contributorEntries = contributorLines.map((line) => {
51
+ const match = line.trim().match(/^(\d+)\t(.+)$/);
52
+ return match ? { count: parseInt(match[1] ?? '0', 10), name: match[2] ?? 'unknown' } : null;
53
+ }).filter((e) => e !== null);
54
+ const contributorsCount = contributorEntries.length;
55
+ const topContributors = {};
56
+ for (const entry of contributorEntries.slice(0, 10)) {
57
+ topContributors[entry.name] = entry.count;
58
+ }
59
+ // Branches
60
+ const branchOutput = execGit('git branch --list');
61
+ const branchCount = branchOutput
62
+ .trim()
63
+ .split('\n')
64
+ .filter((line) => line.trim() !== '').length;
65
+ // Commits per day (30 days)
66
+ const dateOutput = execGit('git log --since="30 days ago" --format="%ad" --date=short');
67
+ const dates = dateOutput
68
+ .trim()
69
+ .split('\n')
70
+ .filter((line) => line.trim() !== '');
71
+ const frequency = {};
72
+ for (const date of dates) {
73
+ const d = date.trim();
74
+ frequency[d] = (frequency[d] ?? 0) + 1;
75
+ }
76
+ // Files changed in 30 days
77
+ const filesOutput = execGit('git log --since="30 days ago" --name-only --format=""');
78
+ const allFiles = filesOutput
79
+ .trim()
80
+ .split('\n')
81
+ .filter((line) => line.trim() !== '')
82
+ .map((line) => line.trim());
83
+ const fileCounts = new Map();
84
+ for (const file of allFiles) {
85
+ fileCounts.set(file, (fileCounts.get(file) ?? 0) + 1);
86
+ }
87
+ const uniqueFilesChanged = fileCounts.size;
88
+ // Top 10 most changed files
89
+ const sortedFiles = [...fileCounts.entries()]
90
+ .sort((a, b) => b[1] - a[1])
91
+ .slice(0, 10);
92
+ const topFiles = {};
93
+ for (const [file, count] of sortedFiles) {
94
+ topFiles[file] = count;
95
+ }
96
+ // Recent commits
97
+ const recentOutput = execGit('git log -20 --format="%h %s (%an, %ar)"');
98
+ const recentCommits = recentOutput
99
+ .trim()
100
+ .split('\n')
101
+ .filter((line) => line.trim() !== '')
102
+ .map((line) => ({ text: line.trim(), type: 'info' }));
103
+ return {
104
+ commits,
105
+ contributors: contributorsCount,
106
+ branches: branchCount,
107
+ filesChanged: uniqueFilesChanged,
108
+ frequency,
109
+ topContributors,
110
+ topFiles,
111
+ recentCommits,
112
+ };
113
+ };
114
+ return { layout, data };
115
+ }
116
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/quick/presets/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PresetResult } from './types.js';
2
+ export declare function psPreset(): PresetResult;
3
+ //# sourceMappingURL=ps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/ps.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AA4F9C,wBAAgB,QAAQ,IAAI,YAAY,CA0FvC"}
@@ -0,0 +1,168 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ function execCommand(cmd) {
4
+ try {
5
+ return execSync(cmd, { encoding: 'utf-8', timeout: 5000 });
6
+ }
7
+ catch (err) {
8
+ const msg = err instanceof Error ? err.message : String(err);
9
+ if (msg.includes('ENOENT') || msg.includes('not found') || msg.includes('command not found')) {
10
+ throw new Error('[tuimon] ps command not found. This preset requires a Unix-like system (Linux/macOS). Windows is not supported.');
11
+ }
12
+ throw err;
13
+ }
14
+ }
15
+ function readFile(path) {
16
+ try {
17
+ return readFileSync(path, 'utf-8');
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ function parseLoadAvg() {
24
+ const content = readFile('/proc/loadavg');
25
+ if (content === undefined)
26
+ return undefined;
27
+ const parts = content.trim().split(/\s+/);
28
+ const one = parts[0];
29
+ const five = parts[1];
30
+ const fifteen = parts[2];
31
+ if (one === undefined || five === undefined || fifteen === undefined)
32
+ return undefined;
33
+ return `${one} / ${five} / ${fifteen}`;
34
+ }
35
+ function parseMemPercent() {
36
+ const content = readFile('/proc/meminfo');
37
+ if (content === undefined)
38
+ return undefined;
39
+ const totalMatch = content.match(/MemTotal:\s+(\d+)/);
40
+ const availMatch = content.match(/MemAvailable:\s+(\d+)/);
41
+ if (totalMatch === null || availMatch === null)
42
+ return undefined;
43
+ const total = parseInt(totalMatch[1] ?? '0', 10);
44
+ const avail = parseInt(availMatch[1] ?? '0', 10);
45
+ if (total === 0)
46
+ return undefined;
47
+ return Math.round(((total - avail) / total) * 10000) / 100;
48
+ }
49
+ function parsePsOutput(output) {
50
+ const lines = output.trim().split('\n');
51
+ // Skip header line
52
+ const entries = [];
53
+ for (let i = 1; i < lines.length; i++) {
54
+ const line = lines[i];
55
+ if (line === undefined || line.trim() === '')
56
+ continue;
57
+ const parts = line.trim().split(/\s+/);
58
+ const user = parts[0];
59
+ const pid = parts[1];
60
+ const cpuStr = parts[2];
61
+ const memStr = parts[3];
62
+ if (user === undefined || pid === undefined || cpuStr === undefined || memStr === undefined)
63
+ continue;
64
+ // Command is everything from column index 10 onward
65
+ const command = parts.slice(10).join(' ') || parts.slice(4).join(' ');
66
+ entries.push({
67
+ user,
68
+ pid,
69
+ cpu: parseFloat(cpuStr) || 0,
70
+ mem: parseFloat(memStr) || 0,
71
+ command,
72
+ });
73
+ }
74
+ return entries;
75
+ }
76
+ function getLoadAvgFallback() {
77
+ try {
78
+ const output = execCommand('uptime');
79
+ const match = output.match(/load averages?:\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/);
80
+ if (match !== null) {
81
+ return `${match[1] ?? '?'} / ${match[2] ?? '?'} / ${match[3] ?? '?'}`;
82
+ }
83
+ }
84
+ catch {
85
+ // ignore
86
+ }
87
+ return '? / ? / ?';
88
+ }
89
+ export function psPreset() {
90
+ // Verify ps is available
91
+ if (process.platform === 'win32') {
92
+ throw new Error('[tuimon] ps preset requires a Unix-like system (Linux/macOS). Windows is not supported. Consider using PowerShell\'s Get-Process instead.');
93
+ }
94
+ try {
95
+ execSync('ps --version 2>&1 || ps aux > /dev/null 2>&1', { encoding: 'utf-8', stdio: 'pipe', timeout: 5000 });
96
+ }
97
+ catch {
98
+ throw new Error('[tuimon] ps command not available on this system.');
99
+ }
100
+ const layout = {
101
+ title: 'Processes',
102
+ stats: [
103
+ { id: 'total', label: 'Total Processes', type: 'stat' },
104
+ { id: 'cpuUsage', label: 'CPU Usage', type: 'gauge' },
105
+ { id: 'memUsage', label: 'Memory Usage', type: 'gauge' },
106
+ { id: 'loadAvg', label: 'Load Average', type: 'stat' },
107
+ ],
108
+ panels: [
109
+ { id: 'topCpu', label: 'Top CPU Processes', type: 'bar', span: 2 },
110
+ { id: 'topMem', label: 'Top Memory Processes', type: 'bar' },
111
+ { id: 'cpuHistory', label: 'CPU History', type: 'line' },
112
+ { id: 'processList', label: 'Process List', type: 'event-log', span: 2, throttle: 2000 },
113
+ ],
114
+ };
115
+ const data = () => {
116
+ const psOutput = execCommand('ps aux --sort=-%cpu | head -11');
117
+ const processes = parsePsOutput(psOutput);
118
+ const top10 = processes.slice(0, 10);
119
+ // Total process count
120
+ const countOutput = execCommand('ps aux');
121
+ const totalLines = countOutput.trim().split('\n');
122
+ const total = Math.max(0, totalLines.length - 1); // subtract header
123
+ // CPU usage: sum of top processes, capped at 100
124
+ const cpuSum = top10.reduce((sum, p) => sum + p.cpu, 0);
125
+ const cpuUsage = Math.min(100, Math.round(cpuSum * 100) / 100);
126
+ // Memory usage: try /proc/meminfo first, fallback to process sum
127
+ const procMem = parseMemPercent();
128
+ const memUsage = procMem !== undefined
129
+ ? procMem
130
+ : Math.min(100, Math.round(top10.reduce((sum, p) => sum + p.mem, 0) * 100) / 100);
131
+ // Load average: try /proc/loadavg first, fallback to uptime
132
+ const loadAvg = parseLoadAvg() ?? getLoadAvgFallback();
133
+ // Top CPU bar chart
134
+ const topCpu = {};
135
+ for (const p of top10) {
136
+ const name = p.command.split('/').pop()?.split(' ')[0] ?? p.command;
137
+ const key = name || `pid:${p.pid}`;
138
+ topCpu[key] = (topCpu[key] ?? 0) + p.cpu;
139
+ }
140
+ // Top Memory bar chart — re-sort by memory
141
+ const byMem = [...processes].sort((a, b) => b.mem - a.mem).slice(0, 10);
142
+ const topMem = {};
143
+ for (const p of byMem) {
144
+ const name = p.command.split('/').pop()?.split(' ')[0] ?? p.command;
145
+ const key = name || `pid:${p.pid}`;
146
+ topMem[key] = (topMem[key] ?? 0) + p.mem;
147
+ }
148
+ // CPU history — single data point per refresh, line chart accumulates
149
+ const cpuHistory = { CPU: cpuUsage };
150
+ // Process list — event-log entries
151
+ const processList = top10.map((p) => {
152
+ const name = p.command.split('/').pop()?.split(' ')[0] ?? p.command;
153
+ return `${name} ${p.cpu}% CPU ${p.mem}% MEM ${p.command}`;
154
+ });
155
+ return {
156
+ total,
157
+ cpuUsage,
158
+ memUsage,
159
+ loadAvg,
160
+ topCpu,
161
+ topMem,
162
+ cpuHistory,
163
+ processList,
164
+ };
165
+ };
166
+ return { layout, data, refresh: 1000 };
167
+ }
168
+ //# sourceMappingURL=ps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps.js","sourceRoot":"","sources":["../../../src/quick/presets/ps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PresetResult } from './types.js';
2
+ export declare function runPreset(preset: PresetResult): Promise<void>;
3
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnE"}
@@ -0,0 +1,20 @@
1
+ import tuimon from '../../index.js';
2
+ export async function runPreset(preset) {
3
+ const dash = await tuimon.start({
4
+ pages: {
5
+ main: {
6
+ html: '',
7
+ default: true,
8
+ layout: preset.layout,
9
+ keys: {
10
+ F5: { label: 'Refresh', action: async () => { await dash.render(await Promise.resolve(preset.data())); } },
11
+ F10: { label: 'Quit', action: () => process.exit(0) },
12
+ },
13
+ },
14
+ },
15
+ refresh: preset.refresh,
16
+ data: preset.data,
17
+ renderDelay: 0,
18
+ });
19
+ }
20
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/quick/presets/runner.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,gBAAgB,CAAA;AAEnC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAoB;IAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE;oBACzG,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;iBACtD;aACF;SACF;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,CAAC;KACf,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { LayoutConfig } from '../../layout/types.js';
2
+ export interface PresetResult {
3
+ layout: LayoutConfig;
4
+ data: () => Record<string, unknown> | Promise<Record<string, unknown>>;
5
+ refresh?: number | undefined;
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACtE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/quick/presets/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ export type InputType = 'json' | 'csv' | 'log' | 'module' | 'url' | 'stdin';
2
+ export interface TableData {
3
+ type: 'table';
4
+ columns: string[];
5
+ rows: Record<string, unknown>[];
6
+ meta: {
7
+ totalRows: number;
8
+ numericColumns: string[];
9
+ booleanColumns: string[];
10
+ categoricalColumns: string[];
11
+ };
12
+ }
13
+ export interface LogData {
14
+ type: 'log';
15
+ format: 'nginx' | 'json' | 'modsec' | 'plain';
16
+ entries: LogEntry[];
17
+ stats: {
18
+ totalLines: number;
19
+ timeRange?: {
20
+ start: string;
21
+ end: string;
22
+ } | undefined;
23
+ statusCodes?: Record<string, number> | undefined;
24
+ methods?: Record<string, number> | undefined;
25
+ topEndpoints?: Record<string, number> | undefined;
26
+ topIPs?: Record<string, number> | undefined;
27
+ errorCount?: number | undefined;
28
+ };
29
+ }
30
+ export interface LogEntry {
31
+ raw: string;
32
+ timestamp?: string | undefined;
33
+ ip?: string | undefined;
34
+ method?: string | undefined;
35
+ path?: string | undefined;
36
+ status?: number | undefined;
37
+ bytes?: number | undefined;
38
+ referer?: string | undefined;
39
+ userAgent?: string | undefined;
40
+ level?: string | undefined;
41
+ message?: string | undefined;
42
+ }
43
+ export interface ModSecData {
44
+ type: 'modsec';
45
+ events: ModSecEvent[];
46
+ stats: {
47
+ totalEvents: number;
48
+ blockedRequests: number;
49
+ uniqueIPs: number;
50
+ severityCounts: Record<string, number>;
51
+ topRules: Record<string, number>;
52
+ topIPs: Record<string, number>;
53
+ attackCategories: Record<string, number>;
54
+ timeRange?: {
55
+ start: string;
56
+ end: string;
57
+ } | undefined;
58
+ };
59
+ }
60
+ export interface ModSecEvent {
61
+ uniqueId: string;
62
+ timestamp: string;
63
+ clientIp: string;
64
+ clientPort?: number | undefined;
65
+ serverIp?: string | undefined;
66
+ serverPort?: number | undefined;
67
+ method: string;
68
+ uri: string;
69
+ protocol?: string | undefined;
70
+ httpCode: number;
71
+ messages: ModSecMessage[];
72
+ action?: string | undefined;
73
+ phase?: number | undefined;
74
+ raw: string;
75
+ }
76
+ export interface ModSecMessage {
77
+ id: string;
78
+ msg: string;
79
+ severity: string;
80
+ tags?: string[] | undefined;
81
+ data?: string | undefined;
82
+ }
83
+ export interface LiveData {
84
+ type: 'live';
85
+ getData: () => Record<string, unknown> | Promise<Record<string, unknown>>;
86
+ refresh?: number;
87
+ title?: string;
88
+ }
89
+ export type ParsedData = TableData | LogData | ModSecData | LiveData;
90
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/quick/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // ─── Input detection ─────────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quick/types.ts"],"names":[],"mappings":"AAAA,gFAAgF"}
@@ -0,0 +1,3 @@
1
+ export declare function startWatchModule(filePath: string): Promise<void>;
2
+ export declare function startWatchUrl(url: string, interval?: number): Promise<void>;
3
+ //# sourceMappingURL=watch-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-mode.d.ts","sourceRoot":"","sources":["../../src/quick/watch-mode.ts"],"names":[],"mappings":"AAYA,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDtE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCvF"}