@thelioo/opencode-balancer 0.1.8 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/INSTALL.txt +53 -25
  2. package/README.md +95 -51
  3. package/dist/core/accounts.ts +404 -0
  4. package/dist/core/database.ts +67 -0
  5. package/dist/core/events.ts +75 -0
  6. package/dist/core/native-auth-suppression.ts +36 -0
  7. package/dist/core/native-connect.ts +31 -0
  8. package/dist/core/path.ts +34 -0
  9. package/dist/core/pending.ts +351 -0
  10. package/dist/core/priority.ts +193 -0
  11. package/dist/core/schema.ts +439 -0
  12. package/dist/core/time.ts +3 -0
  13. package/dist/core/types.ts +72 -0
  14. package/dist/core/usage/index.ts +23 -0
  15. package/dist/core/usage/providers/copilot.ts +243 -0
  16. package/dist/core/usage/providers/openai.ts +179 -0
  17. package/dist/core/usage/redact.ts +80 -0
  18. package/dist/core/usage/store.ts +66 -0
  19. package/dist/core/usage/types.ts +24 -0
  20. package/dist/index.js +173 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/server/auth-watcher.ts +318 -0
  23. package/dist/server/commands.ts +58 -0
  24. package/dist/server/fetch-patch.ts +162 -0
  25. package/dist/server/index.ts +134 -0
  26. package/dist/server/native.ts +49 -0
  27. package/dist/server/request-balancer.ts +67 -0
  28. package/dist/tui/actions.ts +176 -112
  29. package/dist/tui/balancer-bar-sync.ts +55 -45
  30. package/dist/tui/components/alias-dialog.tsx +71 -56
  31. package/dist/tui/components/dashboard.tsx +530 -358
  32. package/dist/tui/components/priority-screen.tsx +389 -267
  33. package/dist/tui/components/provider-model-dialog.tsx +71 -64
  34. package/dist/tui/components/rename-dialog.tsx +35 -28
  35. package/dist/tui/components/sidebar.tsx +103 -79
  36. package/dist/tui/components/status-indicator.tsx +78 -59
  37. package/dist/tui/components/usage-bar.tsx +18 -7
  38. package/dist/tui/components/usage-display.tsx +32 -16
  39. package/dist/tui/connect.ts +104 -73
  40. package/dist/tui/dashboard-keys.ts +53 -41
  41. package/dist/tui/native-model-apply.ts +45 -36
  42. package/dist/tui/priority-keys.ts +44 -36
  43. package/dist/tui/provider-models.ts +32 -25
  44. package/dist/tui/responsive.ts +10 -7
  45. package/dist/tui/selected-account-bar-sync.ts +23 -23
  46. package/dist/tui/selection-colors.ts +38 -30
  47. package/dist/tui/state.ts +61 -44
  48. package/dist/tui/status-format.ts +24 -20
  49. package/dist/tui/tui.js +165 -153
  50. package/dist/tui/tui.js.map +1 -1
  51. package/dist/tui/tui.tsx +194 -144
  52. package/dist/tui/usage-auto-refresh.ts +52 -45
  53. package/dist/tui/usage-format.ts +9 -9
  54. package/package.json +61 -52
  55. package/dist/core/accounts.d.ts +0 -14
  56. package/dist/core/accounts.js +0 -260
  57. package/dist/core/accounts.js.map +0 -1
  58. package/dist/core/database.d.ts +0 -4
  59. package/dist/core/database.js +0 -69
  60. package/dist/core/database.js.map +0 -1
  61. package/dist/core/events.d.ts +0 -18
  62. package/dist/core/events.js +0 -39
  63. package/dist/core/events.js.map +0 -1
  64. package/dist/core/native-auth-suppression.d.ts +0 -3
  65. package/dist/core/native-auth-suppression.js +0 -19
  66. package/dist/core/native-auth-suppression.js.map +0 -1
  67. package/dist/core/native-connect.d.ts +0 -4
  68. package/dist/core/native-connect.js +0 -19
  69. package/dist/core/native-connect.js.map +0 -1
  70. package/dist/core/path.d.ts +0 -4
  71. package/dist/core/path.js +0 -26
  72. package/dist/core/path.js.map +0 -1
  73. package/dist/core/pending.d.ts +0 -9
  74. package/dist/core/pending.js +0 -237
  75. package/dist/core/pending.js.map +0 -1
  76. package/dist/core/priority.d.ts +0 -20
  77. package/dist/core/priority.js +0 -120
  78. package/dist/core/priority.js.map +0 -1
  79. package/dist/core/schema.d.ts +0 -2
  80. package/dist/core/schema.js +0 -265
  81. package/dist/core/schema.js.map +0 -1
  82. package/dist/core/time.d.ts +0 -1
  83. package/dist/core/time.js +0 -4
  84. package/dist/core/time.js.map +0 -1
  85. package/dist/core/types.d.ts +0 -59
  86. package/dist/core/types.js +0 -2
  87. package/dist/core/types.js.map +0 -1
  88. package/dist/core/usage/index.d.ts +0 -4
  89. package/dist/core/usage/index.js +0 -16
  90. package/dist/core/usage/index.js.map +0 -1
  91. package/dist/core/usage/providers/copilot.d.ts +0 -2
  92. package/dist/core/usage/providers/copilot.js +0 -169
  93. package/dist/core/usage/providers/copilot.js.map +0 -1
  94. package/dist/core/usage/providers/openai.d.ts +0 -2
  95. package/dist/core/usage/providers/openai.js +0 -133
  96. package/dist/core/usage/providers/openai.js.map +0 -1
  97. package/dist/core/usage/redact.d.ts +0 -3
  98. package/dist/core/usage/redact.js +0 -67
  99. package/dist/core/usage/redact.js.map +0 -1
  100. package/dist/core/usage/store.d.ts +0 -4
  101. package/dist/core/usage/store.js +0 -31
  102. package/dist/core/usage/store.js.map +0 -1
  103. package/dist/core/usage/types.d.ts +0 -21
  104. package/dist/core/usage/types.js +0 -2
  105. package/dist/core/usage/types.js.map +0 -1
  106. package/dist/index.d.ts +0 -5
  107. package/dist/server/auth-watcher.d.ts +0 -32
  108. package/dist/server/auth-watcher.js +0 -227
  109. package/dist/server/auth-watcher.js.map +0 -1
  110. package/dist/server/commands.d.ts +0 -2
  111. package/dist/server/commands.js +0 -46
  112. package/dist/server/commands.js.map +0 -1
  113. package/dist/server/fetch-patch.d.ts +0 -3
  114. package/dist/server/fetch-patch.js +0 -118
  115. package/dist/server/fetch-patch.js.map +0 -1
  116. package/dist/server/index.d.ts +0 -8
  117. package/dist/server/index.js +0 -94
  118. package/dist/server/index.js.map +0 -1
  119. package/dist/server/native.d.ts +0 -6
  120. package/dist/server/native.js +0 -35
  121. package/dist/server/native.js.map +0 -1
  122. package/dist/server/request-balancer.d.ts +0 -16
  123. package/dist/server/request-balancer.js +0 -43
  124. package/dist/server/request-balancer.js.map +0 -1
  125. package/dist/tui/actions.d.ts +0 -41
  126. package/dist/tui/actions.js +0 -92
  127. package/dist/tui/actions.js.map +0 -1
  128. package/dist/tui/balancer-bar-sync.d.ts +0 -19
  129. package/dist/tui/balancer-bar-sync.js +0 -45
  130. package/dist/tui/balancer-bar-sync.js.map +0 -1
  131. package/dist/tui/components/alias-dialog.d.ts +0 -4
  132. package/dist/tui/components/dashboard.d.ts +0 -12
  133. package/dist/tui/components/priority-screen.d.ts +0 -9
  134. package/dist/tui/components/provider-model-dialog.d.ts +0 -14
  135. package/dist/tui/components/rename-dialog.d.ts +0 -4
  136. package/dist/tui/components/sidebar.d.ts +0 -10
  137. package/dist/tui/components/status-indicator.d.ts +0 -9
  138. package/dist/tui/components/usage-bar.d.ts +0 -8
  139. package/dist/tui/components/usage-display.d.ts +0 -10
  140. package/dist/tui/connect.d.ts +0 -30
  141. package/dist/tui/connect.js +0 -75
  142. package/dist/tui/connect.js.map +0 -1
  143. package/dist/tui/dashboard-keys.d.ts +0 -45
  144. package/dist/tui/dashboard-keys.js +0 -44
  145. package/dist/tui/dashboard-keys.js.map +0 -1
  146. package/dist/tui/native-model-apply.d.ts +0 -21
  147. package/dist/tui/native-model-apply.js +0 -53
  148. package/dist/tui/native-model-apply.js.map +0 -1
  149. package/dist/tui/priority-keys.d.ts +0 -40
  150. package/dist/tui/priority-keys.js +0 -38
  151. package/dist/tui/priority-keys.js.map +0 -1
  152. package/dist/tui/provider-models.d.ts +0 -19
  153. package/dist/tui/provider-models.js +0 -17
  154. package/dist/tui/provider-models.js.map +0 -1
  155. package/dist/tui/responsive.d.ts +0 -9
  156. package/dist/tui/responsive.js +0 -13
  157. package/dist/tui/responsive.js.map +0 -1
  158. package/dist/tui/selected-account-bar-sync.d.ts +0 -10
  159. package/dist/tui/selected-account-bar-sync.js +0 -26
  160. package/dist/tui/selected-account-bar-sync.js.map +0 -1
  161. package/dist/tui/selection-colors.d.ts +0 -10
  162. package/dist/tui/selection-colors.js +0 -38
  163. package/dist/tui/selection-colors.js.map +0 -1
  164. package/dist/tui/state.d.ts +0 -14
  165. package/dist/tui/state.js +0 -46
  166. package/dist/tui/state.js.map +0 -1
  167. package/dist/tui/status-format.d.ts +0 -15
  168. package/dist/tui/status-format.js +0 -17
  169. package/dist/tui/status-format.js.map +0 -1
  170. package/dist/tui/tui.d.ts +0 -7
  171. package/dist/tui/usage-auto-refresh.d.ts +0 -16
  172. package/dist/tui/usage-auto-refresh.js +0 -46
  173. package/dist/tui/usage-auto-refresh.js.map +0 -1
  174. package/dist/tui/usage-format.d.ts +0 -2
  175. package/dist/tui/usage-format.js +0 -17
  176. package/dist/tui/usage-format.js.map +0 -1
@@ -2,71 +2,86 @@
2
2
 
3
3
  import type { TuiPluginApi } from "@opencode-ai/plugin/tui";
4
4
  import { normalizeAlias } from "../../core/accounts";
5
- import { claimPendingPrompt, pendingPromptGroupID, releasePendingPrompt } from "../../core/pending";
5
+ import {
6
+ claimPendingPrompt,
7
+ pendingPromptGroupID,
8
+ releasePendingPrompt,
9
+ } from "../../core/pending";
6
10
  import { savePendingAlias } from "../actions";
7
11
  import type { BalancerTuiState } from "../state";
8
12
 
9
13
  function errorMessage(error: unknown) {
10
- return error instanceof Error && error.message ? error.message : "Failed to save alias";
14
+ return error instanceof Error && error.message
15
+ ? error.message
16
+ : "Failed to save alias";
11
17
  }
12
18
 
13
19
  const openPendingDialogs = new Set<string>();
14
20
 
15
- export function openAliasDialog(api: TuiPluginApi, state: BalancerTuiState, pendingID: string) {
16
- const dialogID = pendingPromptGroupID(state.db, pendingID) ?? pendingID;
17
- if (openPendingDialogs.has(dialogID)) {
18
- if ("open" in api.ui.dialog && !api.ui.dialog.open) openPendingDialogs.delete(dialogID);
19
- else return false;
20
- }
21
- let claimed = claimPendingPrompt(state.db, pendingID);
22
- if (!claimed) {
23
- releasePendingPrompt(state.db, pendingID);
24
- claimed = claimPendingPrompt(state.db, pendingID);
25
- }
26
- if (!claimed) return false;
27
- const pending = state.pending().find((item) => item.id === pendingID) ?? claimed;
28
- const providerID = pending?.providerID ?? "provider";
29
- openPendingDialogs.add(dialogID);
21
+ export function openAliasDialog(
22
+ api: TuiPluginApi,
23
+ state: BalancerTuiState,
24
+ pendingID: string,
25
+ ) {
26
+ const dialogID = pendingPromptGroupID(state.db, pendingID) ?? pendingID;
27
+ if (openPendingDialogs.has(dialogID)) {
28
+ if ("open" in api.ui.dialog && !api.ui.dialog.open)
29
+ openPendingDialogs.delete(dialogID);
30
+ else return false;
31
+ }
32
+ let claimed = claimPendingPrompt(state.db, pendingID);
33
+ if (!claimed) {
34
+ releasePendingPrompt(state.db, pendingID);
35
+ claimed = claimPendingPrompt(state.db, pendingID);
36
+ }
37
+ if (!claimed) return false;
38
+ const pending =
39
+ state.pending().find((item) => item.id === pendingID) ?? claimed;
40
+ const providerID = pending?.providerID ?? "provider";
41
+ openPendingDialogs.add(dialogID);
30
42
 
31
- const close = () => {
32
- openPendingDialogs.delete(dialogID);
33
- api.ui.dialog.clear();
34
- };
43
+ const close = () => {
44
+ openPendingDialogs.delete(dialogID);
45
+ api.ui.dialog.clear();
46
+ };
35
47
 
36
- try {
37
- api.ui.dialog.setSize("medium");
38
- api.ui.dialog.replace(() => (
39
- <api.ui.DialogPrompt
40
- title="Save pending connection"
41
- placeholder="account alias"
42
- description={() => (
43
- <text fg={api.theme.current.textMuted} wrapMode="none">
44
- Choose an alias for {providerID}/{pending?.authType ?? "auth"}.
45
- </text>
46
- )}
47
- onCancel={close}
48
- onConfirm={async (value) => {
49
- const alias = normalizeAlias(value);
50
- if (!alias) {
51
- api.ui.toast({ variant: "error", message: "Alias is required" });
52
- return;
53
- }
48
+ try {
49
+ api.ui.dialog.setSize("medium");
50
+ api.ui.dialog.replace(() => (
51
+ <api.ui.DialogPrompt
52
+ description={() => (
53
+ <text fg={api.theme.current.textMuted} wrapMode="none">
54
+ Choose an alias for {providerID}/{pending?.authType ?? "auth"}.
55
+ </text>
56
+ )}
57
+ onCancel={close}
58
+ onConfirm={async (value) => {
59
+ const alias = normalizeAlias(value);
60
+ if (!alias) {
61
+ api.ui.toast({ message: "Alias is required", variant: "error" });
62
+ return;
63
+ }
54
64
 
55
- try {
56
- const account = savePendingAlias(state, pendingID, alias);
57
- close();
58
- api.ui.toast({ variant: "success", message: `Saved ${account.providerID}/${account.alias}` });
59
- } catch (error) {
60
- openPendingDialogs.delete(dialogID);
61
- api.ui.toast({ variant: "error", message: errorMessage(error) });
62
- }
63
- }}
64
- />
65
- ));
66
- return true;
67
- } catch {
68
- openPendingDialogs.delete(dialogID);
69
- releasePendingPrompt(state.db, pendingID);
70
- return false;
71
- }
65
+ try {
66
+ const account = savePendingAlias(state, pendingID, alias);
67
+ close();
68
+ api.ui.toast({
69
+ message: `Saved ${account.providerID}/${account.alias}`,
70
+ variant: "success",
71
+ });
72
+ } catch (error) {
73
+ openPendingDialogs.delete(dialogID);
74
+ api.ui.toast({ message: errorMessage(error), variant: "error" });
75
+ }
76
+ }}
77
+ placeholder="account alias"
78
+ title="Save pending connection"
79
+ />
80
+ ));
81
+ return true;
82
+ } catch {
83
+ openPendingDialogs.delete(dialogID);
84
+ releasePendingPrompt(state.db, pendingID);
85
+ return false;
86
+ }
72
87
  }