@chrysb/alphaclaw 0.8.1 → 0.8.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +33 -24
  2. package/bin/alphaclaw.js +13 -2
  3. package/lib/public/css/chat.css +426 -0
  4. package/lib/public/css/explorer.css +101 -0
  5. package/lib/public/css/tailwind.generated.css +1 -0
  6. package/lib/public/css/tailwind.input.css +3 -0
  7. package/lib/public/css/theme.css +28 -0
  8. package/lib/public/css/vendor/xterm.css +218 -0
  9. package/lib/public/dist/app.bundle.js +10706 -0
  10. package/lib/public/dist/chunks/addon-fit-W4YZGRNV.js +1 -0
  11. package/lib/public/dist/chunks/chunk-72ZECFVW.js +1 -0
  12. package/lib/public/dist/chunks/xterm-KOX4YMOF.js +9 -0
  13. package/lib/public/js/app.js +38 -4
  14. package/lib/public/js/components/action-button.js +8 -8
  15. package/lib/public/js/components/add-channel-menu.js +2 -2
  16. package/lib/public/js/components/agent-send-modal.js +6 -6
  17. package/lib/public/js/components/agents-tab/agent-bindings-section/channel-item-trailing.js +7 -7
  18. package/lib/public/js/components/agents-tab/agent-bindings-section/index.js +3 -3
  19. package/lib/public/js/components/agents-tab/agent-bindings-section/use-agent-bindings.js +1 -1
  20. package/lib/public/js/components/agents-tab/agent-bindings-section/use-channel-items.js +4 -4
  21. package/lib/public/js/components/agents-tab/agent-detail-panel.js +5 -5
  22. package/lib/public/js/components/agents-tab/agent-identity-section.js +18 -18
  23. package/lib/public/js/components/agents-tab/agent-overview/index.js +2 -2
  24. package/lib/public/js/components/agents-tab/agent-overview/manage-card.js +2 -2
  25. package/lib/public/js/components/agents-tab/agent-overview/model-card.js +8 -8
  26. package/lib/public/js/components/agents-tab/agent-overview/tools-card.js +5 -5
  27. package/lib/public/js/components/agents-tab/agent-overview/use-model-card.js +1 -1
  28. package/lib/public/js/components/agents-tab/agent-overview/use-workspace-card.js +1 -1
  29. package/lib/public/js/components/agents-tab/agent-overview/workspace-card.js +4 -4
  30. package/lib/public/js/components/agents-tab/agent-pairing-section.js +4 -4
  31. package/lib/public/js/components/agents-tab/agent-tools/index.js +5 -5
  32. package/lib/public/js/components/agents-tab/agent-tools/use-agent-tools.js +1 -1
  33. package/lib/public/js/components/agents-tab/create-agent-modal.js +13 -13
  34. package/lib/public/js/components/agents-tab/create-channel-modal.js +34 -34
  35. package/lib/public/js/components/agents-tab/delete-agent-dialog.js +3 -3
  36. package/lib/public/js/components/agents-tab/edit-agent-modal.js +9 -9
  37. package/lib/public/js/components/agents-tab/index.js +3 -3
  38. package/lib/public/js/components/agents-tab/use-agents.js +1 -1
  39. package/lib/public/js/components/badge.js +6 -6
  40. package/lib/public/js/components/channel-account-status-badge.js +2 -2
  41. package/lib/public/js/components/channel-operations-panel.js +2 -2
  42. package/lib/public/js/components/channels.js +9 -9
  43. package/lib/public/js/components/confirm-dialog.js +5 -5
  44. package/lib/public/js/components/credentials-modal.js +22 -22
  45. package/lib/public/js/components/cron-tab/cron-calendar.js +6 -6
  46. package/lib/public/js/components/cron-tab/cron-insights-panel.js +10 -10
  47. package/lib/public/js/components/cron-tab/cron-job-detail.js +4 -4
  48. package/lib/public/js/components/cron-tab/cron-job-list.js +4 -4
  49. package/lib/public/js/components/cron-tab/cron-job-settings-card.js +15 -15
  50. package/lib/public/js/components/cron-tab/cron-job-trends-panel.js +5 -5
  51. package/lib/public/js/components/cron-tab/cron-job-usage.js +16 -16
  52. package/lib/public/js/components/cron-tab/cron-overview.js +10 -10
  53. package/lib/public/js/components/cron-tab/cron-prompt-editor.js +3 -3
  54. package/lib/public/js/components/cron-tab/cron-run-history-panel.js +39 -39
  55. package/lib/public/js/components/cron-tab/cron-runs-trend-card.js +4 -4
  56. package/lib/public/js/components/cron-tab/index.js +5 -5
  57. package/lib/public/js/components/cron-tab/use-cron-tab.js +1 -1
  58. package/lib/public/js/components/device-pairings.js +12 -12
  59. package/lib/public/js/components/doctor/findings-list.js +22 -22
  60. package/lib/public/js/components/doctor/fix-card-modal.js +2 -2
  61. package/lib/public/js/components/doctor/general-warning.js +5 -5
  62. package/lib/public/js/components/doctor/index.js +26 -26
  63. package/lib/public/js/components/doctor/summary-cards.js +5 -5
  64. package/lib/public/js/components/envars.js +16 -16
  65. package/lib/public/js/components/features.js +4 -4
  66. package/lib/public/js/components/file-tree.js +4 -4
  67. package/lib/public/js/components/file-viewer/diff-viewer.js +2 -2
  68. package/lib/public/js/components/file-viewer/editor-surface.js +2 -2
  69. package/lib/public/js/components/file-viewer/frontmatter-panel.js +2 -2
  70. package/lib/public/js/components/file-viewer/index.js +3 -3
  71. package/lib/public/js/components/file-viewer/markdown-split-view.js +2 -2
  72. package/lib/public/js/components/file-viewer/media-preview.js +2 -2
  73. package/lib/public/js/components/file-viewer/scroll-sync.js +1 -1
  74. package/lib/public/js/components/file-viewer/sqlite-viewer.js +2 -2
  75. package/lib/public/js/components/file-viewer/status-banners.js +2 -2
  76. package/lib/public/js/components/file-viewer/toolbar.js +2 -2
  77. package/lib/public/js/components/file-viewer/use-editor-line-number-sync.js +1 -1
  78. package/lib/public/js/components/file-viewer/use-editor-selection-restore.js +1 -1
  79. package/lib/public/js/components/file-viewer/use-file-diff.js +1 -1
  80. package/lib/public/js/components/file-viewer/use-file-loader.js +1 -1
  81. package/lib/public/js/components/file-viewer/use-file-viewer-draft-sync.js +1 -1
  82. package/lib/public/js/components/file-viewer/use-file-viewer-hotkeys.js +1 -1
  83. package/lib/public/js/components/file-viewer/use-file-viewer.js +2 -2
  84. package/lib/public/js/components/gateway.js +12 -12
  85. package/lib/public/js/components/general/index.js +7 -7
  86. package/lib/public/js/components/general/use-general-tab.js +1 -1
  87. package/lib/public/js/components/global-restart-banner.js +2 -2
  88. package/lib/public/js/components/google/account-row.js +7 -7
  89. package/lib/public/js/components/google/add-account-modal.js +8 -8
  90. package/lib/public/js/components/google/gmail-setup-wizard.js +24 -24
  91. package/lib/public/js/components/google/gmail-watch-toggle.js +5 -5
  92. package/lib/public/js/components/google/index.js +6 -6
  93. package/lib/public/js/components/google/use-gmail-watch.js +1 -1
  94. package/lib/public/js/components/google/use-google-accounts.js +1 -1
  95. package/lib/public/js/components/icons.js +2 -2
  96. package/lib/public/js/components/info-tooltip.js +3 -3
  97. package/lib/public/js/components/loading-spinner.js +2 -2
  98. package/lib/public/js/components/modal-shell.js +5 -5
  99. package/lib/public/js/components/models-tab/index.js +11 -11
  100. package/lib/public/js/components/models-tab/model-picker.js +9 -9
  101. package/lib/public/js/components/models-tab/provider-auth-card.js +12 -12
  102. package/lib/public/js/components/models-tab/use-models.js +1 -1
  103. package/lib/public/js/components/models.js +18 -18
  104. package/lib/public/js/components/nodes-tab/browser-attach/index.js +5 -5
  105. package/lib/public/js/components/nodes-tab/connected-nodes/index.js +34 -32
  106. package/lib/public/js/components/nodes-tab/connected-nodes/use-connected-nodes-card.js +18 -3
  107. package/lib/public/js/components/nodes-tab/exec-allowlist/index.js +10 -10
  108. package/lib/public/js/components/nodes-tab/exec-allowlist/use-exec-allowlist.js +1 -1
  109. package/lib/public/js/components/nodes-tab/exec-config/index.js +13 -13
  110. package/lib/public/js/components/nodes-tab/exec-config/use-exec-config.js +1 -1
  111. package/lib/public/js/components/nodes-tab/index.js +2 -2
  112. package/lib/public/js/components/nodes-tab/setup-wizard/index.js +14 -14
  113. package/lib/public/js/components/nodes-tab/setup-wizard/use-setup-wizard.js +1 -1
  114. package/lib/public/js/components/nodes-tab/use-nodes-tab.js +1 -1
  115. package/lib/public/js/components/onboarding/use-welcome-codex.js +1 -1
  116. package/lib/public/js/components/onboarding/use-welcome-pairing.js +1 -1
  117. package/lib/public/js/components/onboarding/use-welcome-storage.js +1 -1
  118. package/lib/public/js/components/onboarding/welcome-config.js +3 -3
  119. package/lib/public/js/components/onboarding/welcome-form-step.js +34 -34
  120. package/lib/public/js/components/onboarding/welcome-header.js +2 -2
  121. package/lib/public/js/components/onboarding/welcome-import-step.js +22 -22
  122. package/lib/public/js/components/onboarding/welcome-pairing-step.js +15 -15
  123. package/lib/public/js/components/onboarding/welcome-placeholder-review-step.js +7 -7
  124. package/lib/public/js/components/onboarding/welcome-pre-step.js +9 -9
  125. package/lib/public/js/components/onboarding/welcome-secret-review-step.js +15 -15
  126. package/lib/public/js/components/onboarding/welcome-setup-step.js +8 -8
  127. package/lib/public/js/components/overflow-menu.js +3 -3
  128. package/lib/public/js/components/page-header.js +2 -2
  129. package/lib/public/js/components/pairings.js +14 -14
  130. package/lib/public/js/components/pane-shell.js +2 -2
  131. package/lib/public/js/components/pill-tabs.js +4 -4
  132. package/lib/public/js/components/pop-actions.js +3 -3
  133. package/lib/public/js/components/providers.js +17 -17
  134. package/lib/public/js/components/routes/agents-route.js +2 -2
  135. package/lib/public/js/components/routes/browse-route.js +2 -2
  136. package/lib/public/js/components/routes/chat-route.js +1094 -0
  137. package/lib/public/js/components/routes/cron-route.js +2 -2
  138. package/lib/public/js/components/routes/doctor-route.js +2 -2
  139. package/lib/public/js/components/routes/envars-route.js +2 -2
  140. package/lib/public/js/components/routes/general-route.js +2 -2
  141. package/lib/public/js/components/routes/index.js +1 -0
  142. package/lib/public/js/components/routes/models-route.js +2 -2
  143. package/lib/public/js/components/routes/nodes-route.js +2 -2
  144. package/lib/public/js/components/routes/providers-route.js +2 -2
  145. package/lib/public/js/components/routes/route-redirect.js +2 -2
  146. package/lib/public/js/components/routes/telegram-route.js +2 -2
  147. package/lib/public/js/components/routes/usage-route.js +2 -2
  148. package/lib/public/js/components/routes/watchdog-route.js +2 -2
  149. package/lib/public/js/components/routes/webhooks-route.js +2 -2
  150. package/lib/public/js/components/scope-picker.js +9 -9
  151. package/lib/public/js/components/secret-input.js +5 -5
  152. package/lib/public/js/components/segmented-control.js +2 -2
  153. package/lib/public/js/components/session-select-field.js +7 -7
  154. package/lib/public/js/components/sidebar-git-panel.js +3 -3
  155. package/lib/public/js/components/sidebar.js +55 -3
  156. package/lib/public/js/components/summary-stat-card.js +3 -3
  157. package/lib/public/js/components/telegram-workspace/index.js +10 -10
  158. package/lib/public/js/components/telegram-workspace/manage.js +36 -36
  159. package/lib/public/js/components/telegram-workspace/onboarding.js +73 -73
  160. package/lib/public/js/components/toast.js +8 -8
  161. package/lib/public/js/components/toggle-switch.js +2 -2
  162. package/lib/public/js/components/tooltip.js +5 -5
  163. package/lib/public/js/components/update-action-button.js +2 -2
  164. package/lib/public/js/components/update-modal.js +9 -9
  165. package/lib/public/js/components/usage-tab/constants.js +2 -2
  166. package/lib/public/js/components/usage-tab/index.js +3 -3
  167. package/lib/public/js/components/usage-tab/overview-section.js +15 -15
  168. package/lib/public/js/components/usage-tab/sessions-section.js +19 -19
  169. package/lib/public/js/components/usage-tab/use-usage-tab.js +2 -2
  170. package/lib/public/js/components/watchdog-tab/console/index.js +22 -8
  171. package/lib/public/js/components/watchdog-tab/console/use-console.js +28 -2
  172. package/lib/public/js/components/watchdog-tab/helpers.js +35 -6
  173. package/lib/public/js/components/watchdog-tab/incidents/index.js +6 -6
  174. package/lib/public/js/components/watchdog-tab/incidents/use-incidents.js +1 -1
  175. package/lib/public/js/components/watchdog-tab/index.js +4 -2
  176. package/lib/public/js/components/watchdog-tab/resource-bar.js +5 -5
  177. package/lib/public/js/components/watchdog-tab/resources/index.js +14 -3
  178. package/lib/public/js/components/watchdog-tab/resources/use-resources.js +1 -1
  179. package/lib/public/js/components/watchdog-tab/settings/index.js +97 -30
  180. package/lib/public/js/components/watchdog-tab/settings/use-settings.js +1 -1
  181. package/lib/public/js/components/watchdog-tab/terminal/index.js +3 -3
  182. package/lib/public/js/components/watchdog-tab/terminal/use-terminal.js +41 -5
  183. package/lib/public/js/components/watchdog-tab/use-watchdog-tab.js +2 -0
  184. package/lib/public/js/components/webhooks/create-webhook-modal/index.js +17 -17
  185. package/lib/public/js/components/webhooks/helpers.js +3 -3
  186. package/lib/public/js/components/webhooks/index.js +4 -4
  187. package/lib/public/js/components/webhooks/request-history/index.js +14 -14
  188. package/lib/public/js/components/webhooks/request-history/use-request-history.js +1 -1
  189. package/lib/public/js/components/webhooks/webhook-detail/index.js +41 -41
  190. package/lib/public/js/components/webhooks/webhook-detail/use-webhook-detail.js +1 -1
  191. package/lib/public/js/components/webhooks/webhook-list/index.js +11 -11
  192. package/lib/public/js/components/webhooks/webhook-list/use-webhook-list.js +1 -1
  193. package/lib/public/js/components/welcome/index.js +3 -3
  194. package/lib/public/js/components/welcome/use-welcome.js +10 -10
  195. package/lib/public/js/hooks/use-app-shell-controller.js +1 -1
  196. package/lib/public/js/hooks/use-app-shell-ui.js +1 -1
  197. package/lib/public/js/hooks/use-browse-navigation.js +14 -3
  198. package/lib/public/js/hooks/use-cached-fetch.js +1 -1
  199. package/lib/public/js/hooks/use-destination-session-selection.js +1 -1
  200. package/lib/public/js/hooks/use-hash-location.js +1 -1
  201. package/lib/public/js/hooks/useAgentSessions.js +1 -1
  202. package/lib/public/js/hooks/usePolling.js +1 -1
  203. package/lib/public/js/lib/app-navigation.js +1 -0
  204. package/lib/public/js/lib/storage-keys.js +3 -0
  205. package/lib/public/js/tailwind-config.js +39 -0
  206. package/lib/public/login.html +3 -18
  207. package/lib/public/setup.html +3 -18
  208. package/lib/server/auth-profiles.js +1 -1
  209. package/lib/server/chat-ws.js +835 -0
  210. package/lib/server/init/register-server-routes.js +2 -0
  211. package/lib/server/onboarding/validation.js +15 -10
  212. package/lib/server/routes/nodes.js +10 -2
  213. package/lib/server/routes/pairings.js +5 -1
  214. package/lib/server/routes/system.js +5 -0
  215. package/lib/server/routes/watchdog.js +15 -0
  216. package/lib/server/watchdog-terminal-ws.js +14 -1
  217. package/lib/server/watchdog.js +137 -51
  218. package/lib/server.js +38 -0
  219. package/package.json +14 -3
@@ -1,4 +1,4 @@
1
- import { useCallback } from "https://esm.sh/preact/hooks";
1
+ import { useCallback } from "preact/hooks";
2
2
  import { usePolling } from "../../../hooks/usePolling.js";
3
3
  import { fetchWebhooks } from "../../../lib/api.js";
4
4
 
@@ -1,5 +1,5 @@
1
- import { h } from "https://esm.sh/preact";
2
- import htm from "https://esm.sh/htm";
1
+ import { h } from "preact";
2
+ import htm from "htm";
3
3
  import { kWelcomeGroups } from "../onboarding/welcome-config.js";
4
4
  import { WelcomePreStep } from "../onboarding/welcome-pre-step.js";
5
5
  import { WelcomeImportStep } from "../onboarding/welcome-import-step.js";
@@ -114,7 +114,7 @@ export const Welcome = ({ onComplete, acVersion }) => {
114
114
  </div>
115
115
  ${acVersion
116
116
  ? html`
117
- <div class="text-center text-xs text-gray-500 font-mono mt-8">
117
+ <div class="text-center text-xs text-fg-muted font-mono mt-8">
118
118
  v${acVersion}
119
119
  </div>
120
120
  `
@@ -1,4 +1,4 @@
1
- import { useEffect, useState } from "https://esm.sh/preact/hooks";
1
+ import { useEffect, useState } from "preact/hooks";
2
2
  import {
3
3
  runOnboard,
4
4
  verifyGithubOnboardingRepo,
@@ -8,8 +8,10 @@ import {
8
8
  } from "../../lib/api.js";
9
9
  import {
10
10
  getModelProvider,
11
+ getAuthProviderFromModelProvider,
11
12
  getFeaturedModels,
12
13
  getVisibleAiFieldKeys,
14
+ kProviderAuthFields,
13
15
  } from "../../lib/model-config.js";
14
16
  import {
15
17
  kWelcomeGroups,
@@ -162,16 +164,14 @@ export const useWelcome = ({ onComplete }) => {
162
164
  const canToggleFullCatalog =
163
165
  featuredModels.length > 0 && models.length > featuredModels.length;
164
166
  const visibleAiFieldKeys = getVisibleAiFieldKeys(selectedProvider);
167
+ const selectedAuthProvider = getAuthProviderFromModelProvider(selectedProvider);
168
+ const selectedProviderAuthFields = kProviderAuthFields[selectedAuthProvider] || [];
165
169
  const hasAi =
166
- selectedProvider === "anthropic"
167
- ? !!(vals.ANTHROPIC_API_KEY || vals.ANTHROPIC_TOKEN)
168
- : selectedProvider === "openai"
169
- ? !!vals.OPENAI_API_KEY
170
- : selectedProvider === "google"
171
- ? !!vals.GEMINI_API_KEY
172
- : selectedProvider === "openai-codex"
173
- ? !!codexStatus.connected
174
- : false;
170
+ selectedProvider === "openai-codex"
171
+ ? !!codexStatus.connected
172
+ : selectedProviderAuthFields.some(
173
+ (field) => !!String(vals[field.key] || "").trim(),
174
+ );
175
175
 
176
176
  const allValid = kWelcomeGroups.every((group) => group.validate(vals, { hasAi }));
177
177
  const isPreStep = step === -1;
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useCallback } from "https://esm.sh/preact/hooks";
1
+ import { useState, useEffect, useCallback } from "preact/hooks";
2
2
  import {
3
3
  fetchStatus,
4
4
  fetchOnboardStatus,
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useRef, useCallback } from "https://esm.sh/preact/hooks";
1
+ import { useState, useEffect, useRef, useCallback } from "preact/hooks";
2
2
  import { readUiSettings, writeUiSettings } from "../lib/ui-settings.js";
3
3
 
4
4
  const kDefaultSidebarWidthPx = 220;
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useRef, useCallback } from "https://esm.sh/preact/hooks";
1
+ import { useState, useEffect, useRef, useCallback } from "preact/hooks";
2
2
  import { readUiSettings, writeUiSettings } from "../lib/ui-settings.js";
3
3
  import { kDefaultUiTab, getSelectedNavId, kNavSections } from "../lib/app-navigation.js";
4
4
  import { buildBrowseRoute, normalizeBrowsePath, parseBrowseRoute } from "../lib/browse-route.js";
@@ -13,6 +13,7 @@ export const useBrowseNavigation = ({
13
13
  } = {}) => {
14
14
  const [sidebarTab, setSidebarTab] = useState(() => {
15
15
  if (location.startsWith("/browse")) return "browse";
16
+ if (location.startsWith("/chat")) return "chat";
16
17
  return "menu";
17
18
  });
18
19
  const [lastBrowsePath, setLastBrowsePath] = useState(() => {
@@ -28,7 +29,8 @@ export const useBrowseNavigation = ({
28
29
  typeof storedRoute === "string" &&
29
30
  storedRoute.startsWith("/") &&
30
31
  !storedRoute.startsWith("/browse") &&
31
- !storedRoute.startsWith("/agents")
32
+ !storedRoute.startsWith("/agents") &&
33
+ !storedRoute.startsWith("/chat")
32
34
  ) {
33
35
  return storedRoute;
34
36
  }
@@ -57,7 +59,8 @@ export const useBrowseNavigation = ({
57
59
  useEffect(() => {
58
60
  setSidebarTab((currentTab) => {
59
61
  if (location.startsWith("/browse")) return "browse";
60
- if (currentTab === "browse") return "menu";
62
+ if (location.startsWith("/chat")) return "chat";
63
+ if (currentTab === "browse" || currentTab === "chat") return "menu";
61
64
  return currentTab;
62
65
  });
63
66
  }, [location]);
@@ -79,6 +82,7 @@ export const useBrowseNavigation = ({
79
82
 
80
83
  useEffect(() => {
81
84
  if (location.startsWith("/browse")) return;
85
+ if (location.startsWith("/chat")) return;
82
86
  if (location.startsWith("/telegram")) return;
83
87
  setLastMenuRoute((currentRoute) =>
84
88
  currentRoute === location ? currentRoute : location,
@@ -150,10 +154,17 @@ export const useBrowseNavigation = ({
150
154
  setLocation(lastMenuRoute || `/${kDefaultUiTab}`);
151
155
  return;
152
156
  }
157
+ if (nextTab === "menu" && location.startsWith("/chat")) {
158
+ setLocation(lastMenuRoute || `/${kDefaultUiTab}`);
159
+ return;
160
+ }
153
161
  if (nextTab === "browse" && !location.startsWith("/browse")) {
154
162
  setLocation(buildBrowseRoute(lastBrowsePath));
155
163
  return;
156
164
  }
165
+ if (nextTab === "chat" && !location.startsWith("/chat")) {
166
+ setLocation("/chat");
167
+ }
157
168
  }, [lastBrowsePath, lastMenuRoute, location, setLocation]);
158
169
 
159
170
  const handleSelectNavItem = useCallback((itemId) => {
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useMemo, useState } from "https://esm.sh/preact/hooks";
1
+ import { useCallback, useEffect, useMemo, useState } from "preact/hooks";
2
2
  import { cachedFetch, getCached } from "../lib/api-cache.js";
3
3
 
4
4
  export const useCachedFetch = (
@@ -1,4 +1,4 @@
1
- import { useCallback, useEffect, useMemo, useState } from "https://esm.sh/preact/hooks";
1
+ import { useCallback, useEffect, useMemo, useState } from "preact/hooks";
2
2
  import { useAgentSessions } from "./useAgentSessions.js";
3
3
  import {
4
4
  getDestinationFromSession,
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useCallback } from "https://esm.sh/preact/hooks";
1
+ import { useState, useEffect, useCallback } from "preact/hooks";
2
2
  import { kDefaultUiTab } from "../lib/app-navigation.js";
3
3
 
4
4
  const getHashPath = () => {
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useMemo, useCallback } from "https://esm.sh/preact/hooks";
1
+ import { useState, useEffect, useMemo, useCallback } from "preact/hooks";
2
2
  import { fetchAgentSessions } from "../lib/api.js";
3
3
  import {
4
4
  kAgentSessionsCacheKey,
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useCallback, useRef } from "https://esm.sh/preact/hooks";
1
+ import { useState, useEffect, useCallback, useRef } from "preact/hooks";
2
2
  import { getCached, setCached } from "../lib/api-cache.js";
3
3
 
4
4
  export const usePolling = (
@@ -30,6 +30,7 @@ export const kNavSections = [
30
30
  export const getSelectedNavId = ({ isBrowseRoute = false, location = "" } = {}) => {
31
31
  if (isBrowseRoute) return "browse";
32
32
  if (location.startsWith("/telegram")) return "";
33
+ if (location.startsWith("/chat")) return "";
33
34
  if (location.startsWith("/models")) return "models";
34
35
  if (location.startsWith("/agents")) return "agents";
35
36
  if (location.startsWith("/providers")) return "models";
@@ -27,3 +27,6 @@ export const kTelegramWorkspaceCacheKey = "alphaclaw.telegram.workspaceCache";
27
27
  export const kAgentSessionsCacheKey = "alphaclaw.agent.sessionsCache";
28
28
  export const kAgentLastSessionKey = "alphaclaw.agent.lastSessionKey";
29
29
 
30
+ // --- Chat ---
31
+ export const kChatSessionDraftsStorageKey = "alphaclaw.chat.sessionDrafts";
32
+
@@ -0,0 +1,39 @@
1
+ // Shared Tailwind config — remaps color palette to CSS variables
2
+ // so themes can override colors without touching component files.
3
+ tailwind.config = {
4
+ theme: {
5
+ extend: {
6
+ colors: {
7
+ surface: "var(--bg-sidebar)",
8
+ border: "var(--border)",
9
+ body: "var(--text)",
10
+ bright: "var(--text-bright)",
11
+ "fg-muted": "var(--text-muted)",
12
+ "fg-dim": "var(--text-dim)",
13
+ field: "var(--field-bg-contrast)",
14
+ overlay: "var(--overlay)",
15
+ status: {
16
+ error: "var(--status-error)",
17
+ "error-muted": "var(--status-error-muted)",
18
+ "error-bg": "var(--status-error-bg)",
19
+ "error-border": "var(--status-error-border)",
20
+ warning: "var(--status-warning)",
21
+ "warning-muted": "var(--status-warning-muted)",
22
+ "warning-bg": "var(--status-warning-bg)",
23
+ "warning-border": "var(--status-warning-border)",
24
+ success: "var(--status-success)",
25
+ "success-muted": "var(--status-success-muted)",
26
+ "success-bg": "var(--status-success-bg)",
27
+ "success-border": "var(--status-success-border)",
28
+ info: "var(--status-info)",
29
+ "info-muted": "var(--status-info-muted)",
30
+ "info-bg": "var(--status-info-bg)",
31
+ "info-border": "var(--status-info-border)",
32
+ },
33
+ },
34
+ fontFamily: {
35
+ mono: ["'JetBrains Mono'", "monospace"],
36
+ },
37
+ },
38
+ },
39
+ };
@@ -10,22 +10,7 @@
10
10
  />
11
11
  <link rel="icon" type="image/svg+xml" href="./img/logo.svg" />
12
12
  <link rel="stylesheet" href="./css/theme.css" />
13
- <script src="https://cdn.tailwindcss.com"></script>
14
- <script>
15
- tailwind.config = {
16
- theme: {
17
- extend: {
18
- colors: {
19
- surface: "var(--bg-sidebar)",
20
- border: "var(--border)",
21
- },
22
- fontFamily: {
23
- mono: ["'JetBrains Mono'", "monospace"],
24
- },
25
- },
26
- },
27
- };
28
- </script>
13
+ <link rel="stylesheet" href="./css/tailwind.generated.css" />
29
14
  </head>
30
15
  <body class="min-h-screen flex items-center justify-center p-4">
31
16
  <div class="max-w-sm w-full relative z-10">
@@ -53,10 +38,10 @@
53
38
  type="password"
54
39
  placeholder="Password"
55
40
  autofocus
56
- class="w-full bg-black/30 border border-border rounded-lg px-3 py-2 text-sm outline-none focus:border-gray-500"
41
+ class="w-full bg-field border border-border rounded-lg px-3 py-2 text-sm outline-none focus:border-fg-muted"
57
42
  style="color: var(--text)"
58
43
  />
59
- <div id="error" class="text-red-400 text-xs hidden"></div>
44
+ <div id="error" class="text-status-error-muted text-xs hidden"></div>
60
45
  <button
61
46
  id="submit-btn"
62
47
  type="submit"
@@ -10,30 +10,15 @@
10
10
  />
11
11
  <link rel="icon" type="image/svg+xml" href="./img/logo.svg" />
12
12
  <link rel="stylesheet" href="./css/theme.css" />
13
+ <link rel="stylesheet" href="./css/tailwind.generated.css" />
13
14
  <link rel="stylesheet" href="./css/shell.css" />
14
15
  <link rel="stylesheet" href="./css/explorer.css" />
15
16
  <link rel="stylesheet" href="./css/agents.css" />
17
+ <link rel="stylesheet" href="./css/chat.css" />
16
18
  <link rel="stylesheet" href="./css/cron.css" />
17
- <script src="https://cdn.tailwindcss.com"></script>
18
- <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
19
- <script>
20
- tailwind.config = {
21
- theme: {
22
- extend: {
23
- colors: {
24
- surface: "var(--bg-sidebar)",
25
- border: "var(--border)",
26
- },
27
- fontFamily: {
28
- mono: ["'JetBrains Mono'", "monospace"],
29
- },
30
- },
31
- },
32
- };
33
- </script>
34
19
  </head>
35
20
  <body>
36
21
  <div id="app"></div>
37
- <script type="module" src="./js/app.js"></script>
22
+ <script type="module" src="./dist/app.bundle.js"></script>
38
23
  </body>
39
24
  </html>
@@ -353,4 +353,4 @@ const createAuthProfiles = () => {
353
353
  };
354
354
  };
355
355
 
356
- module.exports = { createAuthProfiles };
356
+ module.exports = { createAuthProfiles, getEnvVarForApiKeyProvider };