@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 @@
|
|
|
1
|
+
{"version":3,"file":"gradient-edge.d.ts","sourceRoot":"","sources":["../../../src/ui/components/gradient-edge.tsx"],"names":[],"mappings":"AAiBA,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CA2BzD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Box, Text } from "ink";
|
|
4
|
+
// Shade blocks matching the ▓▒░ style from the header logo,
|
|
5
|
+
// cycling through density to create a flowing gradient effect.
|
|
6
|
+
// All rendered in the theme's yellow color.
|
|
7
|
+
const SHADES = [
|
|
8
|
+
"░", // light
|
|
9
|
+
"▒", // medium
|
|
10
|
+
"▓", // dense
|
|
11
|
+
"█", // full
|
|
12
|
+
"▓", // dense
|
|
13
|
+
"▒", // medium
|
|
14
|
+
];
|
|
15
|
+
const TILE_SIZE = 10;
|
|
16
|
+
export function GradientEdge({ height }) {
|
|
17
|
+
const [offset, setOffset] = useState(0);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const timer = setInterval(() => {
|
|
20
|
+
setOffset((prev) => (prev + 1) % SHADES.length);
|
|
21
|
+
}, 200);
|
|
22
|
+
return () => clearInterval(timer);
|
|
23
|
+
}, []);
|
|
24
|
+
const lines = [];
|
|
25
|
+
for (let i = 0; i < height; i++) {
|
|
26
|
+
const tilePos = (i % TILE_SIZE) / TILE_SIZE;
|
|
27
|
+
const shadeIdx = Math.floor(tilePos * SHADES.length);
|
|
28
|
+
const idx = (shadeIdx + offset) % SHADES.length;
|
|
29
|
+
lines.push(_jsx(Text, { color: "yellow", children: SHADES[idx] }, i));
|
|
30
|
+
}
|
|
31
|
+
return (_jsx(Box, { flexDirection: "column", flexShrink: 0, width: 1, children: lines }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=gradient-edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient-edge.js","sourceRoot":"","sources":["../../../src/ui/components/gradient-edge.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,4DAA4D;AAC5D,+DAA+D;AAC/D,4CAA4C;AAC5C,MAAM,MAAM,GAAG;IACb,GAAG,EAAI,QAAQ;IACf,GAAG,EAAI,SAAS;IAChB,GAAG,EAAI,QAAQ;IACf,GAAG,EAAI,OAAO;IACd,GAAG,EAAI,QAAQ;IACf,GAAG,EAAI,SAAS;CACjB,CAAC;AAEF,MAAM,SAAS,GAAG,EAAE,CAAC;AAOrB,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAqB;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAChD,KAAK,CAAC,IAAI,CACR,KAAC,IAAI,IAAS,KAAK,EAAC,QAAQ,YACzB,MAAM,CAAC,GAAG,CAAC,IADH,CAAC,CAEL,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,YAChD,KAAK,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface InputBarProps {
|
|
2
|
+
onSubmit: (value: string) => void;
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function InputBar({ onSubmit, disabled, placeholder, }: InputBarProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=input-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-bar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/input-bar.tsx"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAgB,EAChB,WAAiC,GAClC,EAAE,aAAa,2CAyKf"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { C, G } from "../theme.js";
|
|
5
|
+
import { COMMANDS } from "../commands.js";
|
|
6
|
+
export function InputBar({ onSubmit, disabled = false, placeholder = "send a message...", }) {
|
|
7
|
+
const [value, setValue] = useState("");
|
|
8
|
+
const [cursorPos, setCursorPos] = useState(0);
|
|
9
|
+
const [history, setHistory] = useState([]);
|
|
10
|
+
const [historyIdx, setHistoryIdx] = useState(-1);
|
|
11
|
+
const [selectedIdx, setSelectedIdx] = useState(0);
|
|
12
|
+
const isCommandMode = value.startsWith("/");
|
|
13
|
+
const commandQuery = isCommandMode ? value.slice(1).split(" ")[0] : "";
|
|
14
|
+
const hasArgs = isCommandMode && value.includes(" ");
|
|
15
|
+
const filteredCommands = useMemo(() => {
|
|
16
|
+
if (!isCommandMode || hasArgs)
|
|
17
|
+
return [];
|
|
18
|
+
if (commandQuery === "")
|
|
19
|
+
return COMMANDS;
|
|
20
|
+
return COMMANDS.filter((cmd) => cmd.name.startsWith(commandQuery));
|
|
21
|
+
}, [isCommandMode, commandQuery, hasArgs]);
|
|
22
|
+
const showMenu = isCommandMode && !hasArgs && filteredCommands.length > 0;
|
|
23
|
+
useInput((input, key) => {
|
|
24
|
+
if (disabled)
|
|
25
|
+
return;
|
|
26
|
+
if (key.return) {
|
|
27
|
+
if (value.trim()) {
|
|
28
|
+
onSubmit(value.trim());
|
|
29
|
+
setHistory((prev) => [value.trim(), ...prev]);
|
|
30
|
+
setValue("");
|
|
31
|
+
setCursorPos(0);
|
|
32
|
+
setHistoryIdx(-1);
|
|
33
|
+
setSelectedIdx(0);
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (key.tab && showMenu) {
|
|
38
|
+
const cmd = filteredCommands[selectedIdx];
|
|
39
|
+
if (cmd) {
|
|
40
|
+
const completed = `/${cmd.name}${cmd.args ? " " : ""}`;
|
|
41
|
+
setValue(completed);
|
|
42
|
+
setCursorPos(completed.length);
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (key.backspace || key.delete) {
|
|
47
|
+
if (cursorPos > 0) {
|
|
48
|
+
setValue((prev) => prev.slice(0, cursorPos - 1) + prev.slice(cursorPos));
|
|
49
|
+
setCursorPos((prev) => prev - 1);
|
|
50
|
+
}
|
|
51
|
+
setSelectedIdx(0);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Left arrow
|
|
55
|
+
if (key.leftArrow) {
|
|
56
|
+
setCursorPos((prev) => Math.max(0, prev - 1));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Right arrow
|
|
60
|
+
if (key.rightArrow) {
|
|
61
|
+
setCursorPos((prev) => Math.min(value.length, prev + 1));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (key.upArrow) {
|
|
65
|
+
if (showMenu) {
|
|
66
|
+
setSelectedIdx((prev) => prev > 0 ? prev - 1 : filteredCommands.length - 1);
|
|
67
|
+
}
|
|
68
|
+
else if (history.length > 0) {
|
|
69
|
+
const newIdx = Math.min(historyIdx + 1, history.length - 1);
|
|
70
|
+
setHistoryIdx(newIdx);
|
|
71
|
+
setValue(history[newIdx]);
|
|
72
|
+
setCursorPos(history[newIdx].length);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (key.downArrow) {
|
|
77
|
+
if (showMenu) {
|
|
78
|
+
setSelectedIdx((prev) => prev < filteredCommands.length - 1 ? prev + 1 : 0);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (historyIdx <= 0) {
|
|
82
|
+
setHistoryIdx(-1);
|
|
83
|
+
setValue("");
|
|
84
|
+
setCursorPos(0);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const newIdx = historyIdx - 1;
|
|
88
|
+
setHistoryIdx(newIdx);
|
|
89
|
+
setValue(history[newIdx]);
|
|
90
|
+
setCursorPos(history[newIdx].length);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Home / Ctrl+A
|
|
96
|
+
if (key.ctrl && input === "a") {
|
|
97
|
+
setCursorPos(0);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// End / Ctrl+E
|
|
101
|
+
if (key.ctrl && input === "e") {
|
|
102
|
+
setCursorPos(value.length);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Ctrl+U — clear line
|
|
106
|
+
if (key.ctrl && input === "u") {
|
|
107
|
+
setValue("");
|
|
108
|
+
setCursorPos(0);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Ctrl+W — delete word backward
|
|
112
|
+
if (key.ctrl && input === "w") {
|
|
113
|
+
const before = value.slice(0, cursorPos);
|
|
114
|
+
const after = value.slice(cursorPos);
|
|
115
|
+
const trimmed = before.replace(/\S+\s*$/, "");
|
|
116
|
+
setValue(trimmed + after);
|
|
117
|
+
setCursorPos(trimmed.length);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (input && !key.ctrl && !key.meta) {
|
|
121
|
+
setValue((prev) => prev.slice(0, cursorPos) + input + prev.slice(cursorPos));
|
|
122
|
+
setCursorPos((prev) => prev + input.length);
|
|
123
|
+
setHistoryIdx(-1);
|
|
124
|
+
setSelectedIdx(0);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return (_jsxs(Box, { flexDirection: "column", children: [showMenu && (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 0, children: [filteredCommands.map((cmd, i) => (_jsx(CommandItem, { command: cmd, selected: i === selectedIdx }, cmd.name))), _jsxs(Text, { color: C.dim, dimColor: true, children: [" ", "\u2191\u2193 navigate", " ", "tab complete", " ", "enter run"] })] })), _jsxs(Box, { paddingX: 1, children: [_jsxs(Text, { color: C.primary, bold: true, children: [G.active, " "] }), value ? (_jsx(CursorText, { text: value, cursorPos: cursorPos })) : (_jsx(Text, { color: C.dim, dimColor: true, children: disabled ? "waiting..." : placeholder }))] })] }));
|
|
128
|
+
}
|
|
129
|
+
function CursorText({ text, cursorPos }) {
|
|
130
|
+
const before = text.slice(0, cursorPos);
|
|
131
|
+
const cursor = text[cursorPos] ?? " ";
|
|
132
|
+
const after = text.slice(cursorPos + 1);
|
|
133
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: C.text, children: before }), _jsx(Text, { color: "black", backgroundColor: C.primary, children: cursor }), _jsx(Text, { color: C.text, children: after })] }));
|
|
134
|
+
}
|
|
135
|
+
function CommandItem({ command, selected, }) {
|
|
136
|
+
const argStr = command.args ? ` ${command.args}` : "";
|
|
137
|
+
return (_jsxs(Box, { children: [_jsxs(Text, { color: selected ? C.primary : C.dim, bold: selected, children: [selected ? `${G.active} ` : " ", "/", command.name] }), command.args && (_jsx(Text, { color: C.dim, children: argStr })), _jsxs(Text, { color: C.dim, dimColor: true, children: [" ", command.description] })] }));
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=input-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-bar.js","sourceRoot":"","sources":["../../../src/ui/components/input-bar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-hint-rule.d.ts","sourceRoot":"","sources":["../../../src/ui/components/key-hint-rule.tsx"],"names":[],"mappings":"AAUA,wBAAgB,WAAW,4CAyB1B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Box, Text } from "ink";
|
|
4
|
+
import { C, G } from "../theme.js";
|
|
5
|
+
const HINTS = [
|
|
6
|
+
{ key: "esc", label: "interrupt" },
|
|
7
|
+
{ key: "^t", label: "tasks" },
|
|
8
|
+
{ key: "^g", label: "metrics" },
|
|
9
|
+
];
|
|
10
|
+
export function KeyHintRule() {
|
|
11
|
+
const w = process.stdout.columns || 80;
|
|
12
|
+
let hintsWidth = 0;
|
|
13
|
+
for (const h of HINTS) {
|
|
14
|
+
hintsWidth += 2 + h.key.length + 1 + h.label.length + 1;
|
|
15
|
+
}
|
|
16
|
+
const fill = Math.max(0, w - hintsWidth);
|
|
17
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: C.primary, children: G.rule.repeat(fill) }), HINTS.map((h, i) => (_jsxs(React.Fragment, { children: [i === 0 ? (_jsx(Text, { color: C.dim, children: " " })) : (_jsxs(Text, { color: C.dim, children: [G.rule, " "] })), _jsx(Text, { color: C.dim, children: h.key }), _jsxs(Text, { color: C.dim, children: [" ", h.label, " "] })] }, i)))] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=key-hint-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-hint-rule.js","sourceRoot":"","sources":["../../../src/ui/components/key-hint-rule.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,KAAK,GAAG;IACZ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;IAClC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;CAChC,CAAC;AAEF,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAEvC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;IAEzC,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,YAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAQ,EACnD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,MAAC,KAAK,CAAC,QAAQ,eACZ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAU,CAC7B,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,CAAC,CAAC,IAAI,SAAS,CACrC,EACD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,YAAG,CAAC,CAAC,GAAG,GAAQ,EAClC,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAI,CAAC,CAAC,KAAK,SAAS,KAPnB,CAAC,CAQL,CAClB,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-header.d.ts","sourceRoot":"","sources":["../../../src/ui/components/overlay-header.tsx"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,2CAWrG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 OverlayHeader({ width, title, hints }) {
|
|
5
|
+
const label = ` ${G.brand} ${title} `;
|
|
6
|
+
const hintLabel = ` ${hints} `;
|
|
7
|
+
const fill = Math.max(0, width - label.length - hintLabel.length);
|
|
8
|
+
return (_jsxs(Box, { flexShrink: 0, children: [_jsx(Text, { color: C.primary, bold: true, children: label }), _jsx(Text, { color: C.primary, children: G.rule.repeat(fill) }), _jsx(Text, { color: C.primary, dimColor: true, children: hintLabel })] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=overlay-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-header.js","sourceRoot":"","sources":["../../../src/ui/components/overlay-header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAmD;IACpG,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,KAAK,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,CACL,MAAC,GAAG,IAAC,UAAU,EAAE,CAAC,aAChB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,kBAAE,KAAK,GAAQ,EAC3C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,YAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAQ,EACpD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,kBAAE,SAAS,GAAQ,IAC/C,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Orchestrator } from "../../core/orchestrator.js";
|
|
2
|
+
import type { SleepManager } from "../../scheduler/sleep-manager.js";
|
|
3
|
+
import type { MonitorManager } from "../../core/monitor.js";
|
|
4
|
+
interface StatusBarProps {
|
|
5
|
+
orchestrator: Orchestrator;
|
|
6
|
+
sleepManager?: SleepManager;
|
|
7
|
+
monitorManager?: MonitorManager;
|
|
8
|
+
}
|
|
9
|
+
export declare function StatusBar({ orchestrator, sleepManager, monitorManager }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=status-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../../src/ui/components/status-bar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,UAAU,cAAc;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAID,wBAAgB,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,cAAc,2CAmGvF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } 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, truncate } from "../format.js";
|
|
6
|
+
const SLEEP_FRAMES = ["◇", "◆", "◇", "◇"];
|
|
7
|
+
export function StatusBar({ orchestrator, sleepManager, monitorManager }) {
|
|
8
|
+
const state = orchestrator.currentState;
|
|
9
|
+
const provider = orchestrator.currentProvider;
|
|
10
|
+
const model = orchestrator.currentModel;
|
|
11
|
+
const reasoning = orchestrator.reasoningEffort;
|
|
12
|
+
const cost = orchestrator.totalCostUsd;
|
|
13
|
+
const [frame, setFrame] = useState(0);
|
|
14
|
+
const [elapsed, setElapsed] = useState(0);
|
|
15
|
+
const sleeping = sleepManager?.isSleeping;
|
|
16
|
+
const sleepSession = sleepManager?.currentSleep;
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!sleeping)
|
|
19
|
+
return;
|
|
20
|
+
const timer = setInterval(() => {
|
|
21
|
+
setFrame((f) => (f + 1) % SLEEP_FRAMES.length);
|
|
22
|
+
if (sleepSession) {
|
|
23
|
+
setElapsed(Date.now() - sleepSession.createdAt);
|
|
24
|
+
}
|
|
25
|
+
}, 500);
|
|
26
|
+
return () => clearInterval(timer);
|
|
27
|
+
}, [sleeping, sleepSession]);
|
|
28
|
+
const stateColor = {
|
|
29
|
+
idle: C.dim,
|
|
30
|
+
active: C.primary,
|
|
31
|
+
sleeping: C.primary,
|
|
32
|
+
waiting: C.dim,
|
|
33
|
+
error: C.error,
|
|
34
|
+
}[state];
|
|
35
|
+
return (_jsxs(Box, { paddingX: 1, children: [_jsxs(Text, { color: C.primary, children: [G.dot, " "] }), _jsx(Text, { color: C.text, children: provider?.displayName ?? "—" }), _jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: C.text, children: model ?? "—" }), _jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: C.text, children: reasoning ?? "medium" }), _jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: stateColor, children: state }), sleeping && sleepSession && (() => {
|
|
36
|
+
// Calculate how many chars are left for the sleep reason
|
|
37
|
+
const usedWidth = 2 /* paddingX */
|
|
38
|
+
+ 2 /* dot+space */
|
|
39
|
+
+ (provider?.displayName ?? "—").length
|
|
40
|
+
+ 3 /* dash */
|
|
41
|
+
+ (model ?? "—").length
|
|
42
|
+
+ 3 /* dash */
|
|
43
|
+
+ (reasoning ?? "medium").length
|
|
44
|
+
+ 3 /* dash */
|
|
45
|
+
+ state.length
|
|
46
|
+
+ 3 /* dash */
|
|
47
|
+
+ 2 /* frame+space */
|
|
48
|
+
+ formatDuration(elapsed).length
|
|
49
|
+
+ 1; /* leading space before reason */
|
|
50
|
+
const termWidth = process.stdout.columns ?? 80;
|
|
51
|
+
const maxReason = Math.max(10, termWidth - usedWidth - 12 /* cost/monitor slack */);
|
|
52
|
+
return (_jsxs(_Fragment, { children: [_jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsxs(Text, { color: C.primary, children: [SLEEP_FRAMES[frame], " "] }), _jsx(Text, { color: C.dim, children: formatDuration(elapsed) }), _jsxs(Text, { color: C.dim, children: [" ", truncate(sleepSession.trigger.sleepReason, maxReason, true)] })] }));
|
|
53
|
+
})(), monitorManager?.isActive && monitorManager.currentConfig && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsx(Text, { color: C.success, children: "\u27F3 " }), _jsxs(Text, { color: C.dim, children: ["monitoring (", Math.round(monitorManager.currentConfig.intervalMs / 60_000), "m)"] })] })), cost > 0 && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: C.dim, children: [" ", G.dash, " "] }), _jsxs(Text, { color: C.dim, children: ["$", cost.toFixed(4)] })] }))] }));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=status-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-bar.js","sourceRoot":"","sources":["../../../src/ui/components/status-bar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAWxD,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE1C,MAAM,UAAU,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAkB;IACtF,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;IACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC;IACxC,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC;IAEvC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,YAAY,EAAE,UAAU,CAAC;IAC1C,MAAM,YAAY,GAAG,YAAY,EAAE,YAAY,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,YAAY,EAAE,CAAC;gBACjB,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAE7B,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,CAAC,CAAC,GAAG;QACX,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,OAAO,EAAE,CAAC,CAAC,GAAG;QACd,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,KAAK,CAAW,CAAC;IAEnB,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,aACd,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,aAAG,CAAC,CAAC,GAAG,SAAS,EACvC,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAChB,QAAQ,EAAE,WAAW,IAAI,GAAG,GACxB,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAChB,KAAK,IAAI,GAAG,GACR,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,IAAI,YAChB,SAAS,IAAI,QAAQ,GACjB,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,YACpB,KAAK,GACD,EAEN,QAAQ,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE;gBACjC,yDAAyD;gBACzD,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc;sBAC9B,CAAC,CAAC,eAAe;sBACjB,CAAC,QAAQ,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC,MAAM;sBACrC,CAAC,CAAC,UAAU;sBACZ,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,MAAM;sBACrB,CAAC,CAAC,UAAU;sBACZ,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,MAAM;sBAC9B,CAAC,CAAC,UAAU;sBACZ,KAAK,CAAC,MAAM;sBACZ,CAAC,CAAC,UAAU;sBACZ,CAAC,CAAC,iBAAiB;sBACnB,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM;sBAC9B,CAAC,CAAC,CAAC,iCAAiC;gBACxC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;gBACpF,OAAO,CACL,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,aAAG,YAAY,CAAC,KAAK,CAAC,SAAS,EACrD,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,YAAG,cAAc,CAAC,OAAO,CAAC,GAAQ,EACpD,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,IAAQ,IACxF,CACJ,CAAC;YACJ,CAAC,CAAC,EAAE,EAEH,cAAc,EAAE,QAAQ,IAAI,cAAc,CAAC,aAAa,IAAI,CAC3D,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,OAAO,wBAAW,EACjC,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,6BACH,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,UACpE,IACN,CACJ,EAEA,IAAI,GAAG,CAAC,IAAI,CACX,8BACE,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,aAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAQ,EAC7C,MAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,IAC5C,CACJ,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared formatting functions used across the UI, tools, and scheduler.
|
|
3
|
+
*/
|
|
4
|
+
/** Format a metric value for display (compact, appropriate precision). */
|
|
5
|
+
export declare function formatMetricValue(v: number): string;
|
|
6
|
+
/** Format a duration in ms to a human-readable string (e.g. "2h 15m", "3m 42s", "8s"). */
|
|
7
|
+
export declare function formatDuration(ms: number): string;
|
|
8
|
+
/** Truncate a string with ellipsis. Optionally flattens whitespace for previews. */
|
|
9
|
+
export declare function truncate(s: string, max: number, flatten?: boolean): string;
|
|
10
|
+
/** Format an unknown error value to a string. */
|
|
11
|
+
export declare function formatError(err: unknown): string;
|
|
12
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,oFAAoF;AACpF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAIxE;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared formatting functions used across the UI, tools, and scheduler.
|
|
3
|
+
*/
|
|
4
|
+
/** Format a metric value for display (compact, appropriate precision). */
|
|
5
|
+
export function formatMetricValue(v) {
|
|
6
|
+
if (Math.abs(v) >= 1000)
|
|
7
|
+
return v.toFixed(1);
|
|
8
|
+
if (Math.abs(v) >= 1)
|
|
9
|
+
return v.toPrecision(4);
|
|
10
|
+
if (Math.abs(v) >= 0.001)
|
|
11
|
+
return v.toPrecision(3);
|
|
12
|
+
return v.toExponential(2);
|
|
13
|
+
}
|
|
14
|
+
/** Format a duration in ms to a human-readable string (e.g. "2h 15m", "3m 42s", "8s"). */
|
|
15
|
+
export function formatDuration(ms) {
|
|
16
|
+
const s = Math.floor(ms / 1000);
|
|
17
|
+
const m = Math.floor(s / 60);
|
|
18
|
+
const h = Math.floor(m / 60);
|
|
19
|
+
if (h > 0)
|
|
20
|
+
return `${h}h ${m % 60}m`;
|
|
21
|
+
if (m > 0)
|
|
22
|
+
return `${m}m ${s % 60}s`;
|
|
23
|
+
return `${s}s`;
|
|
24
|
+
}
|
|
25
|
+
/** Truncate a string with ellipsis. Optionally flattens whitespace for previews. */
|
|
26
|
+
export function truncate(s, max, flatten = false) {
|
|
27
|
+
const text = flatten ? s.replace(/\s+/g, " ").trim() : s;
|
|
28
|
+
if (text.length <= max)
|
|
29
|
+
return text;
|
|
30
|
+
return text.slice(0, max - 1) + "\u2026";
|
|
31
|
+
}
|
|
32
|
+
/** Format an unknown error value to a string. */
|
|
33
|
+
export function formatError(err) {
|
|
34
|
+
return err instanceof Error ? err.message : String(err);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,GAAW,EAAE,OAAO,GAAG,KAAK;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC3C,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { EventEmitter } from "node:events";
|
|
2
|
+
import type { Orchestrator } from "../core/orchestrator.js";
|
|
3
|
+
import type { SleepManager } from "../scheduler/sleep-manager.js";
|
|
4
|
+
import type { ConnectionPool } from "../remote/connection-pool.js";
|
|
5
|
+
import type { RemoteExecutor } from "../remote/executor.js";
|
|
6
|
+
import type { MetricStore } from "../metrics/store.js";
|
|
7
|
+
import type { MetricCollector } from "../metrics/collector.js";
|
|
8
|
+
import type { MonitorManager } from "../core/monitor.js";
|
|
9
|
+
import type { ExperimentTracker } from "../memory/experiment-tracker.js";
|
|
10
|
+
import type { MemoryStore } from "../memory/memory-store.js";
|
|
11
|
+
import type { StickyManager } from "../core/stickies.js";
|
|
12
|
+
export interface ToolData {
|
|
13
|
+
callId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
args: Record<string, unknown>;
|
|
16
|
+
result?: string;
|
|
17
|
+
isError?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface Message {
|
|
20
|
+
id: number;
|
|
21
|
+
role: "user" | "assistant" | "tool" | "error" | "system";
|
|
22
|
+
content: string;
|
|
23
|
+
tool?: ToolData;
|
|
24
|
+
}
|
|
25
|
+
export interface TaskInfo {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
status: "running" | "completed" | "failed";
|
|
29
|
+
machineId: string;
|
|
30
|
+
pid?: number;
|
|
31
|
+
startedAt: number;
|
|
32
|
+
}
|
|
33
|
+
interface LayoutProps {
|
|
34
|
+
orchestrator: Orchestrator;
|
|
35
|
+
sleepManager: SleepManager;
|
|
36
|
+
connectionPool?: ConnectionPool;
|
|
37
|
+
executor?: RemoteExecutor;
|
|
38
|
+
metricStore?: MetricStore;
|
|
39
|
+
metricCollector?: MetricCollector;
|
|
40
|
+
monitorManager?: MonitorManager;
|
|
41
|
+
experimentTracker?: ExperimentTracker;
|
|
42
|
+
memoryStore?: MemoryStore;
|
|
43
|
+
stickyManager?: StickyManager;
|
|
44
|
+
mouseEmitter?: EventEmitter;
|
|
45
|
+
}
|
|
46
|
+
export declare function Layout({ orchestrator, sleepManager, connectionPool, executor, metricStore, metricCollector, monitorManager, experimentTracker, memoryStore, stickyManager, mouseEmitter }: LayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/ui/layout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AAUxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAMrE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAID,wBAAgB,MAAM,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,WAAW,2CAoftM"}
|