@chrysb/alphaclaw 0.8.1 → 0.8.2
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/README.md +32 -24
- package/bin/alphaclaw.js +13 -2
- package/lib/public/css/tailwind.generated.css +1 -0
- package/lib/public/css/tailwind.input.css +3 -0
- package/lib/public/css/theme.css +28 -0
- package/lib/public/css/vendor/xterm.css +218 -0
- package/lib/public/dist/app.bundle.js +10514 -0
- package/lib/public/dist/chunks/addon-fit-W4YZGRNV.js +1 -0
- package/lib/public/dist/chunks/chunk-72ZECFVW.js +1 -0
- package/lib/public/dist/chunks/xterm-KOX4YMOF.js +9 -0
- package/lib/public/js/app.js +4 -4
- package/lib/public/js/components/action-button.js +8 -8
- package/lib/public/js/components/add-channel-menu.js +2 -2
- package/lib/public/js/components/agent-send-modal.js +6 -6
- package/lib/public/js/components/agents-tab/agent-bindings-section/channel-item-trailing.js +7 -7
- package/lib/public/js/components/agents-tab/agent-bindings-section/index.js +3 -3
- package/lib/public/js/components/agents-tab/agent-bindings-section/use-agent-bindings.js +1 -1
- package/lib/public/js/components/agents-tab/agent-bindings-section/use-channel-items.js +4 -4
- package/lib/public/js/components/agents-tab/agent-detail-panel.js +5 -5
- package/lib/public/js/components/agents-tab/agent-identity-section.js +18 -18
- package/lib/public/js/components/agents-tab/agent-overview/index.js +2 -2
- package/lib/public/js/components/agents-tab/agent-overview/manage-card.js +2 -2
- package/lib/public/js/components/agents-tab/agent-overview/model-card.js +8 -8
- package/lib/public/js/components/agents-tab/agent-overview/tools-card.js +5 -5
- package/lib/public/js/components/agents-tab/agent-overview/use-model-card.js +1 -1
- package/lib/public/js/components/agents-tab/agent-overview/use-workspace-card.js +1 -1
- package/lib/public/js/components/agents-tab/agent-overview/workspace-card.js +4 -4
- package/lib/public/js/components/agents-tab/agent-pairing-section.js +4 -4
- package/lib/public/js/components/agents-tab/agent-tools/index.js +5 -5
- package/lib/public/js/components/agents-tab/agent-tools/use-agent-tools.js +1 -1
- package/lib/public/js/components/agents-tab/create-agent-modal.js +13 -13
- package/lib/public/js/components/agents-tab/create-channel-modal.js +34 -34
- package/lib/public/js/components/agents-tab/delete-agent-dialog.js +3 -3
- package/lib/public/js/components/agents-tab/edit-agent-modal.js +9 -9
- package/lib/public/js/components/agents-tab/index.js +3 -3
- package/lib/public/js/components/agents-tab/use-agents.js +1 -1
- package/lib/public/js/components/badge.js +6 -6
- package/lib/public/js/components/channel-account-status-badge.js +2 -2
- package/lib/public/js/components/channel-operations-panel.js +2 -2
- package/lib/public/js/components/channels.js +9 -9
- package/lib/public/js/components/confirm-dialog.js +5 -5
- package/lib/public/js/components/credentials-modal.js +22 -22
- package/lib/public/js/components/cron-tab/cron-calendar.js +6 -6
- package/lib/public/js/components/cron-tab/cron-insights-panel.js +10 -10
- package/lib/public/js/components/cron-tab/cron-job-detail.js +4 -4
- package/lib/public/js/components/cron-tab/cron-job-list.js +4 -4
- package/lib/public/js/components/cron-tab/cron-job-settings-card.js +15 -15
- package/lib/public/js/components/cron-tab/cron-job-trends-panel.js +5 -5
- package/lib/public/js/components/cron-tab/cron-job-usage.js +16 -16
- package/lib/public/js/components/cron-tab/cron-overview.js +10 -10
- package/lib/public/js/components/cron-tab/cron-prompt-editor.js +3 -3
- package/lib/public/js/components/cron-tab/cron-run-history-panel.js +39 -39
- package/lib/public/js/components/cron-tab/cron-runs-trend-card.js +4 -4
- package/lib/public/js/components/cron-tab/index.js +5 -5
- package/lib/public/js/components/cron-tab/use-cron-tab.js +1 -1
- package/lib/public/js/components/device-pairings.js +12 -12
- package/lib/public/js/components/doctor/findings-list.js +22 -22
- package/lib/public/js/components/doctor/fix-card-modal.js +2 -2
- package/lib/public/js/components/doctor/general-warning.js +5 -5
- package/lib/public/js/components/doctor/index.js +26 -26
- package/lib/public/js/components/doctor/summary-cards.js +5 -5
- package/lib/public/js/components/envars.js +16 -16
- package/lib/public/js/components/features.js +4 -4
- package/lib/public/js/components/file-tree.js +4 -4
- package/lib/public/js/components/file-viewer/diff-viewer.js +2 -2
- package/lib/public/js/components/file-viewer/editor-surface.js +2 -2
- package/lib/public/js/components/file-viewer/frontmatter-panel.js +2 -2
- package/lib/public/js/components/file-viewer/index.js +3 -3
- package/lib/public/js/components/file-viewer/markdown-split-view.js +2 -2
- package/lib/public/js/components/file-viewer/media-preview.js +2 -2
- package/lib/public/js/components/file-viewer/scroll-sync.js +1 -1
- package/lib/public/js/components/file-viewer/sqlite-viewer.js +2 -2
- package/lib/public/js/components/file-viewer/status-banners.js +2 -2
- package/lib/public/js/components/file-viewer/toolbar.js +2 -2
- package/lib/public/js/components/file-viewer/use-editor-line-number-sync.js +1 -1
- package/lib/public/js/components/file-viewer/use-editor-selection-restore.js +1 -1
- package/lib/public/js/components/file-viewer/use-file-diff.js +1 -1
- package/lib/public/js/components/file-viewer/use-file-loader.js +1 -1
- package/lib/public/js/components/file-viewer/use-file-viewer-draft-sync.js +1 -1
- package/lib/public/js/components/file-viewer/use-file-viewer-hotkeys.js +1 -1
- package/lib/public/js/components/file-viewer/use-file-viewer.js +2 -2
- package/lib/public/js/components/gateway.js +12 -12
- package/lib/public/js/components/general/index.js +7 -7
- package/lib/public/js/components/general/use-general-tab.js +1 -1
- package/lib/public/js/components/global-restart-banner.js +2 -2
- package/lib/public/js/components/google/account-row.js +7 -7
- package/lib/public/js/components/google/add-account-modal.js +8 -8
- package/lib/public/js/components/google/gmail-setup-wizard.js +24 -24
- package/lib/public/js/components/google/gmail-watch-toggle.js +5 -5
- package/lib/public/js/components/google/index.js +6 -6
- package/lib/public/js/components/google/use-gmail-watch.js +1 -1
- package/lib/public/js/components/google/use-google-accounts.js +1 -1
- package/lib/public/js/components/icons.js +2 -2
- package/lib/public/js/components/info-tooltip.js +3 -3
- package/lib/public/js/components/loading-spinner.js +2 -2
- package/lib/public/js/components/modal-shell.js +5 -5
- package/lib/public/js/components/models-tab/index.js +11 -11
- package/lib/public/js/components/models-tab/model-picker.js +9 -9
- package/lib/public/js/components/models-tab/provider-auth-card.js +12 -12
- package/lib/public/js/components/models-tab/use-models.js +1 -1
- package/lib/public/js/components/models.js +18 -18
- package/lib/public/js/components/nodes-tab/browser-attach/index.js +5 -5
- package/lib/public/js/components/nodes-tab/connected-nodes/index.js +32 -32
- package/lib/public/js/components/nodes-tab/connected-nodes/use-connected-nodes-card.js +18 -3
- package/lib/public/js/components/nodes-tab/exec-allowlist/index.js +10 -10
- package/lib/public/js/components/nodes-tab/exec-allowlist/use-exec-allowlist.js +1 -1
- package/lib/public/js/components/nodes-tab/exec-config/index.js +13 -13
- package/lib/public/js/components/nodes-tab/exec-config/use-exec-config.js +1 -1
- package/lib/public/js/components/nodes-tab/index.js +2 -2
- package/lib/public/js/components/nodes-tab/setup-wizard/index.js +14 -14
- package/lib/public/js/components/nodes-tab/setup-wizard/use-setup-wizard.js +1 -1
- package/lib/public/js/components/nodes-tab/use-nodes-tab.js +1 -1
- package/lib/public/js/components/onboarding/use-welcome-codex.js +1 -1
- package/lib/public/js/components/onboarding/use-welcome-pairing.js +1 -1
- package/lib/public/js/components/onboarding/use-welcome-storage.js +1 -1
- package/lib/public/js/components/onboarding/welcome-config.js +3 -3
- package/lib/public/js/components/onboarding/welcome-form-step.js +34 -34
- package/lib/public/js/components/onboarding/welcome-header.js +2 -2
- package/lib/public/js/components/onboarding/welcome-import-step.js +22 -22
- package/lib/public/js/components/onboarding/welcome-pairing-step.js +15 -15
- package/lib/public/js/components/onboarding/welcome-placeholder-review-step.js +7 -7
- package/lib/public/js/components/onboarding/welcome-pre-step.js +9 -9
- package/lib/public/js/components/onboarding/welcome-secret-review-step.js +15 -15
- package/lib/public/js/components/onboarding/welcome-setup-step.js +8 -8
- package/lib/public/js/components/overflow-menu.js +3 -3
- package/lib/public/js/components/page-header.js +2 -2
- package/lib/public/js/components/pairings.js +14 -14
- package/lib/public/js/components/pane-shell.js +2 -2
- package/lib/public/js/components/pill-tabs.js +4 -4
- package/lib/public/js/components/pop-actions.js +3 -3
- package/lib/public/js/components/providers.js +17 -17
- package/lib/public/js/components/routes/agents-route.js +2 -2
- package/lib/public/js/components/routes/browse-route.js +2 -2
- package/lib/public/js/components/routes/cron-route.js +2 -2
- package/lib/public/js/components/routes/doctor-route.js +2 -2
- package/lib/public/js/components/routes/envars-route.js +2 -2
- package/lib/public/js/components/routes/general-route.js +2 -2
- package/lib/public/js/components/routes/models-route.js +2 -2
- package/lib/public/js/components/routes/nodes-route.js +2 -2
- package/lib/public/js/components/routes/providers-route.js +2 -2
- package/lib/public/js/components/routes/route-redirect.js +2 -2
- package/lib/public/js/components/routes/telegram-route.js +2 -2
- package/lib/public/js/components/routes/usage-route.js +2 -2
- package/lib/public/js/components/routes/watchdog-route.js +2 -2
- package/lib/public/js/components/routes/webhooks-route.js +2 -2
- package/lib/public/js/components/scope-picker.js +9 -9
- package/lib/public/js/components/secret-input.js +5 -5
- package/lib/public/js/components/segmented-control.js +2 -2
- package/lib/public/js/components/session-select-field.js +7 -7
- package/lib/public/js/components/sidebar-git-panel.js +3 -3
- package/lib/public/js/components/sidebar.js +3 -3
- package/lib/public/js/components/summary-stat-card.js +3 -3
- package/lib/public/js/components/telegram-workspace/index.js +10 -10
- package/lib/public/js/components/telegram-workspace/manage.js +36 -36
- package/lib/public/js/components/telegram-workspace/onboarding.js +73 -73
- package/lib/public/js/components/toast.js +8 -8
- package/lib/public/js/components/toggle-switch.js +2 -2
- package/lib/public/js/components/tooltip.js +5 -5
- package/lib/public/js/components/update-action-button.js +2 -2
- package/lib/public/js/components/update-modal.js +9 -9
- package/lib/public/js/components/usage-tab/constants.js +2 -2
- package/lib/public/js/components/usage-tab/index.js +3 -3
- package/lib/public/js/components/usage-tab/overview-section.js +15 -15
- package/lib/public/js/components/usage-tab/sessions-section.js +19 -19
- package/lib/public/js/components/usage-tab/use-usage-tab.js +2 -2
- package/lib/public/js/components/watchdog-tab/console/index.js +22 -8
- package/lib/public/js/components/watchdog-tab/console/use-console.js +28 -2
- package/lib/public/js/components/watchdog-tab/helpers.js +35 -6
- package/lib/public/js/components/watchdog-tab/incidents/index.js +6 -6
- package/lib/public/js/components/watchdog-tab/incidents/use-incidents.js +1 -1
- package/lib/public/js/components/watchdog-tab/index.js +4 -2
- package/lib/public/js/components/watchdog-tab/resource-bar.js +5 -5
- package/lib/public/js/components/watchdog-tab/resources/index.js +14 -3
- package/lib/public/js/components/watchdog-tab/resources/use-resources.js +1 -1
- package/lib/public/js/components/watchdog-tab/settings/index.js +97 -30
- package/lib/public/js/components/watchdog-tab/settings/use-settings.js +1 -1
- package/lib/public/js/components/watchdog-tab/terminal/index.js +3 -3
- package/lib/public/js/components/watchdog-tab/terminal/use-terminal.js +41 -5
- package/lib/public/js/components/watchdog-tab/use-watchdog-tab.js +2 -0
- package/lib/public/js/components/webhooks/create-webhook-modal/index.js +17 -17
- package/lib/public/js/components/webhooks/helpers.js +3 -3
- package/lib/public/js/components/webhooks/index.js +4 -4
- package/lib/public/js/components/webhooks/request-history/index.js +14 -14
- package/lib/public/js/components/webhooks/request-history/use-request-history.js +1 -1
- package/lib/public/js/components/webhooks/webhook-detail/index.js +41 -41
- package/lib/public/js/components/webhooks/webhook-detail/use-webhook-detail.js +1 -1
- package/lib/public/js/components/webhooks/webhook-list/index.js +11 -11
- package/lib/public/js/components/webhooks/webhook-list/use-webhook-list.js +1 -1
- package/lib/public/js/components/welcome/index.js +3 -3
- package/lib/public/js/components/welcome/use-welcome.js +10 -10
- package/lib/public/js/hooks/use-app-shell-controller.js +1 -1
- package/lib/public/js/hooks/use-app-shell-ui.js +1 -1
- package/lib/public/js/hooks/use-browse-navigation.js +1 -1
- package/lib/public/js/hooks/use-cached-fetch.js +1 -1
- package/lib/public/js/hooks/use-destination-session-selection.js +1 -1
- package/lib/public/js/hooks/use-hash-location.js +1 -1
- package/lib/public/js/hooks/useAgentSessions.js +1 -1
- package/lib/public/js/hooks/usePolling.js +1 -1
- package/lib/public/js/tailwind-config.js +39 -0
- package/lib/public/login.html +3 -18
- package/lib/public/setup.html +2 -18
- package/lib/server/init/register-server-routes.js +2 -0
- package/lib/server/routes/nodes.js +10 -2
- package/lib/server/routes/pairings.js +5 -1
- package/lib/server/routes/system.js +5 -0
- package/lib/server/routes/watchdog.js +15 -0
- package/lib/server/watchdog.js +137 -51
- package/lib/server.js +2 -0
- package/package.json +14 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import htm from "htm";
|
|
3
3
|
import { ActionButton } from "../action-button.js";
|
|
4
4
|
import { SegmentedControl } from "../segmented-control.js";
|
|
5
5
|
import { DeleteBinLineIcon, RestartLineIcon, SaveFillIcon } from "../icons.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useRef } from "
|
|
1
|
+
import { useEffect, useRef } from "preact/hooks";
|
|
2
2
|
import { readStoredEditorSelection } from "./storage.js";
|
|
3
3
|
import { clampSelectionIndex } from "./utils.js";
|
|
4
4
|
import { getScrollRatio } from "./scroll-sync.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "
|
|
2
|
-
import { marked } from "
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks";
|
|
2
|
+
import { marked } from "marked";
|
|
3
3
|
import { deleteBrowseFile, restoreBrowseFile, saveFileContent } from "../../lib/api.js";
|
|
4
4
|
import {
|
|
5
5
|
getFileSyntaxKind,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import { useEffect, useMemo, useState } from "
|
|
3
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import { useEffect, useMemo, useState } from "preact/hooks";
|
|
3
|
+
import htm from "htm";
|
|
4
4
|
import { fetchOpenclawVersion, updateOpenclaw } from "../lib/api.js";
|
|
5
5
|
import { UpdateActionButton } from "./update-action-button.js";
|
|
6
6
|
import { ConfirmDialog } from "./confirm-dialog.js";
|
|
@@ -200,15 +200,15 @@ const VersionRow = ({
|
|
|
200
200
|
return html`
|
|
201
201
|
<div class="flex items-center justify-between gap-3">
|
|
202
202
|
<div class="min-w-0">
|
|
203
|
-
<p class="text-xs text-
|
|
204
|
-
<span class="text-
|
|
203
|
+
<p class="text-xs text-body truncate">
|
|
204
|
+
<span class="text-fg-muted">${label}</span>${" "}${version
|
|
205
205
|
? `${version}`
|
|
206
206
|
: "..."}
|
|
207
207
|
</p>
|
|
208
208
|
${error &&
|
|
209
209
|
effectiveHasUpdate &&
|
|
210
210
|
html`<div
|
|
211
|
-
class="mt-1 text-xs text-
|
|
211
|
+
class="mt-1 text-xs text-status-error bg-status-error-bg border border-status-error-border rounded-lg px-2 py-1"
|
|
212
212
|
>
|
|
213
213
|
${error}
|
|
214
214
|
</div>`}
|
|
@@ -222,7 +222,7 @@ const VersionRow = ({
|
|
|
222
222
|
target="_blank"
|
|
223
223
|
rel="noreferrer"
|
|
224
224
|
onclick=${() => setHasViewedChangelog(true)}
|
|
225
|
-
class="hidden md:inline text-xs text-
|
|
225
|
+
class="hidden md:inline text-xs text-fg-muted hover:text-body transition-colors"
|
|
226
226
|
>View changelog</a
|
|
227
227
|
>
|
|
228
228
|
`}
|
|
@@ -264,7 +264,7 @@ const VersionRow = ({
|
|
|
264
264
|
target="_blank"
|
|
265
265
|
rel="noreferrer"
|
|
266
266
|
onclick=${() => setHasViewedChangelog(true)}
|
|
267
|
-
class="inline-flex items-center justify-center flex-1 h-9 text-xs rounded-lg border border-border text-
|
|
267
|
+
class="inline-flex items-center justify-center flex-1 h-9 text-xs rounded-lg border border-border text-fg-muted hover:text-body hover:border-fg-muted transition-colors"
|
|
268
268
|
>View changelog</a
|
|
269
269
|
>
|
|
270
270
|
<${UpdateActionButton}
|
|
@@ -353,14 +353,14 @@ export const Gateway = ({
|
|
|
353
353
|
<div class="min-w-0 flex items-center gap-2 text-sm">
|
|
354
354
|
<span class=${dotClass}></span>
|
|
355
355
|
<span class="font-semibold">Gateway:</span>
|
|
356
|
-
<span class="text-
|
|
356
|
+
<span class="text-fg-muted"
|
|
357
357
|
>${restarting ? "restarting..." : status || "checking..."}</span
|
|
358
358
|
>
|
|
359
359
|
</div>
|
|
360
360
|
<div class="flex items-center gap-3 shrink-0">
|
|
361
361
|
${!restarting && isRunning
|
|
362
362
|
? html`
|
|
363
|
-
<span class="text-xs text-
|
|
363
|
+
<span class="text-xs text-fg-muted whitespace-nowrap"
|
|
364
364
|
>Uptime: ${formatDuration(liveUptimeMs)}</span
|
|
365
365
|
>
|
|
366
366
|
`
|
|
@@ -389,7 +389,7 @@ export const Gateway = ({
|
|
|
389
389
|
: `w-2 h-2 rounded-full ${watchdogDotClass}`}
|
|
390
390
|
></span>
|
|
391
391
|
<span class="font-semibold">Watchdog:</span>
|
|
392
|
-
<span class="text-
|
|
392
|
+
<span class="text-fg-muted">${watchdogLabel}</span>
|
|
393
393
|
</button>
|
|
394
394
|
`
|
|
395
395
|
: html`
|
|
@@ -400,7 +400,7 @@ export const Gateway = ({
|
|
|
400
400
|
: `w-2 h-2 rounded-full ${watchdogDotClass}`}
|
|
401
401
|
></span>
|
|
402
402
|
<span class="font-semibold">Watchdog:</span>
|
|
403
|
-
<span class="text-
|
|
403
|
+
<span class="text-fg-muted">${watchdogLabel}</span>
|
|
404
404
|
</div>
|
|
405
405
|
`}
|
|
406
406
|
${onRepair
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import htm from "htm";
|
|
3
3
|
import { Gateway } from "../gateway.js";
|
|
4
4
|
import { Channels } from "../channels.js";
|
|
5
5
|
import { ChannelOperationsPanel } from "../channel-operations-panel.js";
|
|
@@ -97,7 +97,7 @@ export const GeneralTab = ({
|
|
|
97
97
|
<div class="flex items-center justify-between gap-3">
|
|
98
98
|
<div class="flex items-center gap-2 min-w-0">
|
|
99
99
|
<svg
|
|
100
|
-
class="w-4 h-4 text-
|
|
100
|
+
class="w-4 h-4 text-fg-muted"
|
|
101
101
|
viewBox="0 0 16 16"
|
|
102
102
|
fill="currentColor"
|
|
103
103
|
>
|
|
@@ -108,19 +108,19 @@ export const GeneralTab = ({
|
|
|
108
108
|
<a
|
|
109
109
|
href="https://github.com/${state.repo}"
|
|
110
110
|
target="_blank"
|
|
111
|
-
class="text-sm text-
|
|
111
|
+
class="text-sm text-fg-muted hover:text-body transition-colors truncate"
|
|
112
112
|
>${state.repo}</a
|
|
113
113
|
>
|
|
114
114
|
</div>
|
|
115
115
|
<div class="flex items-center gap-2 shrink-0">
|
|
116
|
-
<span class="text-xs text-
|
|
116
|
+
<span class="text-xs text-fg-muted">Auto-sync</span>
|
|
117
117
|
<div class="relative">
|
|
118
118
|
<select
|
|
119
119
|
value=${state.syncCronChoice}
|
|
120
120
|
onchange=${(event) =>
|
|
121
121
|
actions.handleSyncCronChoiceChange(event.target.value)}
|
|
122
122
|
disabled=${state.savingSyncCron}
|
|
123
|
-
class="appearance-none bg-
|
|
123
|
+
class="appearance-none bg-field border border-border rounded-lg pl-2.5 pr-9 py-1.5 text-xs text-body ${state.savingSyncCron
|
|
124
124
|
? "opacity-50 cursor-not-allowed"
|
|
125
125
|
: ""}"
|
|
126
126
|
title=${state.syncCron?.installed === false
|
|
@@ -133,7 +133,7 @@ export const GeneralTab = ({
|
|
|
133
133
|
<option value="0 0 * * *">Daily</option>
|
|
134
134
|
</select>
|
|
135
135
|
<${ChevronDownIcon}
|
|
136
|
-
className="pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-
|
|
136
|
+
className="pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-fg-muted"
|
|
137
137
|
/>
|
|
138
138
|
</div>
|
|
139
139
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import htm from "htm";
|
|
3
3
|
import { Badge } from "../badge.js";
|
|
4
4
|
import { ScopePicker } from "../scope-picker.js";
|
|
5
5
|
import { GmailWatchToggle } from "./gmail-watch-toggle.js";
|
|
@@ -32,11 +32,11 @@ export const GoogleAccountRow = ({
|
|
|
32
32
|
}) => {
|
|
33
33
|
const scopesChanged = !scopeListsEqual(scopes, savedScopes);
|
|
34
34
|
return html`
|
|
35
|
-
<div class="border border-border rounded-lg bg-
|
|
35
|
+
<div class="border border-border rounded-lg bg-field overflow-visible">
|
|
36
36
|
<button
|
|
37
37
|
type="button"
|
|
38
38
|
onclick=${() => onToggleExpanded?.(account.id)}
|
|
39
|
-
class="w-full text-left px-3 py-2.5 flex items-center justify-between hover:bg-
|
|
39
|
+
class="w-full text-left px-3 py-2.5 flex items-center justify-between hover:bg-field"
|
|
40
40
|
>
|
|
41
41
|
<div class="min-w-0">
|
|
42
42
|
<div class="text-sm font-medium truncate">${account.email}</div>
|
|
@@ -46,14 +46,14 @@ export const GoogleAccountRow = ({
|
|
|
46
46
|
<${Badge} tone=${account.authenticated ? "success" : "warning"}>
|
|
47
47
|
${account.authenticated ? "Connected" : "Awaiting sign-in"}
|
|
48
48
|
</${Badge}>
|
|
49
|
-
<span class="text-xs text-
|
|
49
|
+
<span class="text-xs text-fg-muted">${expanded ? "▾" : "▸"}</span>
|
|
50
50
|
</div>
|
|
51
51
|
</button>
|
|
52
52
|
${expanded
|
|
53
53
|
? html`
|
|
54
54
|
<div class="px-3 pb-3 space-y-3 border-t border-border">
|
|
55
55
|
<div class="flex justify-between items-center pt-3">
|
|
56
|
-
<span class="text-sm text-
|
|
56
|
+
<span class="text-sm text-fg-muted">Select permissions</span>
|
|
57
57
|
${account.authenticated
|
|
58
58
|
? html`<button
|
|
59
59
|
type="button"
|
|
@@ -76,7 +76,7 @@ export const GoogleAccountRow = ({
|
|
|
76
76
|
<div class="-mx-3 mt-4 mb-2 border-y border-border">
|
|
77
77
|
<div class="px-3 py-3 space-y-2">
|
|
78
78
|
<div class="flex justify-between items-center gap-2">
|
|
79
|
-
<span class="text-sm text-
|
|
79
|
+
<span class="text-sm text-fg-muted">Incoming events</span>
|
|
80
80
|
<button
|
|
81
81
|
type="button"
|
|
82
82
|
onclick=${() => onOpenGmailSetup?.(account.id)}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import { useEffect, useState } from "
|
|
3
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import { useEffect, useState } from "preact/hooks";
|
|
3
|
+
import htm from "htm";
|
|
4
4
|
import { ActionButton } from "../action-button.js";
|
|
5
5
|
import { ModalShell } from "../modal-shell.js";
|
|
6
6
|
import { PageHeader } from "../page-header.js";
|
|
@@ -55,16 +55,16 @@ export const AddGoogleAccountModal = ({
|
|
|
55
55
|
class="h-8 w-8 inline-flex items-center justify-center rounded-lg ac-btn-secondary"
|
|
56
56
|
aria-label="Close modal"
|
|
57
57
|
>
|
|
58
|
-
<${CloseIcon} className="w-3.5 h-3.5 text-
|
|
58
|
+
<${CloseIcon} className="w-3.5 h-3.5 text-body" />
|
|
59
59
|
</button>
|
|
60
60
|
`}
|
|
61
61
|
/>
|
|
62
62
|
<div class="space-y-3">
|
|
63
63
|
<div>
|
|
64
|
-
<label class="text-sm text-
|
|
64
|
+
<label class="text-sm text-fg-muted block mb-1"
|
|
65
65
|
>Email (Google account to authorize)</label
|
|
66
66
|
>
|
|
67
|
-
<p class="text-xs text-
|
|
67
|
+
<p class="text-xs text-fg-muted mb-2">
|
|
68
68
|
This adds another account to the same company workspace. Only one company workspace is supported.
|
|
69
69
|
</p>
|
|
70
70
|
<input
|
|
@@ -72,10 +72,10 @@ export const AddGoogleAccountModal = ({
|
|
|
72
72
|
value=${email}
|
|
73
73
|
onInput=${(e) => setEmail(e.target.value)}
|
|
74
74
|
placeholder="you@company.com"
|
|
75
|
-
class="w-full bg-
|
|
75
|
+
class="w-full bg-field border border-border rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-fg-muted"
|
|
76
76
|
/>
|
|
77
77
|
</div>
|
|
78
|
-
${error ? html`<div class="text-
|
|
78
|
+
${error ? html`<div class="text-status-error-muted text-xs">${error}</div>` : null}
|
|
79
79
|
</div>
|
|
80
80
|
<div class="pt-2">
|
|
81
81
|
<${ActionButton}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { h } from "
|
|
1
|
+
import { h } from "preact";
|
|
2
2
|
import {
|
|
3
3
|
useCallback,
|
|
4
4
|
useEffect,
|
|
5
5
|
useMemo,
|
|
6
6
|
useState,
|
|
7
|
-
} from "
|
|
8
|
-
import htm from "
|
|
7
|
+
} from "preact/hooks";
|
|
8
|
+
import htm from "htm";
|
|
9
9
|
import { ModalShell } from "../modal-shell.js";
|
|
10
10
|
import { PageHeader } from "../page-header.js";
|
|
11
11
|
import { CloseIcon } from "../icons.js";
|
|
@@ -58,9 +58,9 @@ const kTutorialStepTitles = kSetupStepTitles.slice(0, 3);
|
|
|
58
58
|
const kNoSessionSelectedValue = kNoDestinationSessionValue;
|
|
59
59
|
|
|
60
60
|
const renderCommandBlock = (command = "", onCopy = () => {}) => html`
|
|
61
|
-
<div class="rounded-lg border border-border bg-
|
|
61
|
+
<div class="rounded-lg border border-border bg-field p-3">
|
|
62
62
|
<pre
|
|
63
|
-
class="pt-1 pl-2 text-[11px] leading-5 whitespace-pre-wrap break-all font-mono text-
|
|
63
|
+
class="pt-1 pl-2 text-[11px] leading-5 whitespace-pre-wrap break-all font-mono text-body"
|
|
64
64
|
>
|
|
65
65
|
${command}</pre
|
|
66
66
|
>
|
|
@@ -240,9 +240,9 @@ export const GmailSetupWizard = ({
|
|
|
240
240
|
class="absolute top-6 right-6 h-8 w-8 inline-flex items-center justify-center rounded-lg ac-btn-secondary"
|
|
241
241
|
aria-label="Close modal"
|
|
242
242
|
>
|
|
243
|
-
<${CloseIcon} className="w-3.5 h-3.5 text-
|
|
243
|
+
<${CloseIcon} className="w-3.5 h-3.5 text-body" />
|
|
244
244
|
</button>
|
|
245
|
-
<div class="text-xs text-
|
|
245
|
+
<div class="text-xs text-fg-muted">Gmail Pub / Sub Setup</div>
|
|
246
246
|
<div class="flex items-center gap-1">
|
|
247
247
|
${stepTitles.map(
|
|
248
248
|
(title, idx) => html`
|
|
@@ -258,19 +258,19 @@ export const GmailSetupWizard = ({
|
|
|
258
258
|
title=${`Step ${step + 1} of ${totalSteps}: ${stepTitles[step]}`}
|
|
259
259
|
actions=${null}
|
|
260
260
|
/>
|
|
261
|
-
${localError ? html`<div class="text-xs text-
|
|
261
|
+
${localError ? html`<div class="text-xs text-status-error-muted">${localError}</div>` : null}
|
|
262
262
|
${
|
|
263
263
|
needsProjectId
|
|
264
264
|
? html`
|
|
265
265
|
<div
|
|
266
|
-
class="rounded-lg border border-border bg-
|
|
266
|
+
class="rounded-lg border border-border bg-field p-3 space-y-2"
|
|
267
267
|
>
|
|
268
268
|
<div class="text-sm">
|
|
269
269
|
${editingProjectId
|
|
270
270
|
? "Change project ID"
|
|
271
271
|
: "Project ID required"}
|
|
272
272
|
</div>
|
|
273
|
-
<div class="text-xs text-
|
|
273
|
+
<div class="text-xs text-fg-muted">
|
|
274
274
|
Find it in the${" "}
|
|
275
275
|
<a
|
|
276
276
|
href="https://console.cloud.google.com/home/dashboard"
|
|
@@ -285,7 +285,7 @@ export const GmailSetupWizard = ({
|
|
|
285
285
|
type="text"
|
|
286
286
|
value=${projectIdInput}
|
|
287
287
|
oninput=${(event) => setProjectIdInput(event.target.value)}
|
|
288
|
-
class="w-full bg-
|
|
288
|
+
class="w-full bg-field border border-border rounded-lg px-2.5 py-2 text-xs font-mono focus:border-fg-muted focus:outline-none"
|
|
289
289
|
placeholder="my-gcp-project"
|
|
290
290
|
/>
|
|
291
291
|
</div>
|
|
@@ -296,10 +296,10 @@ export const GmailSetupWizard = ({
|
|
|
296
296
|
!needsProjectId && step === 0
|
|
297
297
|
? html`
|
|
298
298
|
<div class="space-y-1">
|
|
299
|
-
<div class="text-xs text-
|
|
299
|
+
<div class="text-xs text-fg-muted">
|
|
300
300
|
Using project <code>${detectedProjectId}</code>.
|
|
301
301
|
</div>
|
|
302
|
-
<div class="text-xs text-
|
|
302
|
+
<div class="text-xs text-fg-muted">
|
|
303
303
|
If <code>gcloud</code> is not installed on your computer,
|
|
304
304
|
follow the official install guide:${" "}
|
|
305
305
|
<a
|
|
@@ -351,7 +351,7 @@ export const GmailSetupWizard = ({
|
|
|
351
351
|
handleCopy(commands?.createSubscription || ""),
|
|
352
352
|
)}
|
|
353
353
|
<div
|
|
354
|
-
class="rounded-lg border border-border bg-
|
|
354
|
+
class="rounded-lg border border-border bg-field p-3 space-y-2"
|
|
355
355
|
>
|
|
356
356
|
<${SessionSelectField}
|
|
357
357
|
label="Deliver to"
|
|
@@ -370,10 +370,10 @@ export const GmailSetupWizard = ({
|
|
|
370
370
|
helperText=${hasExistingWebhookSetup
|
|
371
371
|
? "This Gmail webhook has already been created. To edit delivery routing, ask your agent."
|
|
372
372
|
: null}
|
|
373
|
-
selectClassName="w-full bg-
|
|
374
|
-
helperClassName="text-xs text-
|
|
375
|
-
statusClassName="text-[11px] text-
|
|
376
|
-
errorClassName="text-[11px] text-
|
|
373
|
+
selectClassName="w-full bg-field border border-border rounded-lg px-2.5 py-2 text-xs font-mono focus:border-fg-muted focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed"
|
|
374
|
+
helperClassName="text-xs text-fg-muted"
|
|
375
|
+
statusClassName="text-[11px] text-fg-muted"
|
|
376
|
+
errorClassName="text-[11px] text-status-error-muted"
|
|
377
377
|
/>
|
|
378
378
|
</div>
|
|
379
379
|
`
|
|
@@ -383,16 +383,16 @@ export const GmailSetupWizard = ({
|
|
|
383
383
|
!hasExistingWebhookSetup && step === 4
|
|
384
384
|
? html`
|
|
385
385
|
<div
|
|
386
|
-
class="rounded-lg border border-border bg-
|
|
386
|
+
class="rounded-lg border border-border bg-field p-3 space-y-3"
|
|
387
387
|
>
|
|
388
388
|
<div class="pt-1 space-y-1">
|
|
389
389
|
<div class="text-sm">Continue with your agent</div>
|
|
390
|
-
<div class="text-xs text-
|
|
390
|
+
<div class="text-xs text-fg-muted">
|
|
391
391
|
Tell your OpenClaw agent about what you want to build with
|
|
392
392
|
incoming email to continue the setup.
|
|
393
393
|
</div>
|
|
394
394
|
<div class="pt-2 space-y-2">
|
|
395
|
-
<div class="text-[11px] text-
|
|
395
|
+
<div class="text-[11px] text-fg-muted">
|
|
396
396
|
Send this to session
|
|
397
397
|
</div>
|
|
398
398
|
<div class="flex items-center gap-2">
|
|
@@ -409,7 +409,7 @@ export const GmailSetupWizard = ({
|
|
|
409
409
|
disabled=${loadingAgentSessions ||
|
|
410
410
|
sendingToAgent ||
|
|
411
411
|
agentMessageSent}
|
|
412
|
-
class="flex-1 min-w-0 bg-
|
|
412
|
+
class="flex-1 min-w-0 bg-field border border-border rounded-lg px-2.5 py-2 text-xs font-mono focus:border-fg-muted focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed"
|
|
413
413
|
>
|
|
414
414
|
${!selectedSessionKey
|
|
415
415
|
? html`<option value=${kNoSessionSelectedValue}>
|
|
@@ -436,12 +436,12 @@ export const GmailSetupWizard = ({
|
|
|
436
436
|
/>
|
|
437
437
|
</div>
|
|
438
438
|
${loadingAgentSessions
|
|
439
|
-
? html`<div class="text-[11px] text-
|
|
439
|
+
? html`<div class="text-[11px] text-fg-muted">
|
|
440
440
|
Loading sessions...
|
|
441
441
|
</div>`
|
|
442
442
|
: null}
|
|
443
443
|
${agentSessionsError
|
|
444
|
-
? html`<div class="text-[11px] text-
|
|
444
|
+
? html`<div class="text-[11px] text-status-error-muted">
|
|
445
445
|
${agentSessionsError}
|
|
446
446
|
</div>`
|
|
447
447
|
: null}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import htm from "htm";
|
|
3
3
|
import { Badge } from "../badge.js";
|
|
4
4
|
import { ToggleSwitch } from "../toggle-switch.js";
|
|
5
5
|
import { InfoTooltip } from "../info-tooltip.js";
|
|
@@ -32,8 +32,8 @@ export const GmailWatchToggle = ({
|
|
|
32
32
|
: false;
|
|
33
33
|
if (!hasGmailReadScope) {
|
|
34
34
|
return html`
|
|
35
|
-
<div class="bg-
|
|
36
|
-
<div class="text-xs text-
|
|
35
|
+
<div class="bg-field rounded-lg px-3 py-2">
|
|
36
|
+
<div class="text-xs text-fg-muted">
|
|
37
37
|
Gmail watch requires <code>gmail:read</code>. Add it in permissions
|
|
38
38
|
above, then update permissions.
|
|
39
39
|
</div>
|
|
@@ -45,7 +45,7 @@ export const GmailWatchToggle = ({
|
|
|
45
45
|
const enabled = Boolean(watchStatus?.enabled);
|
|
46
46
|
return html`
|
|
47
47
|
<div
|
|
48
|
-
class="flex items-center justify-between bg-
|
|
48
|
+
class="flex items-center justify-between bg-field border border-transparent rounded-lg px-3 py-2 cursor-pointer hover:bg-field hover:border-white/20 transition-colors"
|
|
49
49
|
role="button"
|
|
50
50
|
tabindex="0"
|
|
51
51
|
onClick=${() => onOpenWebhook?.()}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { h } from "
|
|
1
|
+
import { h } from "preact";
|
|
2
2
|
import {
|
|
3
3
|
useCallback,
|
|
4
4
|
useEffect,
|
|
5
5
|
useMemo,
|
|
6
6
|
useState,
|
|
7
|
-
} from "
|
|
8
|
-
import htm from "
|
|
7
|
+
} from "preact/hooks";
|
|
8
|
+
import htm from "htm";
|
|
9
9
|
import {
|
|
10
10
|
checkGoogleApis,
|
|
11
11
|
disconnectGoogle,
|
|
@@ -415,7 +415,7 @@ export const Google = ({
|
|
|
415
415
|
|
|
416
416
|
const renderEmptyState = () => html`
|
|
417
417
|
<div class="text-center space-y-2 pt-3">
|
|
418
|
-
<div class="rounded-lg border border-border bg-
|
|
418
|
+
<div class="rounded-lg border border-border bg-field px-3 py-5">
|
|
419
419
|
<div class="flex flex-col items-center justify-center gap-3">
|
|
420
420
|
<img
|
|
421
421
|
src=${kGoogleIconPath}
|
|
@@ -424,7 +424,7 @@ export const Google = ({
|
|
|
424
424
|
loading="lazy"
|
|
425
425
|
decoding="async"
|
|
426
426
|
/>
|
|
427
|
-
<p class="text-xs text-
|
|
427
|
+
<p class="text-xs text-fg-muted">
|
|
428
428
|
Connect Gmail, Calendar, Contacts, Drive, Sheets, Tasks, Docs, and
|
|
429
429
|
Meet.
|
|
430
430
|
</p>
|
|
@@ -489,7 +489,7 @@ export const Google = ({
|
|
|
489
489
|
: null}
|
|
490
490
|
</div>
|
|
491
491
|
${loading
|
|
492
|
-
? html`<div class="text-
|
|
492
|
+
? html`<div class="text-fg-muted text-sm text-center py-2">
|
|
493
493
|
Loading...
|
|
494
494
|
</div>`
|
|
495
495
|
: accounts.length
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo, useRef } from "
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef } from "preact/hooks";
|
|
2
2
|
import { fetchGoogleAccounts } from "../../lib/api.js";
|
|
3
3
|
import { useCachedFetch } from "../../hooks/use-cached-fetch.js";
|
|
4
4
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import htm from "htm";
|
|
3
3
|
import { Tooltip } from "./tooltip.js";
|
|
4
4
|
|
|
5
5
|
const html = htm.bind(h);
|
|
@@ -7,7 +7,7 @@ const html = htm.bind(h);
|
|
|
7
7
|
export const InfoTooltip = ({ text = "", widthClass = "w-64" }) => html`
|
|
8
8
|
<${Tooltip} text=${text} widthClass=${widthClass}>
|
|
9
9
|
<span
|
|
10
|
-
class="inline-flex h-4 w-4 items-center justify-center rounded-full border border-
|
|
10
|
+
class="inline-flex h-4 w-4 items-center justify-center rounded-full border border-fg-muted text-[10px] text-fg-muted cursor-default select-none"
|
|
11
11
|
aria-label=${text}
|
|
12
12
|
>?</span
|
|
13
13
|
>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { h } from "
|
|
2
|
-
import { useEffect } from "
|
|
3
|
-
import { createPortal } from "
|
|
4
|
-
import htm from "
|
|
1
|
+
import { h } from "preact";
|
|
2
|
+
import { useEffect } from "preact/hooks";
|
|
3
|
+
import { createPortal } from "preact/compat";
|
|
4
|
+
import htm from "htm";
|
|
5
5
|
|
|
6
6
|
const html = htm.bind(h);
|
|
7
7
|
|
|
@@ -29,7 +29,7 @@ export const ModalShell = ({
|
|
|
29
29
|
return createPortal(
|
|
30
30
|
html`
|
|
31
31
|
<div
|
|
32
|
-
class="fixed inset-0 bg-
|
|
32
|
+
class="fixed inset-0 bg-overlay flex items-center justify-center p-4 z-50"
|
|
33
33
|
onclick=${(event) => {
|
|
34
34
|
if (closeOnOverlayClick && event.target === event.currentTarget) onClose?.();
|
|
35
35
|
}}
|