@snoglobe/helios 0.1.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/LICENSE +202 -0
- package/README.md +222 -0
- package/dist/app.d.ts +9 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +289 -0
- package/dist/app.js.map +1 -0
- package/dist/core/agent-loop.d.ts +16 -0
- package/dist/core/agent-loop.d.ts.map +1 -0
- package/dist/core/agent-loop.js +64 -0
- package/dist/core/agent-loop.js.map +1 -0
- package/dist/core/monitor.d.ts +15 -0
- package/dist/core/monitor.d.ts.map +1 -0
- package/dist/core/monitor.js +40 -0
- package/dist/core/monitor.js.map +1 -0
- package/dist/core/orchestrator.d.ts +51 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +235 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/state-machine.d.ts +19 -0
- package/dist/core/state-machine.d.ts.map +1 -0
- package/dist/core/state-machine.js +42 -0
- package/dist/core/state-machine.js.map +1 -0
- package/dist/core/stickies.d.ts +20 -0
- package/dist/core/stickies.d.ts.map +1 -0
- package/dist/core/stickies.js +41 -0
- package/dist/core/stickies.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/context-gate.d.ts +49 -0
- package/dist/memory/context-gate.d.ts.map +1 -0
- package/dist/memory/context-gate.js +109 -0
- package/dist/memory/context-gate.js.map +1 -0
- package/dist/memory/experiment-tracker.d.ts +21 -0
- package/dist/memory/experiment-tracker.d.ts.map +1 -0
- package/dist/memory/experiment-tracker.js +117 -0
- package/dist/memory/experiment-tracker.js.map +1 -0
- package/dist/memory/memory-store.d.ts +37 -0
- package/dist/memory/memory-store.d.ts.map +1 -0
- package/dist/memory/memory-store.js +150 -0
- package/dist/memory/memory-store.js.map +1 -0
- package/dist/memory/token-estimator.d.ts +7 -0
- package/dist/memory/token-estimator.d.ts.map +1 -0
- package/dist/memory/token-estimator.js +30 -0
- package/dist/memory/token-estimator.js.map +1 -0
- package/dist/metrics/analyzer.d.ts +15 -0
- package/dist/metrics/analyzer.d.ts.map +1 -0
- package/dist/metrics/analyzer.js +67 -0
- package/dist/metrics/analyzer.js.map +1 -0
- package/dist/metrics/collector.d.ts +23 -0
- package/dist/metrics/collector.d.ts.map +1 -0
- package/dist/metrics/collector.js +60 -0
- package/dist/metrics/collector.js.map +1 -0
- package/dist/metrics/parser.d.ts +21 -0
- package/dist/metrics/parser.d.ts.map +1 -0
- package/dist/metrics/parser.js +43 -0
- package/dist/metrics/parser.js.map +1 -0
- package/dist/metrics/parsers/csv.d.ts +8 -0
- package/dist/metrics/parsers/csv.d.ts.map +1 -0
- package/dist/metrics/parsers/csv.js +37 -0
- package/dist/metrics/parsers/csv.js.map +1 -0
- package/dist/metrics/parsers/json.d.ts +8 -0
- package/dist/metrics/parsers/json.d.ts.map +1 -0
- package/dist/metrics/parsers/json.js +42 -0
- package/dist/metrics/parsers/json.js.map +1 -0
- package/dist/metrics/parsers/stdout.d.ts +3 -0
- package/dist/metrics/parsers/stdout.d.ts.map +1 -0
- package/dist/metrics/parsers/stdout.js +79 -0
- package/dist/metrics/parsers/stdout.js.map +1 -0
- package/dist/metrics/parsers/tensorboard.d.ts +16 -0
- package/dist/metrics/parsers/tensorboard.d.ts.map +1 -0
- package/dist/metrics/parsers/tensorboard.js +22 -0
- package/dist/metrics/parsers/tensorboard.js.map +1 -0
- package/dist/metrics/store.d.ts +33 -0
- package/dist/metrics/store.d.ts.map +1 -0
- package/dist/metrics/store.js +141 -0
- package/dist/metrics/store.js.map +1 -0
- package/dist/providers/auth/auth-manager.d.ts +22 -0
- package/dist/providers/auth/auth-manager.d.ts.map +1 -0
- package/dist/providers/auth/auth-manager.js +77 -0
- package/dist/providers/auth/auth-manager.js.map +1 -0
- package/dist/providers/auth/token-store.d.ts +14 -0
- package/dist/providers/auth/token-store.d.ts.map +1 -0
- package/dist/providers/auth/token-store.js +55 -0
- package/dist/providers/auth/token-store.js.map +1 -0
- package/dist/providers/claude/provider.d.ts +46 -0
- package/dist/providers/claude/provider.d.ts.map +1 -0
- package/dist/providers/claude/provider.js +606 -0
- package/dist/providers/claude/provider.js.map +1 -0
- package/dist/providers/openai/callback-server.d.ts +11 -0
- package/dist/providers/openai/callback-server.d.ts.map +1 -0
- package/dist/providers/openai/callback-server.js +58 -0
- package/dist/providers/openai/callback-server.js.map +1 -0
- package/dist/providers/openai/oauth.d.ts +16 -0
- package/dist/providers/openai/oauth.d.ts.map +1 -0
- package/dist/providers/openai/oauth.js +110 -0
- package/dist/providers/openai/oauth.js.map +1 -0
- package/dist/providers/openai/provider.d.ts +29 -0
- package/dist/providers/openai/provider.d.ts.map +1 -0
- package/dist/providers/openai/provider.js +363 -0
- package/dist/providers/openai/provider.js.map +1 -0
- package/dist/providers/retry.d.ts +6 -0
- package/dist/providers/retry.d.ts.map +1 -0
- package/dist/providers/retry.js +13 -0
- package/dist/providers/retry.js.map +1 -0
- package/dist/providers/sse.d.ts +6 -0
- package/dist/providers/sse.d.ts.map +1 -0
- package/dist/providers/sse.js +35 -0
- package/dist/providers/sse.js.map +1 -0
- package/dist/providers/types.d.ts +102 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +11 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/remote/config.d.ts +14 -0
- package/dist/remote/config.d.ts.map +1 -0
- package/dist/remote/config.js +81 -0
- package/dist/remote/config.js.map +1 -0
- package/dist/remote/connection-pool.d.ts +26 -0
- package/dist/remote/connection-pool.d.ts.map +1 -0
- package/dist/remote/connection-pool.js +268 -0
- package/dist/remote/connection-pool.js.map +1 -0
- package/dist/remote/executor.d.ts +23 -0
- package/dist/remote/executor.d.ts.map +1 -0
- package/dist/remote/executor.js +53 -0
- package/dist/remote/executor.js.map +1 -0
- package/dist/remote/file-sync.d.ts +19 -0
- package/dist/remote/file-sync.d.ts.map +1 -0
- package/dist/remote/file-sync.js +44 -0
- package/dist/remote/file-sync.js.map +1 -0
- package/dist/remote/types.d.ts +33 -0
- package/dist/remote/types.d.ts.map +1 -0
- package/dist/remote/types.js +2 -0
- package/dist/remote/types.js.map +1 -0
- package/dist/scheduler/sleep-manager.d.ts +33 -0
- package/dist/scheduler/sleep-manager.d.ts.map +1 -0
- package/dist/scheduler/sleep-manager.js +132 -0
- package/dist/scheduler/sleep-manager.js.map +1 -0
- package/dist/scheduler/ssh-batcher.d.ts +23 -0
- package/dist/scheduler/ssh-batcher.d.ts.map +1 -0
- package/dist/scheduler/ssh-batcher.js +98 -0
- package/dist/scheduler/ssh-batcher.js.map +1 -0
- package/dist/scheduler/state-store.d.ts +8 -0
- package/dist/scheduler/state-store.d.ts.map +1 -0
- package/dist/scheduler/state-store.js +48 -0
- package/dist/scheduler/state-store.js.map +1 -0
- package/dist/scheduler/trigger-scheduler.d.ts +24 -0
- package/dist/scheduler/trigger-scheduler.d.ts.map +1 -0
- package/dist/scheduler/trigger-scheduler.js +142 -0
- package/dist/scheduler/trigger-scheduler.js.map +1 -0
- package/dist/scheduler/triggers/file.d.ts +4 -0
- package/dist/scheduler/triggers/file.d.ts.map +1 -0
- package/dist/scheduler/triggers/file.js +39 -0
- package/dist/scheduler/triggers/file.js.map +1 -0
- package/dist/scheduler/triggers/metric.d.ts +4 -0
- package/dist/scheduler/triggers/metric.d.ts.map +1 -0
- package/dist/scheduler/triggers/metric.js +74 -0
- package/dist/scheduler/triggers/metric.js.map +1 -0
- package/dist/scheduler/triggers/process-exit.d.ts +4 -0
- package/dist/scheduler/triggers/process-exit.d.ts.map +1 -0
- package/dist/scheduler/triggers/process-exit.js +13 -0
- package/dist/scheduler/triggers/process-exit.js.map +1 -0
- package/dist/scheduler/triggers/resource.d.ts +4 -0
- package/dist/scheduler/triggers/resource.d.ts.map +1 -0
- package/dist/scheduler/triggers/resource.js +54 -0
- package/dist/scheduler/triggers/resource.js.map +1 -0
- package/dist/scheduler/triggers/timer.d.ts +3 -0
- package/dist/scheduler/triggers/timer.d.ts.map +1 -0
- package/dist/scheduler/triggers/timer.js +4 -0
- package/dist/scheduler/triggers/timer.js.map +1 -0
- package/dist/scheduler/triggers/types.d.ts +95 -0
- package/dist/scheduler/triggers/types.d.ts.map +1 -0
- package/dist/scheduler/triggers/types.js +11 -0
- package/dist/scheduler/triggers/types.js.map +1 -0
- package/dist/store/database.d.ts +5 -0
- package/dist/store/database.d.ts.map +1 -0
- package/dist/store/database.js +29 -0
- package/dist/store/database.js.map +1 -0
- package/dist/store/migrations.d.ts +3 -0
- package/dist/store/migrations.d.ts.map +1 -0
- package/dist/store/migrations.js +124 -0
- package/dist/store/migrations.js.map +1 -0
- package/dist/store/preferences.d.ts +7 -0
- package/dist/store/preferences.d.ts.map +1 -0
- package/dist/store/preferences.js +26 -0
- package/dist/store/preferences.js.map +1 -0
- package/dist/store/session-store.d.ts +29 -0
- package/dist/store/session-store.d.ts.map +1 -0
- package/dist/store/session-store.js +103 -0
- package/dist/store/session-store.js.map +1 -0
- package/dist/tools/clear-metrics.d.ts +5 -0
- package/dist/tools/clear-metrics.d.ts.map +1 -0
- package/dist/tools/clear-metrics.js +27 -0
- package/dist/tools/clear-metrics.js.map +1 -0
- package/dist/tools/compare-runs.d.ts +4 -0
- package/dist/tools/compare-runs.d.ts.map +1 -0
- package/dist/tools/compare-runs.js +77 -0
- package/dist/tools/compare-runs.js.map +1 -0
- package/dist/tools/consult.d.ts +3 -0
- package/dist/tools/consult.d.ts.map +1 -0
- package/dist/tools/consult.js +62 -0
- package/dist/tools/consult.js.map +1 -0
- package/dist/tools/file-ops.d.ts +6 -0
- package/dist/tools/file-ops.d.ts.map +1 -0
- package/dist/tools/file-ops.js +158 -0
- package/dist/tools/file-ops.js.map +1 -0
- package/dist/tools/kill-task.d.ts +6 -0
- package/dist/tools/kill-task.d.ts.map +1 -0
- package/dist/tools/kill-task.js +55 -0
- package/dist/tools/kill-task.js.map +1 -0
- package/dist/tools/list-machines.d.ts +4 -0
- package/dist/tools/list-machines.d.ts.map +1 -0
- package/dist/tools/list-machines.js +24 -0
- package/dist/tools/list-machines.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +8 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +122 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/metrics-query.d.ts +4 -0
- package/dist/tools/metrics-query.d.ts.map +1 -0
- package/dist/tools/metrics-query.js +69 -0
- package/dist/tools/metrics-query.js.map +1 -0
- package/dist/tools/monitor.d.ts +5 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +64 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/remote-exec.d.ts +6 -0
- package/dist/tools/remote-exec.d.ts.map +1 -0
- package/dist/tools/remote-exec.js +98 -0
- package/dist/tools/remote-exec.js.map +1 -0
- package/dist/tools/remote-sync.d.ts +5 -0
- package/dist/tools/remote-sync.d.ts.map +1 -0
- package/dist/tools/remote-sync.js +57 -0
- package/dist/tools/remote-sync.js.map +1 -0
- package/dist/tools/show-metrics.d.ts +4 -0
- package/dist/tools/show-metrics.d.ts.map +1 -0
- package/dist/tools/show-metrics.js +69 -0
- package/dist/tools/show-metrics.js.map +1 -0
- package/dist/tools/sleep.d.ts +4 -0
- package/dist/tools/sleep.d.ts.map +1 -0
- package/dist/tools/sleep.js +116 -0
- package/dist/tools/sleep.js.map +1 -0
- package/dist/tools/task-output.d.ts +5 -0
- package/dist/tools/task-output.d.ts.map +1 -0
- package/dist/tools/task-output.js +51 -0
- package/dist/tools/task-output.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +3 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +112 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/ui/commands.d.ts +7 -0
- package/dist/ui/commands.d.ts.map +1 -0
- package/dist/ui/commands.js +21 -0
- package/dist/ui/commands.js.map +1 -0
- package/dist/ui/components/gradient-edge.d.ts +7 -0
- package/dist/ui/components/gradient-edge.d.ts.map +1 -0
- package/dist/ui/components/gradient-edge.js +33 -0
- package/dist/ui/components/gradient-edge.js.map +1 -0
- package/dist/ui/components/input-bar.d.ts +8 -0
- package/dist/ui/components/input-bar.d.ts.map +1 -0
- package/dist/ui/components/input-bar.js +139 -0
- package/dist/ui/components/input-bar.js.map +1 -0
- package/dist/ui/components/key-hint-rule.d.ts +2 -0
- package/dist/ui/components/key-hint-rule.d.ts.map +1 -0
- package/dist/ui/components/key-hint-rule.js +19 -0
- package/dist/ui/components/key-hint-rule.js.map +1 -0
- package/dist/ui/components/overlay-header.d.ts +6 -0
- package/dist/ui/components/overlay-header.d.ts.map +1 -0
- package/dist/ui/components/overlay-header.js +10 -0
- package/dist/ui/components/overlay-header.js.map +1 -0
- package/dist/ui/components/status-bar.d.ts +11 -0
- package/dist/ui/components/status-bar.d.ts.map +1 -0
- package/dist/ui/components/status-bar.js +55 -0
- package/dist/ui/components/status-bar.js.map +1 -0
- package/dist/ui/format.d.ts +12 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +36 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/layout.d.ts +48 -0
- package/dist/ui/layout.d.ts.map +1 -0
- package/dist/ui/layout.js +857 -0
- package/dist/ui/layout.js.map +1 -0
- package/dist/ui/markdown.d.ts +7 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +67 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/mouse-filter.d.ts +21 -0
- package/dist/ui/mouse-filter.d.ts.map +1 -0
- package/dist/ui/mouse-filter.js +66 -0
- package/dist/ui/mouse-filter.js.map +1 -0
- package/dist/ui/overlays/metrics-overlay.d.ts +11 -0
- package/dist/ui/overlays/metrics-overlay.d.ts.map +1 -0
- package/dist/ui/overlays/metrics-overlay.js +86 -0
- package/dist/ui/overlays/metrics-overlay.js.map +1 -0
- package/dist/ui/overlays/task-overlay.d.ts +12 -0
- package/dist/ui/overlays/task-overlay.d.ts.map +1 -0
- package/dist/ui/overlays/task-overlay.js +77 -0
- package/dist/ui/overlays/task-overlay.js.map +1 -0
- package/dist/ui/panels/conversation.d.ts +8 -0
- package/dist/ui/panels/conversation.d.ts.map +1 -0
- package/dist/ui/panels/conversation.js +216 -0
- package/dist/ui/panels/conversation.js.map +1 -0
- package/dist/ui/panels/metrics-dashboard.d.ts +8 -0
- package/dist/ui/panels/metrics-dashboard.d.ts.map +1 -0
- package/dist/ui/panels/metrics-dashboard.js +56 -0
- package/dist/ui/panels/metrics-dashboard.js.map +1 -0
- package/dist/ui/panels/sleep-panel.d.ts +7 -0
- package/dist/ui/panels/sleep-panel.d.ts.map +1 -0
- package/dist/ui/panels/sleep-panel.js +48 -0
- package/dist/ui/panels/sleep-panel.js.map +1 -0
- package/dist/ui/panels/sticky-notes.d.ts +8 -0
- package/dist/ui/panels/sticky-notes.d.ts.map +1 -0
- package/dist/ui/panels/sticky-notes.js +49 -0
- package/dist/ui/panels/sticky-notes.js.map +1 -0
- package/dist/ui/panels/task-list.d.ts +8 -0
- package/dist/ui/panels/task-list.d.ts.map +1 -0
- package/dist/ui/panels/task-list.js +39 -0
- package/dist/ui/panels/task-list.js.map +1 -0
- package/dist/ui/theme.d.ts +25 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +50 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/version.d.ts +9 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +62 -0
- package/dist/version.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Box, Text } from "ink";
|
|
4
|
+
import { C, G, METRIC_COLORS, nameHash } from "../theme.js";
|
|
5
|
+
import { renderMarkdown } from "../markdown.js";
|
|
6
|
+
import { sparkline } from "./metrics-dashboard.js";
|
|
7
|
+
import { truncate, formatMetricValue } from "../format.js";
|
|
8
|
+
export function ConversationPanel({ messages, isStreaming, }) {
|
|
9
|
+
if (messages.length === 0)
|
|
10
|
+
return null;
|
|
11
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingBottom: 1, children: [messages.map((msg) => (_jsx(MessageLine, { message: msg }, msg.id))), isStreaming && (_jsx(Box, { paddingLeft: 2, children: _jsx(PulsingIndicator, {}) }))] }));
|
|
12
|
+
}
|
|
13
|
+
function MessageLine({ message }) {
|
|
14
|
+
const { role, content, tool } = message;
|
|
15
|
+
switch (role) {
|
|
16
|
+
case "user":
|
|
17
|
+
return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { wrap: "wrap", children: [_jsxs(Text, { color: C.primary, bold: true, children: [G.active, " "] }), _jsx(Text, { color: C.text, children: content })] }) }));
|
|
18
|
+
case "assistant":
|
|
19
|
+
return (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { wrap: "wrap", children: renderMarkdown(content) }) }));
|
|
20
|
+
case "tool":
|
|
21
|
+
return tool ? _jsx(ToolCallBlock, { tool: tool }) : null;
|
|
22
|
+
case "error":
|
|
23
|
+
return (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { wrap: "wrap", color: C.error, children: [G.active, " ", content] }) }));
|
|
24
|
+
case "system":
|
|
25
|
+
return (_jsx(Box, { paddingLeft: 2, marginTop: 1, children: _jsx(Text, { color: C.primary, dimColor: true, wrap: "wrap", children: content }) }));
|
|
26
|
+
default:
|
|
27
|
+
return (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { wrap: "wrap", children: content }) }));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const PULSE_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
31
|
+
function PulsingIndicator() {
|
|
32
|
+
const [frame, setFrame] = useState(0);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const timer = setInterval(() => {
|
|
35
|
+
setFrame((f) => (f + 1) % PULSE_FRAMES.length);
|
|
36
|
+
}, 80);
|
|
37
|
+
return () => clearInterval(timer);
|
|
38
|
+
}, []);
|
|
39
|
+
return _jsx(Text, { color: C.primary, children: PULSE_FRAMES[frame] });
|
|
40
|
+
}
|
|
41
|
+
// ── Tool call routing ────────────────────────────────────────────────
|
|
42
|
+
function ToolCallBlock({ tool }) {
|
|
43
|
+
switch (tool.name) {
|
|
44
|
+
case "remote_exec":
|
|
45
|
+
return _jsx(ExecDisplay, { tool: tool });
|
|
46
|
+
case "remote_exec_background":
|
|
47
|
+
return _jsx(ExecBackgroundDisplay, { tool: tool });
|
|
48
|
+
case "remote_upload":
|
|
49
|
+
case "remote_download":
|
|
50
|
+
return _jsx(FileSyncDisplay, { tool: tool });
|
|
51
|
+
case "sleep":
|
|
52
|
+
return _jsx(SleepDisplay, { tool: tool });
|
|
53
|
+
case "start_monitor":
|
|
54
|
+
return _jsx(MonitorDisplay, { tool: tool });
|
|
55
|
+
case "stop_monitor":
|
|
56
|
+
return _jsx(MonitorStopDisplay, { tool: tool });
|
|
57
|
+
case "task_output":
|
|
58
|
+
return _jsx(TaskOutputDisplay, { tool: tool });
|
|
59
|
+
case "list_machines":
|
|
60
|
+
return _jsx(ListMachinesDisplay, { tool: tool });
|
|
61
|
+
case "show_metrics":
|
|
62
|
+
return _jsx(ShowMetricsDisplay, { tool: tool });
|
|
63
|
+
case "compare_runs":
|
|
64
|
+
return _jsx(CompareRunsDisplay, { tool: tool });
|
|
65
|
+
default:
|
|
66
|
+
return _jsx(GenericToolDisplay, { tool: tool });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ── Shared helpers ───────────────────────────────────────────────────
|
|
70
|
+
function ToolHeader({ icon, label, detail }) {
|
|
71
|
+
return (_jsx(Box, { children: _jsxs(Text, { wrap: "wrap", children: [_jsx(Text, { color: C.primary, dimColor: true, children: "┃ " }), _jsxs(Text, { color: C.bright, bold: true, children: [icon, " ", label] }), detail ? _jsxs(Text, { color: C.dim, children: [" ", detail] }) : null] }) }));
|
|
72
|
+
}
|
|
73
|
+
function parseResult(tool) {
|
|
74
|
+
if (!tool.result)
|
|
75
|
+
return null;
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(tool.result);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// ── remote_exec ──────────────────────────────────────────────────────
|
|
84
|
+
function ExecDisplay({ tool }) {
|
|
85
|
+
const machine = tool.args.machine_id ?? "?";
|
|
86
|
+
const command = tool.args.command ?? "";
|
|
87
|
+
const result = parseResult(tool);
|
|
88
|
+
const stdout = result?.stdout;
|
|
89
|
+
const stderr = result?.stderr;
|
|
90
|
+
const exitCode = result?.exit_code;
|
|
91
|
+
const hasOutput = stdout || stderr;
|
|
92
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "$", label: machine, detail: command }), tool.result && (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [stdout ? (_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.text, wrap: "wrap", children: trimOutput(stdout, 20) })] })) : null, stderr ? (_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.error, wrap: "wrap", children: trimOutput(stderr, 5) })] })) : null, exitCode !== undefined && exitCode !== 0 ? (_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsxs(Text, { color: C.error, children: ["exit ", exitCode] })] })) : null, !hasOutput && exitCode === 0 ? (_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "ok" })] })) : null] })), !tool.result && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "running\u2026" })] }))] }));
|
|
93
|
+
}
|
|
94
|
+
function trimOutput(text, maxLines) {
|
|
95
|
+
const lines = text.trimEnd().split("\n");
|
|
96
|
+
if (lines.length <= maxLines)
|
|
97
|
+
return text.trimEnd();
|
|
98
|
+
const kept = lines.slice(-maxLines);
|
|
99
|
+
return `… ${lines.length - maxLines} lines hidden …\n${kept.join("\n")}`;
|
|
100
|
+
}
|
|
101
|
+
// ── remote_exec_background ───────────────────────────────────────────
|
|
102
|
+
function ExecBackgroundDisplay({ tool }) {
|
|
103
|
+
const machine = tool.args.machine_id ?? "?";
|
|
104
|
+
const command = tool.args.command ?? "";
|
|
105
|
+
const result = parseResult(tool);
|
|
106
|
+
const pid = result?.pid;
|
|
107
|
+
const logPath = result?.log_path;
|
|
108
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "&", label: machine, detail: command }), result && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "pid " }), _jsx(Text, { color: C.text, children: pid }), logPath ? (_jsxs(Text, { color: C.dim, children: [" \u2192 ", logPath] })) : null] })), !tool.result && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "launching\u2026" })] }))] }));
|
|
109
|
+
}
|
|
110
|
+
// ── remote_upload / remote_download ──────────────────────────────────
|
|
111
|
+
function FileSyncDisplay({ tool }) {
|
|
112
|
+
const isUpload = tool.name === "remote_upload";
|
|
113
|
+
const icon = isUpload ? "↑" : "↓";
|
|
114
|
+
const machine = tool.args.machine_id ?? "?";
|
|
115
|
+
const local = tool.args.local_path ?? "";
|
|
116
|
+
const remote = tool.args.remote_path ?? "";
|
|
117
|
+
const label = isUpload ? `${local} → ${machine}:${remote}` : `${machine}:${remote} → ${local}`;
|
|
118
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: icon, label: tool.name.replace("remote_", ""), detail: label }), tool.result && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: tool.isError ? C.error : C.dim, children: truncate(tool.result, 80) })] }))] }));
|
|
119
|
+
}
|
|
120
|
+
// ── sleep ────────────────────────────────────────────────────────────
|
|
121
|
+
function SleepDisplay({ tool }) {
|
|
122
|
+
const reason = tool.args.reason ?? "";
|
|
123
|
+
const result = parseResult(tool);
|
|
124
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u25C7", label: "sleep", detail: truncate(reason, 60) }), result && !tool.isError && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsxs(Text, { color: C.dim, children: ["session ", String(result.session_id ?? "?").slice(0, 8), result.deadline ? ` deadline ${String(result.deadline)}` : ""] })] })), tool.isError && tool.result && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.error, children: truncate(tool.result, 80) })] }))] }));
|
|
125
|
+
}
|
|
126
|
+
// ── task_output ─────────────────────────────────────────────────────
|
|
127
|
+
function TaskOutputDisplay({ tool }) {
|
|
128
|
+
const machine = tool.args.machine_id ?? "?";
|
|
129
|
+
const pid = tool.args.pid;
|
|
130
|
+
const result = parseResult(tool);
|
|
131
|
+
const output = result?.output;
|
|
132
|
+
const running = result?.running;
|
|
133
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u22B3", label: `${machine}:${pid}`, detail: running !== undefined ? (running ? "running" : "stopped") : undefined }), output ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.text, wrap: "wrap", children: trimOutput(output, 20) })] })) : !tool.result ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "fetching\u2026" })] })) : result?.error ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.error, children: String(result.error) })] })) : null] }));
|
|
134
|
+
}
|
|
135
|
+
// ── list_machines ────────────────────────────────────────────────────
|
|
136
|
+
function ListMachinesDisplay({ tool }) {
|
|
137
|
+
const result = parseResult(tool);
|
|
138
|
+
const machines = (result?.machines ?? []);
|
|
139
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u229E", label: "list_machines" }), machines.length > 0 ? (machines.map((m) => (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsxs(Text, { color: m.connected ? C.primary : C.dim, children: [m.connected ? "◆" : "◇", " ", m.id] }), m.error ? _jsxs(Text, { color: C.error, children: [" ", m.error] }) : null] }, m.id)))) : !tool.result ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "fetching\u2026" })] })) : null] }));
|
|
140
|
+
}
|
|
141
|
+
// ── show_metrics ────────────────────────────────────────────────────
|
|
142
|
+
function ShowMetricsDisplay({ tool }) {
|
|
143
|
+
const result = parseResult(tool);
|
|
144
|
+
const metrics = (result?.metrics ?? []);
|
|
145
|
+
const trendIcon = (trend) => {
|
|
146
|
+
switch (trend) {
|
|
147
|
+
case "decreasing": return "\u2193"; // ↓
|
|
148
|
+
case "increasing": return "\u2191"; // ↑
|
|
149
|
+
case "plateau": return "\u2192"; // →
|
|
150
|
+
case "unstable": return "~";
|
|
151
|
+
default: return "?";
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const trendColor = (trend) => {
|
|
155
|
+
switch (trend) {
|
|
156
|
+
case "decreasing": return C.primary;
|
|
157
|
+
case "increasing": return C.primary;
|
|
158
|
+
case "plateau": return C.dim;
|
|
159
|
+
default: return C.dim;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const formatValue = (v) => v === null ? "\u2014" : formatMetricValue(v);
|
|
163
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u25C8", label: "show_metrics" }), metrics.length > 0 ? (metrics.map((m) => {
|
|
164
|
+
const color = METRIC_COLORS[nameHash(m.name) % METRIC_COLORS.length];
|
|
165
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "\u2503 " }), _jsx(Text, { color: color, bold: true, children: m.name }), m.values.length > 0 ? (_jsxs(Text, { color: color, children: [" ", sparkline(m.values, 30)] })) : null] }), m.latest !== null ? (_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "\u2503 " }), _jsx(Text, { color: C.text, children: formatValue(m.latest) }), _jsxs(Text, { color: C.dim, children: [" ", "min ", formatValue(m.min), " max ", formatValue(m.max)] }), _jsxs(Text, { color: trendColor(m.trend), children: [" ", trendIcon(m.trend), " ", m.trend] })] })) : (_jsxs(Box, { children: [_jsx(Text, { color: C.dim, dimColor: true, children: "\u2503 " }), _jsx(Text, { color: C.dim, children: "no data" })] }))] }, m.name));
|
|
166
|
+
})) : !tool.result ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "\u2503 " }), _jsx(Text, { color: C.dim, children: "loading..." })] })) : (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "\u2503 " }), _jsx(Text, { color: C.dim, children: "no metrics found" })] }))] }));
|
|
167
|
+
}
|
|
168
|
+
// ── start_monitor / stop_monitor ─────────────────────────────────────
|
|
169
|
+
function MonitorDisplay({ tool }) {
|
|
170
|
+
const result = parseResult(tool);
|
|
171
|
+
const goal = tool.args.goal ?? "";
|
|
172
|
+
const interval = tool.args.interval_minutes ?? 2;
|
|
173
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u27F3", label: "monitor", detail: `every ${interval}m` }), _jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: goal })] })] }));
|
|
174
|
+
}
|
|
175
|
+
function MonitorStopDisplay({ tool }) {
|
|
176
|
+
return (_jsx(Box, { flexDirection: "column", paddingLeft: 2, children: _jsx(ToolHeader, { icon: "\u27F3", label: "monitor stopped" }) }));
|
|
177
|
+
}
|
|
178
|
+
// ── compare_runs ────────────────────────────────────────────────────
|
|
179
|
+
function CompareRunsDisplay({ tool }) {
|
|
180
|
+
const taskA = tool.args.task_a ?? "?";
|
|
181
|
+
const taskB = tool.args.task_b ?? "?";
|
|
182
|
+
const result = parseResult(tool);
|
|
183
|
+
const comparisons = (result?.comparisons ?? []);
|
|
184
|
+
const dirIcon = (d) => {
|
|
185
|
+
switch (d) {
|
|
186
|
+
case "decreased": return "↓";
|
|
187
|
+
case "increased": return "↑";
|
|
188
|
+
case "unchanged": return "→";
|
|
189
|
+
default: return "?";
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
const dirColor = (d) => {
|
|
193
|
+
switch (d) {
|
|
194
|
+
case "decreased": return C.primary;
|
|
195
|
+
case "increased": return C.primary;
|
|
196
|
+
case "unchanged": return C.dim;
|
|
197
|
+
default: return C.dim;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
const fmtVal = (v) => v === null ? "—" : formatMetricValue(v);
|
|
201
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u21C4", label: "compare", detail: `${taskA} vs ${taskB}` }), comparisons.length > 0 ? (comparisons.map((c) => {
|
|
202
|
+
const color = METRIC_COLORS[nameHash(c.metric) % METRIC_COLORS.length];
|
|
203
|
+
return (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: color, children: c.metric.padEnd(12) }), _jsx(Text, { color: C.dim, children: fmtVal(c.baseline?.latest ?? null) }), _jsx(Text, { color: C.dim, children: " → " }), _jsx(Text, { color: dirColor(c.direction), children: fmtVal(c.experiment?.latest ?? null) }), c.delta !== null ? (_jsxs(Text, { color: dirColor(c.direction), children: [" ", dirIcon(c.direction), " ", c.delta > 0 ? "+" : "", fmtVal(c.delta)] })) : null] }, c.metric));
|
|
204
|
+
})) : !tool.result ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.dim, children: "comparing\u2026" })] })) : result?.error ? (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: C.error, children: String(result.error) })] })) : null] }));
|
|
205
|
+
}
|
|
206
|
+
// ── Generic fallback ─────────────────────────────────────────────────
|
|
207
|
+
function GenericToolDisplay({ tool }) {
|
|
208
|
+
const argStr = Object.entries(tool.args)
|
|
209
|
+
.map(([k, v]) => {
|
|
210
|
+
const val = typeof v === "string" ? truncate(v, 50) : JSON.stringify(v);
|
|
211
|
+
return `${k}: ${val}`;
|
|
212
|
+
})
|
|
213
|
+
.join(" ");
|
|
214
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsx(ToolHeader, { icon: "\u2699", label: tool.name, detail: argStr }), tool.result && (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: C.dim, dimColor: true, children: "┃ " }), _jsx(Text, { color: tool.isError ? C.error : C.dim, wrap: "wrap", children: truncate(tool.result, 120) })] }))] }));
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/ui/panels/conversation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface MetricsDashboardProps {
|
|
2
|
+
metricData?: Map<string, number[]>;
|
|
3
|
+
width?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function MetricsDashboard({ metricData, width, }: MetricsDashboardProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function sparkline(values: number[], width?: number): string;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=metrics-dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-dashboard.d.ts","sourceRoot":"","sources":["../../../src/ui/panels/metrics-dashboard.tsx"],"names":[],"mappings":"AAKA,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,KAAK,GACN,EAAE,qBAAqB,2CA4CvB;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,MAAM,CAgC9D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { C, METRIC_COLORS, nameHash } from "../theme.js";
|
|
4
|
+
import { formatMetricValue } from "../format.js";
|
|
5
|
+
export function MetricsDashboard({ metricData, width, }) {
|
|
6
|
+
const panelWidth = width ?? (Math.floor((process.stdout.columns || 80) / 2) - 3);
|
|
7
|
+
// label(12) + space(1) + value(10) + space(1) + padding(2) = 26 overhead
|
|
8
|
+
const sparkWidth = Math.max(10, panelWidth - 26);
|
|
9
|
+
return (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: !metricData || metricData.size === 0 ? (_jsx(Box, { flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsx(Text, { color: C.dim, dimColor: true, children: "no active metrics" }) })) : ((() => {
|
|
10
|
+
const entries = Array.from(metricData.entries());
|
|
11
|
+
const maxNameLen = Math.max(...entries.map(([n]) => n.length));
|
|
12
|
+
const labelWidth = maxNameLen + 1;
|
|
13
|
+
const adjSparkWidth = Math.max(10, panelWidth - labelWidth - 14);
|
|
14
|
+
return entries.map(([name, values]) => {
|
|
15
|
+
const color = METRIC_COLORS[nameHash(name) % METRIC_COLORS.length];
|
|
16
|
+
const latest = values.length > 0
|
|
17
|
+
? values[values.length - 1]
|
|
18
|
+
: null;
|
|
19
|
+
const formatted = latest !== null
|
|
20
|
+
? formatMetricValue(latest)
|
|
21
|
+
: "—";
|
|
22
|
+
return (_jsxs(Box, { paddingLeft: 1, children: [_jsx(Text, { color: color, children: name.padEnd(labelWidth) }), _jsx(Text, { color: color, children: sparkline(values, adjSparkWidth) }), _jsxs(Text, { color: C.text, children: [" ", formatted] })] }, name));
|
|
23
|
+
});
|
|
24
|
+
})()) }));
|
|
25
|
+
}
|
|
26
|
+
export function sparkline(values, width = 40) {
|
|
27
|
+
if (values.length === 0)
|
|
28
|
+
return "";
|
|
29
|
+
const blocks = [
|
|
30
|
+
"\u2581",
|
|
31
|
+
"\u2582",
|
|
32
|
+
"\u2583",
|
|
33
|
+
"\u2584",
|
|
34
|
+
"\u2585",
|
|
35
|
+
"\u2586",
|
|
36
|
+
"\u2587",
|
|
37
|
+
"\u2588",
|
|
38
|
+
];
|
|
39
|
+
const min = Math.min(...values);
|
|
40
|
+
const max = Math.max(...values);
|
|
41
|
+
const range = max - min || 1;
|
|
42
|
+
const step = Math.max(1, Math.floor(values.length / width));
|
|
43
|
+
const sampled = [];
|
|
44
|
+
for (let i = 0; i < values.length; i += step) {
|
|
45
|
+
sampled.push(values[i]);
|
|
46
|
+
if (sampled.length >= width)
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
return sampled
|
|
50
|
+
.map((v) => {
|
|
51
|
+
const idx = Math.round(((v - min) / range) * (blocks.length - 1));
|
|
52
|
+
return blocks[idx];
|
|
53
|
+
})
|
|
54
|
+
.join("");
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=metrics-dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-dashboard.js","sourceRoot":"","sources":["../../../src/ui/panels/metrics-dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SleepManager } from "../../scheduler/sleep-manager.js";
|
|
2
|
+
interface SleepPanelProps {
|
|
3
|
+
sleepManager: SleepManager;
|
|
4
|
+
}
|
|
5
|
+
export declare function SleepPanel({ sleepManager }: SleepPanelProps): import("react/jsx-runtime").JSX.Element | null;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=sleep-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep-panel.d.ts","sourceRoot":"","sources":["../../../src/ui/panels/sleep-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGrE,UAAU,eAAe;IACvB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,EAAE,YAAY,EAAE,EAAE,eAAe,kDAuD3D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Box, Text } from "ink";
|
|
4
|
+
import { C, G } from "../theme.js";
|
|
5
|
+
import { formatDuration } from "../format.js";
|
|
6
|
+
export function SleepPanel({ sleepManager }) {
|
|
7
|
+
const [now, setNow] = useState(Date.now());
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
const interval = setInterval(() => setNow(Date.now()), 1000);
|
|
10
|
+
return () => clearInterval(interval);
|
|
11
|
+
}, []);
|
|
12
|
+
const session = sleepManager.currentSleep;
|
|
13
|
+
if (!session)
|
|
14
|
+
return null;
|
|
15
|
+
const elapsed = now - session.createdAt;
|
|
16
|
+
const elapsedStr = formatDuration(elapsed);
|
|
17
|
+
const deadline = session.trigger.deadline;
|
|
18
|
+
const remaining = deadline ? deadline - now : null;
|
|
19
|
+
return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, paddingX: 2, children: [_jsxs(Text, { color: C.primary, bold: true, children: [G.brand, " SLEEPING"] }), _jsx(Text, { color: C.dim, children: session.trigger.sleepReason }), _jsxs(Text, { color: C.primary, children: ["elapsed ", elapsedStr] }), remaining !== null && remaining > 0 && (_jsxs(Text, { color: C.primary, children: ["wake in ", formatDuration(remaining)] })), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: C.primary, bold: true, children: "triggers:" }), _jsx(TriggerDisplay, { expression: session.trigger.expression, satisfiedLeaves: session.trigger.satisfiedLeaves, path: "root" })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: C.dim, dimColor: true, children: "type to wake manually" }) })] }));
|
|
20
|
+
}
|
|
21
|
+
function TriggerDisplay({ expression, satisfiedLeaves, path, }) {
|
|
22
|
+
if ("op" in expression) {
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: 1, children: [_jsxs(Text, { color: C.dim, children: [expression.op.toUpperCase(), ":"] }), expression.children.map((child, i) => (_jsx(TriggerDisplay, { expression: child, satisfiedLeaves: satisfiedLeaves, path: `${path}.${i}` }, i)))] }));
|
|
24
|
+
}
|
|
25
|
+
const satisfied = satisfiedLeaves.has(path);
|
|
26
|
+
const icon = satisfied ? G.dot : G.dotDim;
|
|
27
|
+
const color = satisfied ? C.success : C.dim;
|
|
28
|
+
return (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { color: color, children: [icon, " ", describeCondition(expression)] }) }));
|
|
29
|
+
}
|
|
30
|
+
function describeCondition(expr) {
|
|
31
|
+
if ("op" in expr)
|
|
32
|
+
return `${expr.op}(...)`;
|
|
33
|
+
switch (expr.kind) {
|
|
34
|
+
case "timer":
|
|
35
|
+
return `timer: ${new Date(expr.wakeAt).toLocaleTimeString()}`;
|
|
36
|
+
case "process_exit":
|
|
37
|
+
return `process: ${expr.processPattern ?? `PID ${expr.pid}`} on ${expr.machineId}`;
|
|
38
|
+
case "metric":
|
|
39
|
+
return `metric: ${expr.field} ${expr.comparator} ${expr.threshold}`;
|
|
40
|
+
case "file":
|
|
41
|
+
return `file ${expr.mode}: ${expr.path} on ${expr.machineId}`;
|
|
42
|
+
case "resource":
|
|
43
|
+
return `resource: ${expr.resource} ${expr.comparator} ${expr.threshold}%`;
|
|
44
|
+
case "user_message":
|
|
45
|
+
return "user message";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=sleep-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sleep-panel.js","sourceRoot":"","sources":["../../../src/ui/panels/sleep-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { StickyNote } from "../../core/stickies.js";
|
|
2
|
+
interface StickyNotesPanelProps {
|
|
3
|
+
notes: StickyNote[];
|
|
4
|
+
width: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function StickyNotesPanel({ notes, width }: StickyNotesPanelProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=sticky-notes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sticky-notes.d.ts","sourceRoot":"","sources":["../../../src/ui/panels/sticky-notes.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,qBAAqB,kDAuBvE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { C } from "../theme.js";
|
|
4
|
+
export function StickyNotesPanel({ notes, width }) {
|
|
5
|
+
if (notes.length === 0)
|
|
6
|
+
return null;
|
|
7
|
+
const inner = width - 4; // 2 for border, 2 for padding
|
|
8
|
+
const label = "─ STICKIES ";
|
|
9
|
+
const topBorder = "┌" + label + "─".repeat(Math.max(0, width - 2 - label.length)) + "┐";
|
|
10
|
+
return (_jsxs(Box, { flexDirection: "column", width: width, children: [_jsx(Text, { color: C.primary, children: topBorder }), notes.map((note) => (_jsx(StickyNoteItem, { note: note, innerWidth: inner, borderWidth: width }, note.num))), _jsx(Text, { color: C.primary, children: "└" + "─".repeat(width - 2) + "┘" })] }));
|
|
11
|
+
}
|
|
12
|
+
function StickyNoteItem({ note, innerWidth, borderWidth, }) {
|
|
13
|
+
const label = `${note.num}. `;
|
|
14
|
+
const textWidth = innerWidth - label.length;
|
|
15
|
+
const wrapped = wrapText(note.text, textWidth);
|
|
16
|
+
return (_jsxs(_Fragment, { children: [wrapped.map((line, i) => {
|
|
17
|
+
const prefix = i === 0 ? label : " ".repeat(label.length);
|
|
18
|
+
const content = prefix + line;
|
|
19
|
+
return (_jsxs(Text, { color: C.primary, children: ["│", " ", _jsx(Text, { color: i === 0 ? C.bright : C.text, bold: i === 0, children: pad(content, borderWidth - 4) }), " ", "│"] }, `${note.num}-${i}`));
|
|
20
|
+
}), _jsx(Text, { color: C.primary, children: "│" + " ".repeat(borderWidth - 2) + "│" })] }));
|
|
21
|
+
}
|
|
22
|
+
function wrapText(text, width) {
|
|
23
|
+
if (width <= 0)
|
|
24
|
+
return [text];
|
|
25
|
+
const lines = [];
|
|
26
|
+
const words = text.split(" ");
|
|
27
|
+
let current = "";
|
|
28
|
+
for (const word of words) {
|
|
29
|
+
if (current.length === 0) {
|
|
30
|
+
current = word;
|
|
31
|
+
}
|
|
32
|
+
else if (current.length + 1 + word.length <= width) {
|
|
33
|
+
current += " " + word;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
lines.push(current);
|
|
37
|
+
current = word;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (current)
|
|
41
|
+
lines.push(current);
|
|
42
|
+
return lines.length > 0 ? lines : [""];
|
|
43
|
+
}
|
|
44
|
+
function pad(text, width) {
|
|
45
|
+
if (text.length >= width)
|
|
46
|
+
return text.slice(0, width);
|
|
47
|
+
return text + " ".repeat(width - text.length);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=sticky-notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sticky-notes.js","sourceRoot":"","sources":["../../../src/ui/panels/sticky-notes.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TaskInfo } from "../layout.js";
|
|
2
|
+
interface TaskListPanelProps {
|
|
3
|
+
tasks?: TaskInfo[];
|
|
4
|
+
width?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function TaskListPanel({ tasks, width }: TaskListPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=task-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-list.d.ts","sourceRoot":"","sources":["../../../src/ui/panels/task-list.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAU,EAAE,KAAK,EAAE,EAAE,kBAAkB,2CA+BtE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { C, G } from "../theme.js";
|
|
4
|
+
export function TaskListPanel({ tasks = [], width }) {
|
|
5
|
+
const panelWidth = width ?? (Math.floor((process.stdout.columns || 80) * 0.4) - 4);
|
|
6
|
+
// icon(1) + space(1) + machineId(~8) + space(1) = ~11 overhead
|
|
7
|
+
const nameWidth = Math.max(10, panelWidth - 11);
|
|
8
|
+
return (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: tasks.length === 0 ? (_jsx(Box, { flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsx(Text, { color: C.dim, dimColor: true, children: "no tasks" }) })) : (tasks.slice(0, 5).map((task) => {
|
|
9
|
+
const name = task.name.length > nameWidth
|
|
10
|
+
? task.name.slice(0, nameWidth - 1) + "…"
|
|
11
|
+
: task.name;
|
|
12
|
+
return (_jsxs(Box, { paddingLeft: 1, children: [_jsxs(Text, { color: statusColor(task.status), children: [statusIcon(task.status), " "] }), _jsxs(Text, { color: C.dim, children: [task.machineId, " "] }), _jsx(Text, { color: C.text, children: name })] }, task.id));
|
|
13
|
+
})) }));
|
|
14
|
+
}
|
|
15
|
+
function statusIcon(status) {
|
|
16
|
+
switch (status) {
|
|
17
|
+
case "running":
|
|
18
|
+
return G.dot;
|
|
19
|
+
case "completed":
|
|
20
|
+
return G.dot;
|
|
21
|
+
case "failed":
|
|
22
|
+
return G.active;
|
|
23
|
+
default:
|
|
24
|
+
return G.bullet;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function statusColor(status) {
|
|
28
|
+
switch (status) {
|
|
29
|
+
case "running":
|
|
30
|
+
return C.primary;
|
|
31
|
+
case "completed":
|
|
32
|
+
return C.success;
|
|
33
|
+
case "failed":
|
|
34
|
+
return C.error;
|
|
35
|
+
default:
|
|
36
|
+
return C.dim;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=task-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-list.js","sourceRoot":"","sources":["../../../src/ui/panels/task-list.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAQnC,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAsB;IACrE,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,+DAA+D;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC,CAAC;IAEhD,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,YACpC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,YAC3D,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,+BAErB,GACH,CACP,CAAC,CAAC,CAAC,CACF,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS;gBACvC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG;gBACzC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACd,OAAO,CACL,MAAC,GAAG,IAAe,WAAW,EAAE,CAAC,aAC/B,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAClC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IACxB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,IAAI,CAAC,SAAS,SAAS,EAC5C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAAG,IAAI,GAAQ,KAL1B,IAAI,CAAC,EAAE,CAMX,CACP,CAAC;QACJ,CAAC,CAAC,CACH,GACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,GAAG,CAAC;QACf,KAAK,WAAW;YACd,OAAO,CAAC,CAAC,GAAG,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,MAAM,CAAC;QAClB;YACE,OAAO,CAAC,CAAC,MAAM,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,OAAO,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,CAAC,CAAC,OAAO,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB;YACE,OAAO,CAAC,CAAC,GAAG,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const C: {
|
|
2
|
+
primary: "yellow";
|
|
3
|
+
bright: "yellowBright";
|
|
4
|
+
text: "white";
|
|
5
|
+
dim: "gray";
|
|
6
|
+
error: "red";
|
|
7
|
+
success: "green";
|
|
8
|
+
};
|
|
9
|
+
export declare const G: {
|
|
10
|
+
brand: string;
|
|
11
|
+
section: string;
|
|
12
|
+
bullet: string;
|
|
13
|
+
active: string;
|
|
14
|
+
dot: string;
|
|
15
|
+
dotDim: string;
|
|
16
|
+
rule: string;
|
|
17
|
+
dash: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const METRIC_COLORS: readonly ["yellowBright", "cyanBright", "greenBright", "magentaBright", "redBright", "blueBright", "whiteBright", "yellow", "cyan", "green"];
|
|
20
|
+
export declare function nameHash(s: string): number;
|
|
21
|
+
/** Heavy horizontal rule spanning the terminal */
|
|
22
|
+
export declare function HRule({ dim }: {
|
|
23
|
+
dim?: boolean;
|
|
24
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/ui/theme.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,CAAC;;;;;;;CAOb,CAAC;AAGF,eAAO,MAAM,CAAC;;;;;;;;;CASb,CAAC;AAGF,eAAO,MAAM,aAAa,8IAWhB,CAAC;AAEX,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1C;AAMD,kDAAkD;AAClD,wBAAgB,KAAK,CAAC,EAAE,GAAW,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,2CAQvD"}
|