@thelioo/opencode-balancer 0.1.5 → 0.1.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thelioo/opencode-balancer",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Account balancer plugin for opencode.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,57 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { normalizeAlias } from "../../core/accounts";
3
- import { claimPendingPrompt, pendingPromptGroupID, releasePendingPrompt } from "../../core/pending";
4
- import { savePendingAlias } from "../actions";
5
- function errorMessage(error) {
6
- return error instanceof Error && error.message ? error.message : "Failed to save alias";
7
- }
8
- const openPendingDialogs = new Set();
9
- export function openAliasDialog(api, state, pendingID) {
10
- const dialogID = pendingPromptGroupID(state.db, pendingID) ?? pendingID;
11
- if (openPendingDialogs.has(dialogID)) {
12
- if ("open" in api.ui.dialog && !api.ui.dialog.open)
13
- openPendingDialogs.delete(dialogID);
14
- else
15
- return false;
16
- }
17
- let claimed = claimPendingPrompt(state.db, pendingID);
18
- if (!claimed) {
19
- releasePendingPrompt(state.db, pendingID);
20
- claimed = claimPendingPrompt(state.db, pendingID);
21
- }
22
- if (!claimed)
23
- return false;
24
- const pending = state.pending().find((item) => item.id === pendingID) ?? claimed;
25
- const providerID = pending?.providerID ?? "provider";
26
- openPendingDialogs.add(dialogID);
27
- const close = () => {
28
- openPendingDialogs.delete(dialogID);
29
- api.ui.dialog.clear();
30
- };
31
- try {
32
- api.ui.dialog.setSize("medium");
33
- api.ui.dialog.replace(() => (_jsx(api.ui.DialogPrompt, { title: "Save pending connection", placeholder: "account alias", description: () => (_jsxs("text", { fg: api.theme.current.textMuted, wrapMode: "none", children: ["Choose an alias for ", providerID, "/", pending?.authType ?? "auth", "."] })), onCancel: close, onConfirm: async (value) => {
34
- const alias = normalizeAlias(value);
35
- if (!alias) {
36
- api.ui.toast({ variant: "error", message: "Alias is required" });
37
- return;
38
- }
39
- try {
40
- const account = savePendingAlias(state, pendingID, alias);
41
- close();
42
- api.ui.toast({ variant: "success", message: `Saved ${account.providerID}/${account.alias}` });
43
- }
44
- catch (error) {
45
- openPendingDialogs.delete(dialogID);
46
- api.ui.toast({ variant: "error", message: errorMessage(error) });
47
- }
48
- } })));
49
- return true;
50
- }
51
- catch {
52
- openPendingDialogs.delete(dialogID);
53
- releasePendingPrompt(state.db, pendingID);
54
- return false;
55
- }
56
- }
57
- //# sourceMappingURL=alias-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alias-dialog.js","sourceRoot":"","sources":["../../../src/tui/components/alias-dialog.tsx"],"names":[],"mappings":"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"}
@@ -1,201 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
3
- import { listAccounts } from "../../core/accounts";
4
- import { getBalancingEnabled, setBalancingEnabled } from "../../core/priority";
5
- import { getUsageSnapshot } from "../../core/usage/store";
6
- import { dashboardSelectionMarker, moveDashboardFocus, reduceDashboardKey } from "../dashboard-keys";
7
- import { dashboardContentHeight, dashboardLayoutMode } from "../responsive";
8
- import { selectedRowColors } from "../selection-colors";
9
- import { UsageSnapshotBar } from "./usage-display";
10
- export function Dashboard(props) {
11
- const theme = () => props.api.theme.current;
12
- const selectedColors = () => selectedRowColors(theme());
13
- const [confirmAccount, setConfirmAccount] = createSignal();
14
- const [accounts, setAccounts] = createSignal(listAccounts(props.state.db));
15
- const [balancing, setBalancing] = createSignal(getBalancingEnabled(props.state.db));
16
- const [usage, setUsage] = createSignal({});
17
- const [cursor, setCursor] = createSignal(0);
18
- const [headerCursor, setHeaderCursor] = createSignal(0);
19
- const [focusArea, setFocusArea] = createSignal("content");
20
- const layoutMode = () => dashboardLayoutMode({
21
- width: props.api.renderer.width,
22
- height: props.api.renderer.height,
23
- });
24
- const compact = () => layoutMode() === "compact";
25
- const contentHeight = () => dashboardContentHeight({ height: props.api.renderer.height });
26
- const headerActions = [
27
- { type: "close", key: "close", label: "close" },
28
- { type: "priority", key: "priority", label: "priority" },
29
- ];
30
- const rows = createMemo(() => [
31
- { type: "balancing", key: "balancing" },
32
- { type: "connect", key: "connect" },
33
- ...accounts().map((account) => ({
34
- type: "account",
35
- key: `account:${account.providerID}/${account.alias}`,
36
- providerID: account.providerID,
37
- alias: account.alias,
38
- })),
39
- ]);
40
- const clampCursor = (value) => Math.max(0, Math.min(value, Math.max(0, rows().length - 1)));
41
- const clampHeaderCursor = (value) => Math.max(0, Math.min(value, headerActions.length - 1));
42
- const refreshDashboard = () => {
43
- const nextAccounts = listAccounts(props.state.db);
44
- setAccounts(nextAccounts);
45
- setBalancing(getBalancingEnabled(props.state.db));
46
- setUsage(Object.fromEntries(nextAccounts.map((account) => [
47
- `${account.providerID}/${account.alias}`,
48
- getUsageSnapshot(props.state.db, account.providerID, account.alias),
49
- ])));
50
- setCursor((value) => clampCursor(value));
51
- };
52
- refreshDashboard();
53
- const timer = setInterval(refreshDashboard, 500);
54
- onCleanup(() => clearInterval(timer));
55
- const Button = (buttonProps) => (_jsx("box", { onMouseUp: buttonProps.onClick, paddingLeft: 0, paddingRight: 0, children: _jsxs("text", { fg: buttonProps.danger ? theme().warning : theme().accent, wrapMode: "none", truncate: true, children: ["[ ", buttonProps.label, " ]"] }) }));
56
- const Chip = (chipProps) => (_jsxs("text", { fg: chipProps.danger ? theme().warning : theme().accent, wrapMode: "none", children: ["[", chipProps.keyName, "] ", _jsx("span", { style: { fg: theme().textMuted }, children: chipProps.label })] }));
57
- const SectionTitle = (sectionProps) => (_jsxs("box", { flexDirection: "row", gap: 1, height: 1, flexShrink: 0, children: [_jsx("text", { fg: theme().primary, wrapMode: "none", children: sectionProps.label }), _jsx("text", { fg: theme().textMuted, wrapMode: "none", children: sectionProps.count === undefined ? "" : `${sectionProps.count}` })] }));
58
- const Row = (rowProps) => (_jsx("box", { flexDirection: "row", width: "100%", minWidth: 0, height: 1, flexShrink: 0, backgroundColor: rowProps.selected ? selectedColors().bg : undefined, onMouseUp: rowProps.onMouseUp, children: rowProps.children }));
59
- const selected = (key) => focusArea() === "content" && rows()[cursor()]?.key === key;
60
- const headerSelected = (key) => focusArea() === "header" && headerActions[headerCursor()]?.key === key;
61
- const rowMarker = (key) => dashboardSelectionMarker({
62
- focusedArea: focusArea(),
63
- itemArea: "content",
64
- selected: rows()[cursor()]?.key === key,
65
- });
66
- const headerMarker = (key) => dashboardSelectionMarker({
67
- focusedArea: focusArea(),
68
- itemArea: "header",
69
- selected: headerActions[headerCursor()]?.key === key,
70
- });
71
- const current = () => rows()[cursor()];
72
- const currentHeader = () => headerActions[headerCursor()];
73
- const selectedLabel = () => {
74
- const row = current();
75
- if (focusArea() === "header")
76
- return currentHeader()?.type ?? "header";
77
- if (!row)
78
- return "none";
79
- if (row.type === "balancing")
80
- return "balancing";
81
- if (row.type === "connect")
82
- return "connect";
83
- if (row.type === "account")
84
- return `account/${row.providerID}/${row.alias}`;
85
- return "priority";
86
- };
87
- const selectedAction = () => {
88
- if (focusArea() === "header") {
89
- const action = currentHeader();
90
- return action?.type === "close" ? "Enter closes dashboard" : "Enter opens provider priority matrix";
91
- }
92
- const row = current();
93
- if (!row)
94
- return "Enter opens selected item";
95
- if (row.type === "balancing")
96
- return "Enter/Space toggles automatic balancing";
97
- if (row.type === "connect")
98
- return "Enter/C connects a new provider";
99
- if (confirmAccount() === `${row.providerID}/${row.alias}`)
100
- return "Y confirms removal · N cancels";
101
- return "R to rename · D requests removal confirmation";
102
- };
103
- const accountLabel = (account) => `${account.providerID}/${account.alias} (${account.authType})`;
104
- const removeCurrent = () => {
105
- const row = current();
106
- if (row?.type === "account")
107
- setConfirmAccount(`${row.providerID}/${row.alias}`);
108
- };
109
- const toggleBalancing = () => {
110
- setBalancingEnabled(props.state.db, !balancing());
111
- refreshDashboard();
112
- props.state.refresh();
113
- };
114
- const confirmCurrent = () => {
115
- const row = current();
116
- if (row?.type === "account" && confirmAccount() === `${row.providerID}/${row.alias}`) {
117
- setConfirmAccount(undefined);
118
- props.removeAccount(row.providerID, row.alias);
119
- refreshDashboard();
120
- }
121
- };
122
- const runPrimary = () => {
123
- if (focusArea() === "header") {
124
- const action = currentHeader();
125
- if (action?.type === "close")
126
- return props.onBack();
127
- return props.openPriority();
128
- }
129
- const row = current();
130
- if (!row)
131
- return;
132
- if (row.type === "balancing")
133
- return toggleBalancing();
134
- if (row.type === "connect")
135
- return props.openConnect();
136
- if (row.type === "account")
137
- return setConfirmAccount(`${row.providerID}/${row.alias}`);
138
- };
139
- const handleKey = (event) => {
140
- if (props.api.ui.dialog.open)
141
- return;
142
- const intent = reduceDashboardKey({ name: event.name ?? "" });
143
- switch (intent.type) {
144
- case "move-cursor":
145
- {
146
- const next = moveDashboardFocus({ area: focusArea(), cursor: cursor(), rowCount: rows().length }, intent.delta);
147
- setFocusArea(next.area);
148
- setCursor(clampCursor(next.cursor));
149
- }
150
- return;
151
- case "move-header":
152
- setFocusArea("header");
153
- setHeaderCursor((value) => clampHeaderCursor(value + intent.delta));
154
- return;
155
- case "primary":
156
- runPrimary();
157
- return;
158
- case "priority":
159
- props.openPriority();
160
- return;
161
- case "connect":
162
- props.openConnect();
163
- return;
164
- case "rename": {
165
- const row = current();
166
- if (row?.type === "account")
167
- props.renameAccount(row.providerID, row.alias);
168
- return;
169
- }
170
- case "remove":
171
- removeCurrent();
172
- return;
173
- case "confirm":
174
- confirmCurrent();
175
- return;
176
- case "cancel":
177
- setConfirmAccount(undefined);
178
- return;
179
- case "back":
180
- props.onBack();
181
- return;
182
- default:
183
- return;
184
- }
185
- };
186
- let container;
187
- onMount(() => container?.focus?.());
188
- return (_jsxs("box", { ref: (ref) => (container = ref), focusable: true, onKeyDown: (event) => handleKey(event), flexDirection: "column", gap: 0, padding: 1, width: "100%", height: "100%", children: [_jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, flexShrink: 0, children: [_jsxs("text", { fg: theme().primary, wrapMode: "none", overflow: "hidden", truncate: true, children: ["opencode-balancer", compact() ? "" : " control center"] }), _jsx(Show, { when: !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "Manage accounts, usage, and provider failover." }) }), _jsx("box", { flexDirection: "row", gap: 1, height: 1, flexShrink: 0, children: _jsx(For, { each: headerActions, children: (action, index) => (_jsx("box", { height: 1, flexShrink: 0, backgroundColor: headerSelected(action.key) ? selectedColors().bg : undefined, onMouseUp: () => {
189
- setFocusArea("header");
190
- setHeaderCursor(index());
191
- if (action.type === "close")
192
- props.onBack();
193
- else
194
- props.openPriority();
195
- }, children: _jsxs("text", { fg: headerSelected(action.key) ? selectedColors().fg : theme().accent, wrapMode: "none", children: [headerMarker(action.key), " [ ", action.label, " ]"] }) })) }) })] }), _jsxs("scrollbox", { height: contentHeight(), scrollbarOptions: { visible: false }, children: [_jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, onMouseUp: () => setCursor(0), children: [_jsx(SectionTitle, { label: "BALANCING" }), _jsx(Row, { selected: selected("balancing"), onMouseUp: toggleBalancing, children: _jsxs("text", { fg: selected("balancing") ? selectedColors().fg : balancing() ? theme().success : theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: [rowMarker("balancing"), " Automatic balancing: ", balancing() ? "ON" : "OFF"] }) }), _jsx(Show, { when: !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "Enter/Space toggles provider failover. Priority config is in the header." }) })] }), _jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, children: [_jsx(SectionTitle, { label: "ACCOUNTS", count: accounts().length }), _jsxs("box", { flexDirection: "column", gap: 0, flexShrink: 0, onMouseUp: () => setCursor(rows().findIndex((row) => row.key === "connect")), children: [_jsx(Row, { selected: selected("connect"), onMouseUp: props.openConnect, children: _jsxs("text", { fg: selected("connect") ? selectedColors().fg : theme().accent, wrapMode: "none", overflow: "hidden", truncate: true, children: [rowMarker("connect"), " New account"] }) }), _jsx(Show, { when: selected("connect") && !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "action: Enter/C opens opencode provider connection" }) })] }), _jsx(Show, { when: accounts().length > 0, fallback: _jsx("text", { fg: theme().textMuted, children: "none" }), children: _jsx(For, { each: accounts(), children: (account) => (_jsxs("box", { flexDirection: "column", gap: 0, flexShrink: 0, onMouseUp: () => setCursor(rows().findIndex((row) => row.key === `account:${account.providerID}/${account.alias}`)), children: [_jsx(Row, { selected: selected(`account:${account.providerID}/${account.alias}`), children: _jsxs("text", { fg: selected(`account:${account.providerID}/${account.alias}`) ? selectedColors().fg : account.disabled ? theme().textMuted : theme().text, wrapMode: "none", overflow: "hidden", truncate: true, children: [rowMarker(`account:${account.providerID}/${account.alias}`), " ", accountLabel(account)] }) }), _jsx(Show, { when: !compact(), children: _jsx(UsageSnapshotBar, { theme: theme(), snapshot: usage()[`${account.providerID}/${account.alias}`], muted: !selected(`account:${account.providerID}/${account.alias}`) }) }), _jsx(Show, { when: confirmAccount() === `${account.providerID}/${account.alias}`, fallback: _jsx(Show, { when: selected(`account:${account.providerID}/${account.alias}`), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "action: press D to remove this account" }) }), children: _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: theme().warning, wrapMode: "none", children: "confirm removal?" }), _jsx(Button, { label: "yes", danger: true, onClick: () => {
196
- setConfirmAccount(undefined);
197
- props.removeAccount(account.providerID, account.alias);
198
- refreshDashboard();
199
- } }), _jsx(Button, { label: "no", onClick: () => setConfirmAccount(undefined) })] }) })] })) }) })] })] }), _jsxs("box", { flexDirection: "column", gap: 0, children: [_jsx(Show, { when: !compact(), fallback: _jsx("text", { fg: theme().textMuted, wrapMode: "none", truncate: true, children: "\u2191\u2193 move \u00B7 Enter open \u00B7 Space toggle \u00B7 P priority \u00B7 Esc close" }), children: _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsx(Chip, { keyName: "\u2191\u2193", label: "Move" }), _jsx(Chip, { keyName: "Enter", label: "Open" }), _jsx(Chip, { keyName: "Space", label: "Toggle" }), _jsx(Chip, { keyName: "C", label: "Connect" }), _jsx(Chip, { keyName: "P", label: "Priority" }), _jsx(Chip, { keyName: "R", label: "Rename" }), _jsx(Chip, { keyName: "D", label: "Remove", danger: true }), _jsx(Chip, { keyName: "Esc", label: "Close" })] }) }), _jsxs("text", { fg: theme().textMuted, wrapMode: "none", truncate: true, children: ["selected: ", selectedLabel(), " \u00B7 ", selectedAction()] })] })] }));
200
- }
201
- //# sourceMappingURL=dashboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/tui/components/dashboard.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AAC9H,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWnD,MAAM,UAAU,SAAS,CAAC,KAQzB;IACG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,YAAY,EAAsB,CAAC;IAC/E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAoD,EAAE,CAAC,CAAC;IAC9F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAqB,SAAS,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,GAAG,EAAE,CACpB,mBAAmB,CAAC;QAChB,KAAK,EAAG,KAAK,CAAC,GAAG,CAAC,QAA0C,CAAC,KAAK;QAClE,MAAM,EAAG,KAAK,CAAC,GAAG,CAAC,QAA2C,CAAC,MAAM;KACxE,CAAC,CAAC;IACP,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,KAAK,SAAS,CAAC;IACjD,MAAM,aAAa,GAAG,GAAG,EAAE,CACvB,sBAAsB,CAAC,EAAE,MAAM,EAAG,KAAK,CAAC,GAAG,CAAC,QAA2C,CAAC,MAAM,EAAE,CAAC,CAAC;IACtG,MAAM,aAAa,GAAmB;QAClC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAC/C,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KAC3D,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAiB,GAAG,EAAE,CAAC;QAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;QACvC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;QACnC,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,SAAkB;YACxB,GAAG,EAAE,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE;YACrD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;SACvB,CAAC,CAAC;KACN,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,QAAQ,CACJ,MAAM,CAAC,WAAW,CACd,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE;YACxC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;SACtE,CAAC,CACL,CACJ,CAAC;QACF,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IACF,gBAAgB,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,WAAqE,EAAE,EAAE,CAAC,CACtF,cAAK,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,YAChE,gBAAM,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,yBAClF,WAAW,CAAC,KAAK,UACjB,GACL,CACT,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,SAA+D,EAAE,EAAE,CAAC,CAC9E,gBAAM,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,kBACxE,SAAS,CAAC,OAAO,QAAG,eAAM,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,YAAG,SAAS,CAAC,KAAK,GAAQ,IACnF,CACV,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,YAA+C,EAAE,EAAE,CAAC,CACtE,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,aACrD,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,YACrC,YAAY,CAAC,KAAK,GAChB,EACP,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,YACvC,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,GAC7D,IACL,CACT,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,QAA2E,EAAE,EAAE,CAAC,CACzF,cACI,aAAa,EAAC,KAAK,EACnB,KAAK,EAAC,MAAM,EACZ,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,CAAC,EACb,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACpE,SAAS,EAAE,QAAQ,CAAC,SAAS,YAE5B,QAAQ,CAAC,QAAQ,GAChB,CACT,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,SAAS,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7F,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,QAAQ,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC/G,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAC9B,wBAAwB,CAAC;QACrB,WAAW,EAAE,SAAS,EAAE;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG;KAC1C,CAAC,CAAC;IACP,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACjC,wBAAwB,CAAC;QACrB,WAAW,EAAE,SAAS,EAAE;QACxB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG;KACvD,CAAC,CAAC;IACP,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,SAAS,EAAE,KAAK,QAAQ;YAAE,OAAO,aAAa,EAAE,EAAE,IAAI,IAAI,QAAQ,CAAC;QACvE,IAAI,CAAC,GAAG;YAAE,OAAO,MAAM,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,WAAW,CAAC;QACjD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,WAAW,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC5E,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,IAAI,SAAS,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,OAAO,MAAM,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,sCAAsC,CAAC;QACxG,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO,2BAA2B,CAAC;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,yCAAyC,CAAC;QAC/E,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,iCAAiC,CAAC;QACrE,IAAI,cAAc,EAAE,KAAK,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE;YAAE,OAAO,gCAAgC,CAAC;QACnG,OAAO,+CAA+C,CAAC;IAC3D,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,OAAgE,EAAE,EAAE,CACtF,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,GAAG,CAAC;IACnE,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS;YAAE,iBAAiB,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAAG,EAAE;QACzB,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAClD,gBAAgB,EAAE,CAAC;QACnB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS,IAAI,cAAc,EAAE,KAAK,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YACnF,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7B,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,gBAAgB,EAAE,CAAC;QACvB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,IAAI,SAAS,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;QAChC,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,eAAe,EAAE,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,iBAAiB,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,EAAE;QACjC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO;QACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9D,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,aAAa;gBACd,CAAC;oBACG,MAAM,IAAI,GAAG,kBAAkB,CAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAChE,MAAM,CAAC,KAAK,CACf,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO;YACX,KAAK,aAAa;gBACd,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvB,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpE,OAAO;YACX,KAAK,SAAS;gBACV,UAAU,EAAE,CAAC;gBACb,OAAO;YACX,KAAK,UAAU;gBACX,KAAK,CAAC,YAAY,EAAE,CAAC;gBACrB,OAAO;YACX,KAAK,SAAS;gBACV,KAAK,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;gBACtB,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5E,OAAO;YACX,CAAC;YACD,KAAK,QAAQ;gBACT,aAAa,EAAE,CAAC;gBAChB,OAAO;YACX,KAAK,SAAS;gBACV,cAAc,EAAE,CAAC;gBACjB,OAAO;YACX,KAAK,QAAQ;gBACT,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAC7B,OAAO;YACX,KAAK,MAAM;gBACP,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACX;gBACI,OAAO;QACf,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,SAA6C,CAAC;IAClD,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAEpC,OAAO,CACH,eACI,GAAG,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,GAA6B,CAAC,EAClE,SAAS,QACT,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/C,aAAa,EAAC,QAAQ,EACtB,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,CAAC,EACV,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,aAEb,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,aAC/D,gBAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,wCAC/C,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,IACjD,EACP,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAClB,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,qEAEhE,GACJ,EACP,cAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YACrD,KAAC,GAAG,IAAC,IAAI,EAAE,aAAa,YACnB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAChB,cACI,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,CAAC,EACb,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAC7E,SAAS,EAAE,GAAG,EAAE;oCACZ,YAAY,CAAC,QAAQ,CAAC,CAAC;oCACvB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;oCACzB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;wCAAE,KAAK,CAAC,MAAM,EAAE,CAAC;;wCACvC,KAAK,CAAC,YAAY,EAAE,CAAC;gCAC9B,CAAC,YAED,gBAAM,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,aACvF,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,SAAK,MAAM,CAAC,KAAK,UACvC,GACL,CACT,GACC,GACJ,IACJ,EAEN,qBAAW,MAAM,EAAE,aAAa,EAAE,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aACpE,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,aAC/E,KAAC,YAAY,IAAC,KAAK,EAAC,WAAW,GAAG,EAClC,KAAC,GAAG,IAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,eAAe,YAC5D,gBAAM,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBAChJ,SAAS,CAAC,WAAW,CAAC,4BAAwB,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IACtE,GACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAClB,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,+FAEhE,GACJ,IACL,EAEN,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,aAChD,KAAC,YAAY,IAAC,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAI,EAC3D,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,aAC3H,KAAC,GAAG,IAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,YAC5D,gBAAM,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBAC3G,SAAS,CAAC,SAAS,CAAC,oBAClB,GACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YACzC,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,yEAEhE,GACJ,IACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,qBAAa,YACjF,KAAC,GAAG,IAAC,IAAI,EAAE,QAAQ,EAAE,YAChB,CAAC,OAAO,EAAE,EAAE,CAAC,CACV,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,aAClK,KAAC,GAAG,IAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,YACrE,gBAAM,EAAE,EAAE,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBACvL,SAAS,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,OAAG,YAAY,CAAC,OAAO,CAAC,IACjF,GACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAClB,KAAC,gBAAgB,IACb,KAAK,EAAE,KAAK,EAAE,EACd,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,EAC3D,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GACpE,GACC,EACP,KAAC,IAAI,IACD,IAAI,EAAE,cAAc,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,EACnE,QAAQ,EACJ,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,YAClE,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,6DAEhE,GACJ,YAGX,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC3B,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,iCAAwB,EAClE,KAAC,MAAM,IACH,KAAK,EAAC,KAAK,EACX,MAAM,QACN,OAAO,EAAE,GAAG,EAAE;gEACV,iBAAiB,CAAC,SAAS,CAAC,CAAC;gEAC7B,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gEACvD,gBAAgB,EAAE,CAAC;4DACvB,CAAC,GACH,EACF,KAAC,MAAM,IAAC,KAAK,EAAC,IAAI,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAI,IAChE,GACH,IACL,CACT,GACC,GACH,IACL,IAEE,EAEZ,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC9B,KAAC,IAAI,IACD,IAAI,EAAE,CAAC,OAAO,EAAE,EAChB,QAAQ,EACJ,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,iHAE9C,YAGX,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC3B,KAAC,IAAI,IAAC,OAAO,EAAC,cAAI,EAAC,KAAK,EAAC,MAAM,GAAG,EAClC,KAAC,IAAI,IAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,GAAG,EACrC,KAAC,IAAI,IAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,GAAG,EACvC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,SAAS,GAAG,EACpC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,UAAU,GAAG,EACrC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,QAAQ,GAAG,EACnC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,SAAG,EAC1C,KAAC,IAAI,IAAC,OAAO,EAAC,KAAK,EAAC,KAAK,EAAC,OAAO,GAAG,IAClC,GACH,EACP,gBAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,iCACtC,aAAa,EAAE,cAAK,cAAc,EAAE,IAC5C,IACL,IACJ,CACT,CAAC;AACN,CAAC"}
@@ -1,120 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
3
- import { getBalancingEnabled, listProviderPriority, moveProvider, resolveActiveSelection, setBalancingEnabled, setProviderEnabled, } from "../../core/priority";
4
- import { movePriorityFocus, prioritySelectionMarker, reducePriorityKey, } from "../priority-keys";
5
- import { dashboardLayoutMode } from "../responsive";
6
- import { selectedRowColors } from "../selection-colors";
7
- function modelLabel(api, entry) {
8
- if (!entry.modelID)
9
- return "(sem modelo — Enter)";
10
- const provider = api.state.provider.find((item) => item.id === entry.providerID);
11
- const model = provider?.models?.[entry.modelID];
12
- return model?.name ?? entry.modelID;
13
- }
14
- export function PriorityScreen(props) {
15
- const theme = () => props.api.theme.current;
16
- const selectedColors = () => selectedRowColors(theme());
17
- const db = props.state.db;
18
- const [entries, setEntries] = createSignal(listProviderPriority(db));
19
- const [balancing, setBalancing] = createSignal(getBalancingEnabled(db));
20
- const [cursor, setCursor] = createSignal(0);
21
- const [focusArea, setFocusArea] = createSignal("content");
22
- const compact = () => dashboardLayoutMode({
23
- width: props.api.renderer.width,
24
- height: props.api.renderer.height,
25
- }) === "compact";
26
- const refresh = () => {
27
- const next = listProviderPriority(db);
28
- setEntries(next);
29
- setBalancing(getBalancingEnabled(db));
30
- setCursor((value) => Math.max(0, Math.min(value, Math.max(0, next.length - 1))));
31
- };
32
- refresh();
33
- const timer = setInterval(refresh, 500);
34
- onCleanup(() => clearInterval(timer));
35
- const activeProviderID = createMemo(() => (balancing() ? resolveActiveSelection(db)?.providerID : undefined));
36
- const current = () => entries()[cursor()];
37
- const clampCursor = (value) => Math.max(0, Math.min(value, Math.max(0, entries().length - 1)));
38
- const headerSelected = () => focusArea() === "header";
39
- const headerMarker = () => prioritySelectionMarker({ focusedArea: focusArea(), itemArea: "header", selected: true });
40
- const rowMarker = (selected) => prioritySelectionMarker({ focusedArea: focusArea(), itemArea: "content", selected });
41
- const toggleBalancing = () => {
42
- setBalancingEnabled(db, !balancing());
43
- refresh();
44
- };
45
- const toggleEnabled = (entry) => {
46
- if (!entry)
47
- return;
48
- setProviderEnabled(db, entry.providerID, !entry.enabled);
49
- refresh();
50
- };
51
- const reorder = (direction) => {
52
- const entry = current();
53
- if (!entry)
54
- return;
55
- moveProvider(db, entry.providerID, direction);
56
- refresh();
57
- setCursor((value) => clampCursor(value + direction));
58
- };
59
- const handleKey = (event) => {
60
- const intent = reducePriorityKey({ name: event.name ?? "", shift: event.shift });
61
- switch (intent.type) {
62
- case "move-cursor":
63
- {
64
- const next = movePriorityFocus({ area: focusArea(), cursor: cursor(), rowCount: entries().length }, intent.delta);
65
- setFocusArea(next.area);
66
- setCursor(clampCursor(next.cursor));
67
- }
68
- return;
69
- case "reorder":
70
- setFocusArea("content");
71
- reorder(intent.direction);
72
- return;
73
- case "toggle-enabled":
74
- if (focusArea() === "header")
75
- return;
76
- toggleEnabled(current());
77
- return;
78
- case "open-model": {
79
- if (focusArea() === "header")
80
- return props.onBack();
81
- const entry = current();
82
- if (entry)
83
- props.openModelPicker(entry.providerID);
84
- return;
85
- }
86
- case "toggle-balancing":
87
- toggleBalancing();
88
- return;
89
- case "back":
90
- props.onBack();
91
- return;
92
- default:
93
- return;
94
- }
95
- };
96
- let container;
97
- onMount(() => container?.focus?.());
98
- const Hint = (hintProps) => (_jsx("text", { fg: theme().textMuted, wrapMode: "none", truncate: true, children: hintProps.children }));
99
- const Chip = (chipProps) => (_jsxs("text", { fg: chipProps.danger ? theme().warning : theme().accent, wrapMode: "none", children: ["[", chipProps.keyName, "] ", _jsx("span", { style: { fg: theme().textMuted }, children: chipProps.label })] }));
100
- const Row = (rowProps) => (_jsx("box", { flexDirection: "row", width: "100%", minWidth: 0, height: 1, flexShrink: 0, backgroundColor: rowProps.selected ? selectedColors().bg : undefined, onMouseUp: rowProps.onMouseUp, children: rowProps.children }));
101
- return (_jsxs("box", { ref: (ref) => (container = ref), focusable: true, onKeyDown: (event) => handleKey(event), flexDirection: "column", gap: 0, padding: 1, width: "100%", height: "100%", children: [_jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, children: [_jsxs("text", { fg: theme().primary, wrapMode: "none", overflow: "hidden", truncate: true, children: ["opencode-balancer", compact() ? "" : " priority matrix"] }), _jsx(Show, { when: !compact(), children: _jsx(Hint, { children: "Choose one model per provider and order failover priority." }) }), _jsx("box", { height: 1, flexShrink: 0, backgroundColor: headerSelected() ? selectedColors().bg : undefined, onMouseUp: () => {
102
- setFocusArea("header");
103
- props.onBack();
104
- }, children: _jsxs("text", { fg: headerSelected() ? selectedColors().fg : theme().accent, wrapMode: "none", overflow: "hidden", truncate: true, children: [headerMarker(), " [ back to dashboard ]"] }) })] }), _jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, onMouseUp: toggleBalancing, children: [_jsxs("text", { fg: theme().primary, wrapMode: "none", overflow: "hidden", truncate: true, children: ["BALANCING ", balancing() ? "ON" : "OFF"] }), _jsx(Show, { when: !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "press B to toggle automatic provider failover" }) })] }), _jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, children: [_jsx(Show, { when: !compact(), children: _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsx("text", { fg: theme().primary, wrapMode: "none", children: "# PROVIDER" }), _jsx("text", { fg: theme().primary, wrapMode: "none", children: "MODEL" }), _jsx("text", { fg: theme().primary, wrapMode: "none", children: "ENABLED" })] }) }), _jsx(Show, { when: entries().length > 0, fallback: _jsx("text", { fg: theme().textMuted, wrapMode: "none", children: "nenhum provider com conta ainda" }), children: _jsx(For, { each: entries(), children: (entry, index) => {
105
- const selected = () => focusArea() === "content" && index() === cursor();
106
- const active = () => entry.providerID === activeProviderID();
107
- const rowColor = () => {
108
- if (!entry.enabled)
109
- return theme().textMuted;
110
- if (active())
111
- return theme().success;
112
- return theme().text;
113
- };
114
- return (_jsxs(Row, { selected: selected(), onMouseUp: () => {
115
- setFocusArea("content");
116
- setCursor(index());
117
- }, children: [_jsx("box", { width: 1, flexShrink: 0, backgroundColor: selected() ? selectedColors().bg : undefined, children: _jsx("text", { fg: selected() ? selectedColors().fg : theme().accent, wrapMode: "none", children: rowMarker(index() === cursor()) }) }), _jsx("box", { width: 3, flexShrink: 0, backgroundColor: selected() ? selectedColors().bg : undefined, children: _jsxs("text", { fg: selected() ? selectedColors().fg : rowColor(), wrapMode: "none", children: [index() + 1, "."] }) }), _jsx("box", { width: 18, flexShrink: 0, backgroundColor: selected() ? selectedColors().bg : undefined, children: _jsx("text", { fg: selected() ? selectedColors().fg : rowColor(), wrapMode: "none", overflow: "hidden", truncate: true, children: entry.providerID }) }), _jsx("box", { flexGrow: 1, minWidth: 0, backgroundColor: selected() ? selectedColors().bg : undefined, onMouseUp: () => props.openModelPicker(entry.providerID), children: _jsx("text", { fg: selected() ? selectedColors().fg : entry.modelID ? rowColor() : theme().warning, wrapMode: "none", overflow: "hidden", truncate: true, children: modelLabel(props.api, entry) }) }), _jsx("box", { width: 10, flexShrink: 0, backgroundColor: selected() ? selectedColors().bg : undefined, onMouseUp: () => toggleEnabled(entry), children: _jsx("text", { fg: selected() ? selectedColors().fg : entry.enabled ? theme().success : theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: entry.enabled ? "enabled" : "disabled" }) })] }));
118
- } }) })] }), _jsx("box", { flexDirection: "column", gap: 0, children: _jsxs(Show, { when: !compact(), fallback: _jsx(Hint, { children: "\u2191\u2193 move \u00B7 Shift+\u2191\u2193 reorder \u00B7 Enter model \u00B7 Space enable \u00B7 Esc back" }), children: [_jsxs("box", { flexDirection: "row", gap: 2, children: [_jsx(Chip, { keyName: "\u2191\u2193", label: "Move" }), _jsx(Chip, { keyName: "Shift+\u2191\u2193", label: "Reorder" }), _jsx(Chip, { keyName: "Enter", label: "Model" }), _jsx(Chip, { keyName: "Space", label: "Enable" }), _jsx(Chip, { keyName: "Esc", label: "Back" })] }), _jsx(Hint, { children: headerSelected() ? "Enter returns to the dashboard." : "selected provider controls the next automatic failover target." })] }) })] }));
119
- }
120
- //# sourceMappingURL=priority-screen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"priority-screen.js","sourceRoot":"","sources":["../../../src/tui/components/priority-screen.tsx"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- import { jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { setSelectedModel } from "../../core/accounts";
3
- import { createNativeModelApplier } from "../native-model-apply";
4
- import { providerModelOptions } from "../provider-models";
5
- export function openProviderModelDialog(api, state, providerID, options = {}) {
6
- const modelOptions = providerModelOptions(api.state.provider, providerID);
7
- const providerName = modelOptions[0]?.providerName ?? providerID;
8
- const applyNativeSelection = options.applyNativeSelection ?? createNativeModelApplier(api);
9
- api.ui.dialog.setSize("medium");
10
- api.ui.dialog.replace(() => (_jsx(api.ui.DialogSelect, { title: `Select ${providerName} model`, placeholder: `Search ${providerName} models`, flat: true, skipFilter: false, options: modelOptions.map((option) => ({
11
- title: option.title,
12
- description: option.providerName,
13
- value: option,
14
- footer: `${option.providerID}/${option.modelID}`,
15
- })), onSelect: (option) => {
16
- const model = {
17
- providerID: option.value.providerID,
18
- modelID: option.value.modelID,
19
- };
20
- // Persist first: in manual mode this stores the selected model;
21
- // priority mode injects its own persistence callback.
22
- if (options.onSelected)
23
- options.onSelected(model);
24
- else
25
- setSelectedModel(state.db, model.providerID, model.modelID);
26
- state.refresh();
27
- // Close our picker, then replay the choice into opencode's native
28
- // model dialog so its bottom model bar reflects the selection.
29
- api.ui.dialog.clear();
30
- void Promise.resolve(applyNativeSelection(model, option.value.title)).then((applied) => {
31
- if (applied) {
32
- api.ui.toast({
33
- variant: "success",
34
- message: `Switched to ${option.value.providerName}/${option.value.title}.`,
35
- });
36
- return;
37
- }
38
- api.ui.toast({
39
- variant: "warning",
40
- message: `Selected ${option.value.providerName}/${option.value.title}; prompts will use it, but opencode's model bar may not have refreshed.`,
41
- });
42
- });
43
- } })));
44
- }
45
- //# sourceMappingURL=provider-model-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider-model-dialog.js","sourceRoot":"","sources":["../../../src/tui/components/provider-model-dialog.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAA2B,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAA4B,MAAM,oBAAoB,CAAC;AAUpF,MAAM,UAAU,uBAAuB,CACnC,GAAiB,EACjB,KAA+C,EAC/C,UAAkB,EAClB,UAA0C,EAAE;IAE5C,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,UAAU,CAAC;IACjE,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAE3F,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CACxB,KAAC,GAAG,CAAC,EAAE,CAAC,YAAY,IAChB,KAAK,EAAE,UAAU,YAAY,QAAQ,EACrC,WAAW,EAAE,UAAU,YAAY,SAAS,EAC5C,IAAI,QACJ,UAAU,EAAE,KAAK,EACjB,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,YAAY;YAChC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE;SACnD,CAAC,CAAC,EACH,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YACjB,MAAM,KAAK,GAAG;gBACV,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;gBACnC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;aAChC,CAAC;YAEF,gEAAgE;YAChE,sDAAsD;YACtD,IAAI,OAAO,CAAC,UAAU;gBAAE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;;gBAC7C,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,KAAK,CAAC,OAAO,EAAE,CAAC;YAEhB,kEAAkE;YAClE,+DAA+D;YAC/D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAEtB,KAAK,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnF,IAAI,OAAO,EAAE,CAAC;oBACV,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;wBACT,OAAO,EAAE,SAAS;wBAClB,OAAO,EAAE,eAAe,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG;qBAC7E,CAAC,CAAC;oBACH,OAAO;gBACX,CAAC;gBACD,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;oBACT,OAAO,EAAE,SAAS;oBAClB,OAAO,EAAE,YAAY,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,yEAAyE;iBAChJ,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,GACH,CACL,CAAC,CAAC;AACP,CAAC"}
@@ -1,24 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { normalizeAlias } from "../../core/accounts";
3
- import { renameAccountFromTui } from "../actions";
4
- function errorMessage(error) {
5
- return error instanceof Error && error.message ? error.message : "Failed to rename account";
6
- }
7
- export function openRenameDialog(api, state, providerID, alias) {
8
- api.ui.dialog.setSize("medium");
9
- api.ui.dialog.replace(() => (_jsx(api.ui.DialogPrompt, { title: "Rename account", placeholder: "account alias", description: () => (_jsxs("text", { fg: api.theme.current.textMuted, wrapMode: "none", children: ["Choose a new alias for ", providerID, "/", alias, "."] })), onCancel: () => api.ui.dialog.clear(), onConfirm: (value) => {
10
- const nextAlias = normalizeAlias(value);
11
- if (!nextAlias) {
12
- api.ui.toast({ variant: "error", message: "Alias is required" });
13
- return;
14
- }
15
- try {
16
- renameAccountFromTui(api, state, providerID, alias, nextAlias);
17
- api.ui.dialog.clear();
18
- }
19
- catch (error) {
20
- api.ui.toast({ variant: "error", message: errorMessage(error) });
21
- }
22
- } })));
23
- }
24
- //# sourceMappingURL=rename-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rename-dialog.js","sourceRoot":"","sources":["../../../src/tui/components/rename-dialog.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,SAAS,YAAY,CAAC,KAAc;IAChC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAiB,EAAE,KAAuB,EAAE,UAAkB,EAAE,KAAa;IAC1G,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CACxB,KAAC,GAAG,CAAC,EAAE,CAAC,YAAY,IAChB,KAAK,EAAC,gBAAgB,EACtB,WAAW,EAAC,eAAe,EAC3B,WAAW,EAAE,GAAG,EAAE,CAAC,CACf,gBAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,wCAC1B,UAAU,OAAG,KAAK,SACvC,CACV,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EACrC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACjE,OAAO;YACX,CAAC;YAED,IAAI,CAAC;gBACD,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACL,CAAC,GACH,CACL,CAAC,CAAC;AACP,CAAC"}
@@ -1,27 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { createSignal, For, onCleanup, Show } from "solid-js";
3
- import { listAccounts } from "../../core/accounts";
4
- import { getBalancingEnabled } from "../../core/priority";
5
- import { getUsageSnapshot } from "../../core/usage/store";
6
- import { UsageSnapshotBar } from "./usage-display";
7
- export function BalancerSidebar(props) {
8
- const theme = () => props.api.theme.current;
9
- const [accounts, setAccounts] = createSignal(listAccounts(props.state.db));
10
- const [usage, setUsage] = createSignal({});
11
- const [balancingEnabled, setBalancingEnabled] = createSignal(getBalancingEnabled(props.state.db));
12
- const refreshSidebar = () => {
13
- const nextAccounts = listAccounts(props.state.db);
14
- setAccounts(nextAccounts);
15
- setBalancingEnabled(getBalancingEnabled(props.state.db));
16
- setUsage(Object.fromEntries(nextAccounts.map((account) => [
17
- `${account.providerID}/${account.alias}`,
18
- getUsageSnapshot(props.state.db, account.providerID, account.alias),
19
- ])));
20
- };
21
- refreshSidebar();
22
- const timer = setInterval(refreshSidebar, 500);
23
- onCleanup(() => clearInterval(timer));
24
- const Button = (buttonProps) => (_jsx("box", { onMouseUp: buttonProps.onClick, paddingLeft: 0, paddingRight: 0, children: _jsxs("text", { fg: theme().accent, wrapMode: "none", truncate: true, children: ["[ ", buttonProps.label, " ]"] }) }));
25
- return (_jsxs("box", { flexDirection: "column", gap: 1, children: [_jsxs("box", { flexDirection: "column", gap: 0, children: [_jsx("text", { fg: theme().text, wrapMode: "none", children: "Balancer" }), _jsx("text", { fg: balancingEnabled() ? theme().success : theme().textMuted, wrapMode: "none", children: balancingEnabled() ? "ON" : "OFF" }), _jsx(Button, { label: "dashboard", onClick: () => props.openDashboard() }), _jsx("text", { fg: theme().textMuted, wrapMode: "none", children: "ctrl+b" })] }), _jsxs("box", { flexDirection: "column", gap: 0, children: [_jsx("text", { fg: theme().textMuted, wrapMode: "none", children: "Accounts" }), _jsx(Show, { when: accounts().length > 0, fallback: _jsx("text", { fg: theme().textMuted, wrapMode: "none", children: "none" }), children: _jsx(For, { each: accounts(), children: (account) => (_jsxs("box", { flexDirection: "column", gap: 0, onMouseUp: () => props.activateAccount(account.providerID, account.alias), children: [_jsxs("text", { fg: theme().text, wrapMode: "none", truncate: true, children: [_jsx("span", { style: { fg: theme().primary }, children: account.providerID }), "/", _jsx("span", { style: { fg: account.disabled ? theme().textMuted : theme().text }, children: account.alias }), " ", _jsxs("span", { style: { fg: theme().textMuted }, children: ["(", account.authType, ")"] })] }), _jsx(UsageSnapshotBar, { theme: theme(), snapshot: usage()[`${account.providerID}/${account.alias}`] })] })) }) })] })] }));
26
- }
27
- //# sourceMappingURL=sidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/tui/components/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- import { jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { createSignal, onCleanup } from "solid-js";
3
- import { getActiveAccount, getSelectedAccount } from "../../core/accounts";
4
- import { getBalancingEnabled, resolveActiveSelection } from "../../core/priority";
5
- import { getUsageSnapshot } from "../../core/usage/store";
6
- import { formatBalancerStatus } from "../status-format";
7
- import { formatUsageBar } from "../usage-format";
8
- import { snapshotPercent } from "./usage-display";
9
- export function BalancerStatusIndicator(props) {
10
- const [selected, setSelected] = createSignal();
11
- const [sessionActive, setSessionActive] = createSignal();
12
- const [balancing, setBalancing] = createSignal();
13
- const [usage, setUsage] = createSignal();
14
- const providerID = () => (typeof props.providerID === "function" ? props.providerID() : props.providerID);
15
- const refresh = () => {
16
- const currentProviderID = providerID();
17
- const nextSelected = getSelectedAccount(props.state.db);
18
- const nextSessionActive = currentProviderID ? getActiveAccount(props.state.db, currentProviderID) : undefined;
19
- const nextBalancing = getBalancingEnabled(props.state.db)
20
- ? resolveActiveSelection(props.state.db, undefined, currentProviderID)
21
- : undefined;
22
- const usageAccount = nextBalancing?.account ?? nextSelected ?? nextSessionActive;
23
- setSelected(nextSelected);
24
- setSessionActive(nextSessionActive);
25
- setBalancing(nextBalancing);
26
- setUsage(usageAccount
27
- ? formatUsageBar(snapshotPercent(getUsageSnapshot(props.state.db, usageAccount.providerID, usageAccount.alias)), 4)
28
- : undefined);
29
- };
30
- refresh();
31
- const timer = setInterval(refresh, 500);
32
- onCleanup(() => clearInterval(timer));
33
- const status = () => {
34
- return formatBalancerStatus({
35
- selected: selected(),
36
- sessionActive: sessionActive(),
37
- sessionProviderID: providerID(),
38
- balancing: balancing()
39
- ? {
40
- providerID: balancing().providerID,
41
- alias: balancing().account.alias,
42
- modelID: balancing().modelID,
43
- }
44
- : undefined,
45
- usage: usage(),
46
- });
47
- };
48
- const color = () => {
49
- if (balancing())
50
- return props.api.theme.current.success;
51
- if (providerID())
52
- return sessionActive() ? props.api.theme.current.success : props.api.theme.current.textMuted;
53
- if (!selected())
54
- return props.api.theme.current.textMuted;
55
- return props.api.theme.current.success;
56
- };
57
- return (_jsx("text", { fg: color(), wrapMode: "none", truncate: true, children: status() }));
58
- }
59
- //# sourceMappingURL=status-indicator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-indicator.js","sourceRoot":"","sources":["../../../src/tui/components/status-indicator.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { formatUsageBar, truncateMiddle } from "../usage-format";
3
- export function UsageBar(props) {
4
- const color = () => (props.muted || props.percent === undefined ? props.theme.textMuted : props.theme.primary);
5
- return (_jsxs("text", { fg: color(), wrapMode: "none", overflow: "hidden", truncate: true, children: [formatUsageBar(props.percent, 8), " ", _jsx("span", { style: { fg: props.theme.textMuted }, children: truncateMiddle(props.label, 34) })] }));
6
- }
7
- //# sourceMappingURL=usage-bar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-bar.js","sourceRoot":"","sources":["../../../src/tui/components/usage-bar.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,UAAU,QAAQ,CAAC,KAAmF;IACxG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/G,OAAO,CACH,gBAAM,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBACxD,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,OAAE,eAAM,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,YAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,GAAQ,IACpH,CACV,CAAC;AACN,CAAC"}
@@ -1,32 +0,0 @@
1
- import { jsx as _jsx } from "@opentui/solid/jsx-runtime";
2
- import { UsageBar } from "./usage-bar";
3
- export function snapshotPercent(snapshot) {
4
- if (!snapshot || snapshot.confidence === "unavailable")
5
- return undefined;
6
- if (snapshot.usedPercent !== undefined)
7
- return snapshot.usedPercent;
8
- if (snapshot.usedTokens !== undefined && snapshot.remainingTokens !== undefined) {
9
- const total = snapshot.usedTokens + snapshot.remainingTokens;
10
- if (total > 0)
11
- return (snapshot.usedTokens / total) * 100;
12
- }
13
- return undefined;
14
- }
15
- export function snapshotLabel(snapshot) {
16
- if (!snapshot)
17
- return "usage unavailable";
18
- if (snapshot.confidence === "unavailable")
19
- return snapshot.message;
20
- const parts = [];
21
- if (snapshot.usedTokens !== undefined)
22
- parts.push(`used ${snapshot.usedTokens}`);
23
- if (snapshot.remainingTokens !== undefined)
24
- parts.push(`remaining ${snapshot.remainingTokens}`);
25
- if (snapshot.planName)
26
- parts.push(snapshot.planName);
27
- return parts.length > 0 ? parts.join(" · ") : snapshot.message;
28
- }
29
- export function UsageSnapshotBar(props) {
30
- return _jsx(UsageBar, { theme: props.theme, percent: snapshotPercent(props.snapshot), label: snapshotLabel(props.snapshot), muted: props.muted });
31
- }
32
- //# sourceMappingURL=usage-display.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-display.js","sourceRoot":"","sources":["../../../src/tui/components/usage-display.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,UAAU,eAAe,CAAC,QAA2C;IACvE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IACzE,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,WAAW,CAAC;IACpE,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC;QAC7D,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAA2C;IACrE,IAAI,CAAC,QAAQ;QAAE,OAAO,mBAAmB,CAAC;IAC1C,IAAI,QAAQ,CAAC,UAAU,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACjF,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IAChG,IAAI,QAAQ,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAoF;IACjH,OAAO,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,CAAC;AAChJ,CAAC"}