@elizaos/app-core 2.0.0-alpha.169 → 2.0.0-alpha.170
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/apps/app-lifeops/src/LifeOpsBrowserSetupPanel.d.ts.map +1 -1
- package/apps/app-lifeops/src/LifeOpsBrowserSetupPanel.js +19 -21
- package/apps/app-lifeops/src/LifeOpsPageSections.d.ts +2 -2
- package/apps/app-lifeops/src/LifeOpsPageSections.d.ts.map +1 -1
- package/apps/app-lifeops/src/LifeOpsPageSections.js +2 -2
- package/apps/app-lifeops/src/LifeOpsPageView.d.ts.map +1 -1
- package/apps/app-lifeops/src/LifeOpsPageView.js +6 -6
- package/apps/app-lifeops/src/LifeOpsSettingsSection.d.ts.map +1 -1
- package/apps/app-lifeops/src/LifeOpsSettingsSection.js +11 -12
- package/apps/app-lifeops/src/LifeOpsWorkspaceView.d.ts.map +1 -1
- package/apps/app-lifeops/src/LifeOpsWorkspaceView.js +5 -5
- package/apps/app-lifeops/src/lifeops/app-state.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/app-state.js +5 -2
- package/apps/app-lifeops/src/selfcontrol/roles.d.ts +15 -9
- package/apps/app-lifeops/src/selfcontrol/roles.d.ts.map +1 -1
- package/apps/app-lifeops/src/selfcontrol/roles.js +33 -220
- package/package.json +5 -5
- package/packages/agent/src/runtime/core-plugins.d.ts.map +1 -1
- package/packages/agent/src/runtime/core-plugins.js +2 -1
- package/packages/app-core/src/api/client-cloud.js +1 -1
- package/packages/app-core/src/api/plugins-compat-routes.d.ts.map +1 -1
- package/packages/app-core/src/api/plugins-compat-routes.js +7 -1
- package/packages/app-core/src/components/shell/Header.js +6 -6
- package/packages/app-core/src/runtime/eliza.d.ts.map +1 -1
- package/packages/app-core/src/runtime/eliza.js +11 -2
- package/packages/typescript/src/generated/action-docs.d.ts +0 -15
- package/packages/typescript/src/generated/action-docs.d.ts.map +1 -1
- package/packages/typescript/src/generated/action-docs.js +0 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifeOpsBrowserSetupPanel.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsBrowserSetupPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LifeOpsBrowserSetupPanel.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsBrowserSetupPanel.tsx"],"names":[],"mappings":"AAkbA,wBAAgB,wBAAwB,4CA8nBvC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { LIFEOPS_BROWSER_SITE_ACCESS_MODES, } from "@elizaos/shared/contracts/lifeops";
|
|
3
|
-
import { Badge, Button,
|
|
3
|
+
import { Badge, Button, Input, Label, Switch, Textarea, } from "@elizaos/app-core";
|
|
4
4
|
import { Copy, Download, FolderOpen, Package, RefreshCw, ShieldCheck, Sparkles, } from "lucide-react";
|
|
5
5
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
6
6
|
import { client } from "@elizaos/app-core";
|
|
@@ -185,12 +185,10 @@ function releaseBadgeLabel(browser, releaseManifest) {
|
|
|
185
185
|
}
|
|
186
186
|
function BrowserCompanionRow({ browser, buildPath, packagePath, appPath, releaseManifest, busy, pairing, onInstall, onBuild, onCreatePairing, onCopyPairing, onDownload, onOpenPath, }) {
|
|
187
187
|
const browserLabel = browser === "chrome" ? "Chrome" : "Safari";
|
|
188
|
-
const installHintText = installHint(browser, releaseManifest);
|
|
189
188
|
const installLabel = installButtonLabel(browser, releaseManifest);
|
|
190
189
|
const distributionLabel = releaseBadgeLabel(browser, releaseManifest);
|
|
191
190
|
const hasLocalArtifact = Boolean(buildPath || packagePath || appPath);
|
|
192
|
-
|
|
193
|
-
return (_jsxs("div", { className: "rounded-2xl border border-border/60 bg-bg/30 p-4 space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: browserLabel }), distributionLabel ? (_jsx(Badge, { variant: "secondary", children: distributionLabel })) : null, showBuiltBadge && hasLocalArtifact ? (_jsx(Badge, { variant: "secondary", children: "Built" })) : null, showBuiltBadge && !hasLocalArtifact ? (_jsx(Badge, { variant: "outline", children: "Not built" })) : null] }), _jsx("p", { className: "text-sm text-muted", children: installHintText })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { size: "sm", disabled: busy, onClick: () => void onInstall(browser), children: [_jsx(Sparkles, { className: "mr-2 h-3.5 w-3.5" }), busy ? "Preparing…" : installLabel] }), _jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onBuild(browser), children: [_jsx(Package, { className: "mr-2 h-3.5 w-3.5" }), busy ? "Building…" : `Build ${browserLabel}`] }), _jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onCreatePairing(browser), children: [_jsx(Sparkles, { className: "mr-2 h-3.5 w-3.5" }), "Pair ", browserLabel] }), pairing ? (_jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onCopyPairing(browser), children: [_jsx(Copy, { className: "mr-2 h-3.5 w-3.5" }), "Copy pairing JSON"] })) : null, packagePath ? (_jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onDownload(browser), children: [_jsx(Download, { className: "mr-2 h-3.5 w-3.5" }), "Download zip"] })) : null] })] }), _jsxs("div", { className: "grid gap-2 text-xs text-muted", children: [buildPath ? (_jsxs("div", { className: "rounded-xl border border-border/60 bg-bg/40 p-3", children: [_jsx("div", { className: "font-semibold text-txt", children: "Build folder" }), _jsx("div", { className: "mt-1 break-all font-mono", children: buildPath }), isElectrobunRuntime() ? (_jsx("div", { className: "mt-2", children: _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(buildPath, true), children: [_jsx(FolderOpen, { className: "mr-2 h-3.5 w-3.5" }), "Reveal build"] }) })) : null] })) : null, packagePath ? (_jsxs("div", { className: "rounded-xl border border-border/60 bg-bg/40 p-3", children: [_jsx("div", { className: "font-semibold text-txt", children: "Package" }), _jsx("div", { className: "mt-1 break-all font-mono", children: packagePath }), isElectrobunRuntime() ? (_jsx("div", { className: "mt-2", children: _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(packagePath, true), children: [_jsx(FolderOpen, { className: "mr-2 h-3.5 w-3.5" }), "Reveal package"] }) })) : null] })) : null, appPath ? (_jsxs("div", { className: "rounded-xl border border-border/60 bg-bg/40 p-3", children: [_jsx("div", { className: "font-semibold text-txt", children: "App bundle" }), _jsx("div", { className: "mt-1 break-all font-mono", children: appPath }), isElectrobunRuntime() ? (_jsxs("div", { className: "mt-2 flex flex-wrap gap-2", children: [_jsx(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(appPath), children: "Open app" }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(appPath, true), children: [_jsx(FolderOpen, { className: "mr-2 h-3.5 w-3.5" }), "Reveal app"] })] })) : null] })) : null] })] }));
|
|
191
|
+
return (_jsxs("div", { className: "rounded-lg border border-border/50 bg-bg/30 p-3 space-y-2", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: browserLabel }), distributionLabel ? (_jsx(Badge, { variant: "secondary", className: "text-2xs", children: distributionLabel })) : null, hasLocalArtifact ? (_jsx(Badge, { variant: "secondary", className: "text-2xs", children: "Built" })) : (_jsx(Badge, { variant: "outline", className: "text-2xs", children: "Not built" }))] }), _jsxs("div", { className: "flex flex-wrap gap-1.5", children: [_jsxs(Button, { size: "sm", disabled: busy, onClick: () => void onInstall(browser), children: [_jsx(Sparkles, { className: "mr-1.5 h-3 w-3" }), busy ? "…" : installLabel] }), _jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onBuild(browser), children: [_jsx(Package, { className: "mr-1.5 h-3 w-3" }), "Build"] }), _jsx(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onCreatePairing(browser), children: "Pair" }), pairing ? (_jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onCopyPairing(browser), children: [_jsx(Copy, { className: "mr-1.5 h-3 w-3" }), "Copy"] })) : null, packagePath ? (_jsxs(Button, { size: "sm", variant: "outline", disabled: busy, onClick: () => void onDownload(browser), children: [_jsx(Download, { className: "mr-1.5 h-3 w-3" }), "Zip"] })) : null] }), (buildPath || packagePath || appPath) ? (_jsxs("div", { className: "space-y-1 text-xs text-muted", children: [buildPath ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-semibold text-txt", children: "Build:" }), _jsx("span", { className: "min-w-0 truncate font-mono", children: buildPath }), isElectrobunRuntime() ? (_jsx(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(buildPath, true), children: _jsx(FolderOpen, { className: "h-3 w-3" }) })) : null] })) : null, packagePath ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-semibold text-txt", children: "Pkg:" }), _jsx("span", { className: "min-w-0 truncate font-mono", children: packagePath }), isElectrobunRuntime() ? (_jsx(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(packagePath, true), children: _jsx(FolderOpen, { className: "h-3 w-3" }) })) : null] })) : null, appPath ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-semibold text-txt", children: "App:" }), _jsx("span", { className: "min-w-0 truncate font-mono", children: appPath }), isElectrobunRuntime() ? (_jsxs(_Fragment, { children: [_jsx(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(appPath), children: "Open" }), _jsx(Button, { size: "sm", variant: "outline", onClick: () => void onOpenPath(appPath, true), children: _jsx(FolderOpen, { className: "h-3 w-3" }) })] })) : null] })) : null] })) : null] }));
|
|
194
192
|
}
|
|
195
193
|
export function LifeOpsBrowserSetupPanel() {
|
|
196
194
|
const [draft, setDraft] = useState(null);
|
|
@@ -441,23 +439,23 @@ export function LifeOpsBrowserSetupPanel() {
|
|
|
441
439
|
setInstallingBrowser(null);
|
|
442
440
|
}
|
|
443
441
|
};
|
|
444
|
-
return (_jsxs(
|
|
442
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2 text-muted", children: [_jsx(ShieldCheck, { className: "h-4 w-4" }), _jsx("div", { className: "text-xs font-semibold uppercase tracking-wide", children: "LifeOps Browser" })] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void refresh(), children: [_jsx(RefreshCw, { className: "mr-1.5 h-3 w-3" }), "Refresh"] })] }), currentPage ? (_jsxs("div", { className: "text-xs text-muted", children: ["Current page: ", _jsx("span", { className: "text-txt", children: currentPage })] })) : null, statusMessage ? (_jsx("div", { className: "rounded-lg border border-border/50 bg-bg/40 px-3 py-2 text-xs text-txt", children: statusMessage })) : null, error ? (_jsx("div", { className: "rounded-lg border border-danger/50 bg-danger/10 px-3 py-1.5 text-xs text-danger", children: error })) : null, _jsxs("div", { className: "grid gap-4 xl:grid-cols-2", children: [_jsx("div", { className: "space-y-3", children: draft ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("div", { className: "text-xs font-semibold text-muted uppercase tracking-wide", children: "Settings" }), _jsx(Button, { size: "sm", variant: "outline", disabled: savingSettings || loading, onClick: () => void saveSettings(), children: savingSettings ? "Saving…" : "Save" })] }), _jsxs("div", { className: "grid gap-2 grid-cols-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 rounded-lg border border-border/50 bg-bg/40 px-3 py-1.5", children: [_jsx("span", { className: "text-xs font-medium text-txt", children: "Enabled" }), _jsx(Switch, { checked: draft.enabled, onCheckedChange: (checked) => updateDraft("enabled", checked) })] }), _jsxs("div", { className: "flex items-center justify-between gap-2 rounded-lg border border-border/50 bg-bg/40 px-3 py-1.5", children: [_jsx("span", { className: "text-xs font-medium text-txt", children: "Browser control" }), _jsx(Switch, { checked: draft.allowBrowserControl, onCheckedChange: (checked) => updateDraft("allowBrowserControl", checked) })] }), _jsxs("div", { className: "flex items-center justify-between gap-2 rounded-lg border border-border/50 bg-bg/40 px-3 py-1.5", children: [_jsx("span", { className: "text-xs font-medium text-txt", children: "Require confirmation" }), _jsx(Switch, { checked: draft.requireConfirmationForAccountAffecting, onCheckedChange: (checked) => updateDraft("requireConfirmationForAccountAffecting", checked) })] }), _jsxs("div", { className: "flex items-center justify-between gap-2 rounded-lg border border-border/50 bg-bg/40 px-3 py-1.5", children: [_jsx("span", { className: "text-xs font-medium text-txt", children: "Incognito" }), _jsx(Switch, { checked: draft.incognitoEnabled, onCheckedChange: (checked) => updateDraft("incognitoEnabled", checked) })] })] }), _jsxs("div", { className: "grid gap-3 grid-cols-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted", children: "Tracking" }), _jsx("div", { className: "flex flex-wrap gap-1.5", children: ["off", "current_tab", "active_tabs"].map((mode) => (_jsx(Button, { size: "sm", variant: draft.trackingMode === mode ? "default" : "outline", onClick: () => updateDraft("trackingMode", mode), children: mode === "off"
|
|
443
|
+
? "Off"
|
|
444
|
+
: mode === "current_tab"
|
|
445
|
+
? "Current tab"
|
|
446
|
+
: "Active tabs" }, mode))) })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { className: "text-xs text-muted", children: "Site access" }), _jsx("div", { className: "flex flex-wrap gap-1.5", children: LIFEOPS_BROWSER_SITE_ACCESS_MODES.map((mode) => (_jsx(Button, { size: "sm", variant: draft.siteAccessMode === mode ? "default" : "outline", onClick: () => updateDraft("siteAccessMode", mode), children: mode === "current_site_only"
|
|
447
|
+
? "Current site"
|
|
448
|
+
: mode === "granted_sites"
|
|
449
|
+
? "Granted sites"
|
|
450
|
+
: "All sites" }, mode))) })] })] }), _jsxs("div", { className: "grid gap-3 grid-cols-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "lifeops-browser-max-tabs", className: "text-xs text-muted", children: "Max remembered tabs" }), _jsx(Input, { id: "lifeops-browser-max-tabs", value: draft.maxRememberedTabs, onChange: (event) => updateDraft("maxRememberedTabs", event.currentTarget.value), inputMode: "numeric" })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "lifeops-browser-pause-until", className: "text-xs text-muted", children: "Pause until" }), _jsxs("div", { className: "flex gap-1.5", children: [_jsx(Input, { id: "lifeops-browser-pause-until", type: "datetime-local", value: draft.pauseUntilLocal, onChange: (event) => updateDraft("pauseUntilLocal", event.currentTarget.value), className: "min-w-0 flex-1" }), _jsx(Button, { size: "sm", variant: "outline", onClick: () => updateDraft("pauseUntilLocal", formatDateTimeLocalValue(new Date(Date.now() + 60 * 60 * 1000).toISOString())), children: "1h" }), _jsx(Button, { size: "sm", variant: "outline", onClick: () => updateDraft("pauseUntilLocal", ""), children: "Now" })] })] })] }), _jsxs("div", { className: "grid gap-3 grid-cols-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "lifeops-browser-granted-origins", className: "text-xs text-muted", children: "Granted origins" }), _jsx(Textarea, { id: "lifeops-browser-granted-origins", rows: 3, placeholder: "https://mail.google.com", value: draft.grantedOriginsText, onChange: (event) => updateDraft("grantedOriginsText", event.currentTarget.value) })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "lifeops-browser-blocked-origins", className: "text-xs text-muted", children: "Blocked origins" }), _jsx(Textarea, { id: "lifeops-browser-blocked-origins", rows: 3, placeholder: "https://bank.example.com", value: draft.blockedOriginsText, onChange: (event) => updateDraft("blockedOriginsText", event.currentTarget.value) })] })] }), _jsxs("div", { className: "text-xs text-muted", children: ["Companions: ", companions.length, " | Workspace: ", _jsx("span", { className: "font-mono text-txt", children: packageStatus?.extensionPath ?? "N/A" })] })] })) : loading ? (_jsx("div", { className: "text-xs text-muted", children: "Loading settings\u2026" })) : null }), _jsxs("div", { className: "space-y-3", children: [_jsx("div", { className: "text-xs font-semibold text-muted uppercase tracking-wide", children: "Installation" }), _jsx(BrowserCompanionRow, { browser: "chrome", buildPath: packageStatus?.chromeBuildPath, packagePath: packageStatus?.chromePackagePath, releaseManifest: packageStatus?.releaseManifest ?? null, busy: buildingBrowser === "chrome" ||
|
|
445
451
|
pairingBrowser === "chrome" ||
|
|
446
452
|
installingBrowser === "chrome", pairing: pairings.chrome ?? null, onInstall: installCompanion, onBuild: buildPackage, onCreatePairing: createPairing, onCopyPairing: copyPairing, onDownload: downloadPackage, onOpenPath: openPath }), _jsx(BrowserCompanionRow, { browser: "safari", buildPath: packageStatus?.safariWebExtensionPath, packagePath: packageStatus?.safariPackagePath, appPath: packageStatus?.safariAppPath, releaseManifest: packageStatus?.releaseManifest ?? null, busy: buildingBrowser === "safari" ||
|
|
447
453
|
pairingBrowser === "safari" ||
|
|
448
|
-
installingBrowser === "safari", pairing: pairings.safari ?? null, onInstall: installCompanion, onBuild: buildPackage, onCreatePairing: createPairing, onCopyPairing: copyPairing, onDownload: downloadPackage, onOpenPath: openPath })
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
? "Off"
|
|
456
|
-
: mode === "current_tab"
|
|
457
|
-
? "Current tab"
|
|
458
|
-
: "Active tabs" }, mode))) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { className: "text-xs uppercase tracking-[0.08em] text-muted", children: "Site access mode" }), _jsx("div", { className: "flex flex-wrap gap-2", children: LIFEOPS_BROWSER_SITE_ACCESS_MODES.map((mode) => (_jsx(Button, { size: "sm", variant: draft.siteAccessMode === mode ? "default" : "outline", onClick: () => updateDraft("siteAccessMode", mode), children: mode === "current_site_only"
|
|
459
|
-
? "Current site"
|
|
460
|
-
: mode === "granted_sites"
|
|
461
|
-
? "Granted sites"
|
|
462
|
-
: "All sites" }, mode))) })] }), _jsxs("div", { className: "grid gap-4 md:grid-cols-[minmax(0,1fr)_220px]", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "lifeops-browser-max-tabs", children: "Max remembered tabs" }), _jsx(Input, { id: "lifeops-browser-max-tabs", value: draft.maxRememberedTabs, onChange: (event) => updateDraft("maxRememberedTabs", event.currentTarget.value), inputMode: "numeric" })] }), _jsxs("div", { className: "rounded-xl border border-border/60 bg-bg/40 px-3 py-2 text-xs text-muted", children: ["Connected companions:", " ", _jsx("span", { className: "text-txt", children: companions.length }), _jsx("br", {}), "Extension workspace:", " ", _jsx("span", { className: "break-all font-mono text-xs-tight text-txt", children: packageStatus?.extensionPath ?? "Unavailable" })] })] }), _jsxs("div", { className: "grid gap-4 md:grid-cols-[minmax(0,1fr)_auto_auto]", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "lifeops-browser-pause-until", children: "Pause sharing until" }), _jsx(Input, { id: "lifeops-browser-pause-until", type: "datetime-local", value: draft.pauseUntilLocal, onChange: (event) => updateDraft("pauseUntilLocal", event.currentTarget.value) })] }), _jsx(Button, { size: "sm", variant: "outline", className: "self-end", onClick: () => updateDraft("pauseUntilLocal", formatDateTimeLocalValue(new Date(Date.now() + 60 * 60 * 1000).toISOString())), children: "Pause 1 hour" }), _jsx(Button, { size: "sm", variant: "outline", className: "self-end", onClick: () => updateDraft("pauseUntilLocal", ""), children: "Resume now" })] }), _jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "lifeops-browser-granted-origins", children: "Granted origins" }), _jsx(Textarea, { id: "lifeops-browser-granted-origins", rows: 5, placeholder: "https://mail.google.com", value: draft.grantedOriginsText, onChange: (event) => updateDraft("grantedOriginsText", event.currentTarget.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "lifeops-browser-blocked-origins", children: "Blocked origins" }), _jsx(Textarea, { id: "lifeops-browser-blocked-origins", rows: 5, placeholder: "https://bank.example.com", value: draft.blockedOriginsText, onChange: (event) => updateDraft("blockedOriginsText", event.currentTarget.value) })] })] }), _jsx("div", { className: "rounded-xl border border-border/60 bg-bg/40 px-3 py-2 text-xs text-muted", children: "Install Chrome or Safari in one click here. The framework builds the companion, prepares a fresh pairing token, and launches the next destination for that browser. Chrome still requires Load unpacked approval, and Safari still requires enabling the extension in Safari Settings." })] })) : loading ? (_jsx("div", { className: "text-sm text-muted", children: "Loading LifeOps Browser settings\u2026" })) : null, companions.length > 0 ? (_jsxs("div", { className: "rounded-2xl border border-border/60 bg-bg/30 p-4 space-y-2", children: [_jsx("div", { className: "text-sm font-semibold text-txt", children: "Paired companions" }), _jsx("div", { className: "grid gap-2 text-sm", children: companions.map((companion) => (_jsxs("div", { className: "rounded-xl border border-border/60 bg-bg/40 px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Badge, { variant: "outline", children: [companion.browser, "/", companion.profileLabel] }), _jsx(Badge, { variant: "secondary", children: companion.connectionState })] }), _jsxs("div", { className: "mt-1 text-xs text-muted", children: ["Last seen:", " ", formatTimestamp(companion.lastSeenAt) ?? "Never"] }), _jsx("div", { className: "mt-1 text-xs text-muted", children: permissionSummary(companion.permissions) })] }, companion.id))) })] })) : null] })] }));
|
|
454
|
+
installingBrowser === "safari", pairing: pairings.safari ?? null, onInstall: installCompanion, onBuild: buildPackage, onCreatePairing: createPairing, onCopyPairing: copyPairing, onDownload: downloadPackage, onOpenPath: openPath }), ["chrome", "safari"].map((browser) => {
|
|
455
|
+
const payload = pairingPayloads[browser];
|
|
456
|
+
if (!payload) {
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
return (_jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("span", { className: "text-xs font-semibold text-txt", children: [browser === "chrome" ? "Chrome" : "Safari", " pairing"] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => void copyPairing(browser), children: [_jsx(Copy, { className: "mr-1.5 h-3 w-3" }), "Copy"] })] }), _jsx(Textarea, { readOnly: true, rows: 5, value: payload, className: "font-mono text-xs" })] }, browser));
|
|
460
|
+
}), companions.length > 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "text-xs font-semibold text-muted uppercase tracking-wide", children: "Paired companions" }), _jsx("div", { className: "grid gap-2", children: companions.map((companion) => (_jsxs("div", { className: "flex flex-wrap items-center gap-2 rounded-lg border border-border/50 bg-bg/40 px-3 py-1.5 text-xs", children: [_jsxs(Badge, { variant: "outline", className: "text-2xs", children: [companion.browser, "/", companion.profileLabel] }), _jsx(Badge, { variant: "secondary", className: "text-2xs", children: companion.connectionState }), _jsx("span", { className: "text-muted", children: formatTimestamp(companion.lastSeenAt) ?? "Never seen" }), _jsx("span", { className: "text-muted", children: permissionSummary(companion.permissions) })] }, companion.id))) })] })) : null] })] })] }));
|
|
463
461
|
}
|
|
@@ -9,13 +9,13 @@ export declare function occurrenceSortValue(occurrence: LifeOpsOccurrenceView):
|
|
|
9
9
|
export declare function SectionSurface({ title, icon, subtitle, children, }: {
|
|
10
10
|
title: string;
|
|
11
11
|
icon: ReactNode;
|
|
12
|
-
subtitle
|
|
12
|
+
subtitle?: string;
|
|
13
13
|
children: ReactNode;
|
|
14
14
|
}): import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
export declare function SummaryMetric({ label, value, detail, }: {
|
|
16
16
|
label: string;
|
|
17
17
|
value: string;
|
|
18
|
-
detail
|
|
18
|
+
detail?: string;
|
|
19
19
|
}): import("react/jsx-runtime").JSX.Element;
|
|
20
20
|
export declare function OccurrenceList({ occurrences, }: {
|
|
21
21
|
occurrences: LifeOpsOccurrenceView[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifeOpsPageSections.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsPageSections.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EAEzB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,8BAA8B,GAAG,IAAI,CAAC;CAC/C,CAAC;AA+CF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,CAiB7E;AAsED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"LifeOpsPageSections.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsPageSections.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EAEzB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,gBAAgB,EAChB,8BAA8B,EAC9B,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,8BAA8B,GAAG,IAAI,CAAC;CAC/C,CAAC;AA+CF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,MAAM,CAiB7E;AAsED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAWA;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,MAAM,GACP,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,2CAUA;AAED,wBAAgB,cAAc,CAAC,EAC7B,WAAW,GACZ,EAAE;IACD,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC,2CA2CA;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,qBAAqB,EAAE,CAAA;CAAE,2CAkDrE;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,GACV,EAAE;IACD,SAAS,EAAE,yBAAyB,EAAE,CAAC;CACxC,2CAuCA;AAED,wBAAgB,yBAAyB,CAAC,EACxC,UAAU,EACV,IAAI,EACJ,YAAY,GACb,EAAE;IACD,UAAU,EAAE,oBAAoB,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,2CAuDA;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,oBAAoB,GACrB,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACvE,2CAqHA"}
|
|
@@ -112,10 +112,10 @@ function githubBindingSourceLabel(source) {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
export function SectionSurface({ title, icon, subtitle, children, }) {
|
|
115
|
-
return (_jsxs("div", {
|
|
115
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 text-muted", children: [icon, _jsx("div", { className: "text-xs font-semibold uppercase tracking-wide text-muted", children: title })] }), subtitle ? _jsx("div", { className: "mt-1 text-xs leading-5 text-muted", children: subtitle }) : null, _jsx("div", { className: "mt-2 space-y-2", children: children })] }));
|
|
116
116
|
}
|
|
117
117
|
export function SummaryMetric({ label, value, detail, }) {
|
|
118
|
-
return (_jsxs("div", { className: "rounded-2xl border border-border/40 bg-bg/72 p-4", children: [_jsx("div", { className: "text-2xs font-semibold uppercase tracking-[0.12em] text-muted", children: label }), _jsx("div", { className: "mt-2 text-lg font-semibold text-txt", children: value }), _jsx("div", { className: "mt-1 text-xs-tight text-muted", children: detail })] }));
|
|
118
|
+
return (_jsxs("div", { className: "rounded-2xl border border-border/40 bg-bg/72 p-4", children: [_jsx("div", { className: "text-2xs font-semibold uppercase tracking-[0.12em] text-muted", children: label }), _jsx("div", { className: "mt-2 text-lg font-semibold text-txt", children: value }), detail ? _jsx("div", { className: "mt-1 text-xs-tight text-muted", children: detail }) : null] }));
|
|
119
119
|
}
|
|
120
120
|
export function OccurrenceList({ occurrences, }) {
|
|
121
121
|
if (occurrences.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifeOpsPageView.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsPageView.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LifeOpsPageView.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsPageView.tsx"],"names":[],"mappings":"AA2GA,wBAAgB,eAAe,4CAkqB9B"}
|
|
@@ -8,10 +8,10 @@ import { consumeQueuedLifeOpsGithubCallback, dispatchLifeOpsGithubCallbackFromWi
|
|
|
8
8
|
import { useLifeOpsAppState } from "@elizaos/app-core";
|
|
9
9
|
import { useApp } from "@elizaos/app-core";
|
|
10
10
|
import { openExternalUrl } from "@elizaos/app-core";
|
|
11
|
-
import { AgentGithubCard, GoalList, OccurrenceList, occurrenceSortValue, OwnerGithubConnectionCard, ReminderList, SectionSurface,
|
|
11
|
+
import { AgentGithubCard, GoalList, OccurrenceList, occurrenceSortValue, OwnerGithubConnectionCard, ReminderList, SectionSurface, } from "./LifeOpsPageSections";
|
|
12
12
|
import { LifeOpsSettingsSection } from "./LifeOpsSettingsSection";
|
|
13
13
|
import { LifeOpsWorkspaceView } from "./LifeOpsWorkspaceView";
|
|
14
|
-
const LIFEOPS_GITHUB_COMPLETE_PATH = "/api/v1/
|
|
14
|
+
const LIFEOPS_GITHUB_COMPLETE_PATH = "/api/v1/milady/lifeops/github-complete";
|
|
15
15
|
const LIFEOPS_GITHUB_RETURN_URL = "elizaos://lifeops";
|
|
16
16
|
function buildOwnerGithubRedirectUrl() {
|
|
17
17
|
const params = new URLSearchParams();
|
|
@@ -376,12 +376,12 @@ export function LifeOpsPageView() {
|
|
|
376
376
|
.slice(0, 4), [overview?.agentOps.occurrences]);
|
|
377
377
|
const ownerGoals = useMemo(() => (overview?.owner.goals ?? []).slice(0, 4), [overview?.owner.goals]);
|
|
378
378
|
const ownerReminders = useMemo(() => (overview?.owner.reminders ?? []).slice(0, 4), [overview?.owner.reminders]);
|
|
379
|
-
return (_jsxs("div", { className: "space-y-4", "data-testid": "lifeops-shell", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "LifeOps", heading: "Personal Operations",
|
|
379
|
+
return (_jsxs("div", { className: "space-y-4", "data-testid": "lifeops-shell", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "LifeOps", heading: "Personal Operations", actions: _jsxs("div", { className: "flex flex-wrap gap-2", children: [appEnabled ? (_jsxs(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void refreshAll(), disabled: lifeOpsApp.loading ||
|
|
380
380
|
lifeOpsApp.saving ||
|
|
381
381
|
overviewLoading ||
|
|
382
|
-
githubLoading, children: [_jsx(RefreshCw, { className: "mr-2 h-3.5 w-3.5" }), "Refresh"] })) : null, _jsx(Button, { variant: appEnabled ? "outline" : "default", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void handleSetLifeOpsEnabled(!appEnabled), disabled: lifeOpsApp.loading || lifeOpsApp.saving, children: appEnabled ? "Disable LifeOps" : "Enable LifeOps" })] }) }), lifeOpsApp.error ? (_jsx(PagePanel.Notice, { tone: "danger", className: "mt-4", children: lifeOpsApp.error })) : null, lifeOpsApp.loading ? (_jsx(PagePanel.Loading, { variant: "surface", className: "mt-4", heading: "Loading LifeOps app state" })) : null, !lifeOpsApp.loading && !appEnabled ? (_jsx(PagePanel.Empty, { variant: "surface", className: "mt-4 min-h-[12rem] rounded-3xl", title: "LifeOps
|
|
382
|
+
githubLoading, children: [_jsx(RefreshCw, { className: "mr-2 h-3.5 w-3.5" }), "Refresh"] })) : null, _jsx(Button, { variant: appEnabled ? "outline" : "default", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void handleSetLifeOpsEnabled(!appEnabled), disabled: lifeOpsApp.loading || lifeOpsApp.saving, children: appEnabled ? "Disable LifeOps" : "Enable LifeOps" })] }) }), lifeOpsApp.error ? (_jsx(PagePanel.Notice, { tone: "danger", className: "mt-4", children: lifeOpsApp.error })) : null, lifeOpsApp.loading ? (_jsx(PagePanel.Loading, { variant: "surface", className: "mt-4", heading: "Loading LifeOps app state" })) : null, !lifeOpsApp.loading && !appEnabled ? (_jsx(PagePanel.Empty, { variant: "surface", className: "mt-4 min-h-[12rem] rounded-3xl", title: "LifeOps is disabled" })) : null, appEnabled && !runtimeReady && !overview ? (_jsx(PagePanel.Loading, { variant: "surface", className: "mt-4", heading: "Waiting for LifeOps runtime" })) : null, appEnabled && overviewError ? (_jsx(PagePanel.Notice, { tone: "danger", className: "mt-4", children: overviewError })) : null, appEnabled && overview ? (_jsxs("div", { className: "mt-2 grid gap-3 md:grid-cols-2 xl:grid-cols-4", children: [_jsx(SectionSurface, { title: "Current queue", icon: _jsx(ListTodo, { className: "h-4 w-4" }), children: _jsx(OccurrenceList, { occurrences: ownerOccurrences }) }), _jsx(SectionSurface, { title: "Goals", icon: _jsx(Target, { className: "h-4 w-4" }), children: _jsx(GoalList, { goals: ownerGoals }) }), _jsx(SectionSurface, { title: "Reminders", icon: _jsx(BellRing, { className: "h-4 w-4" }), children: _jsx(ReminderList, { reminders: ownerReminders }) }), _jsx(SectionSurface, { title: "Agent operations", icon: _jsx(Bot, { className: "h-4 w-4" }), children: _jsx(OccurrenceList, { occurrences: agentOccurrences }) })] })) : null] }), appEnabled ? _jsx(LifeOpsSettingsSection, {}) : null, appEnabled ? (_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "GitHub", heading: "Connected accounts", actions: _jsx(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: openCloudAgents, children: "Open Cloud" }) }), !elizaCloudConnected ? (_jsx(PagePanel.Empty, { variant: "surface", className: "mt-4 min-h-[12rem] rounded-3xl", title: "Connect Eliza Cloud first" })) : (_jsxs(_Fragment, { children: [githubError ? (_jsx(PagePanel.Notice, { tone: "danger", className: "mt-4", children: githubError })) : null, githubLoading &&
|
|
383
383
|
ownerGithubConnections.length === 0 &&
|
|
384
|
-
agentGithubEntries.length === 0 ? (_jsx(PagePanel.Loading, { variant: "surface", className: "mt-4", heading: "Loading GitHub identities" })) : null, _jsxs("div", { className: "mt-4 grid gap-4 xl:grid-cols-[minmax(20rem,0.95fr)_minmax(22rem,1.05fr)]", children: [_jsxs(SectionSurface, { title: "LifeOps GitHub", icon: _jsx(Github, { className: "h-4 w-4" }),
|
|
384
|
+
agentGithubEntries.length === 0 ? (_jsx(PagePanel.Loading, { variant: "surface", className: "mt-4", heading: "Loading GitHub identities" })) : null, _jsxs("div", { className: "mt-4 grid gap-4 xl:grid-cols-[minmax(20rem,0.95fr)_minmax(22rem,1.05fr)]", children: [_jsxs(SectionSurface, { title: "LifeOps GitHub", icon: _jsx(Github, { className: "h-4 w-4" }), children: [_jsx("div", { className: "flex flex-wrap gap-2", children: _jsxs(Button, { variant: "default", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", disabled: ownerGithubBusy, onClick: () => void handleConnectOwnerGithub(), children: [_jsx(ExternalLink, { className: "mr-2 h-3.5 w-3.5" }), ownerGithubConnections.length > 0
|
|
385
385
|
? "Reconnect / add account"
|
|
386
|
-
: "Connect LifeOps GitHub"] }) }), ownerGithubConnections.length === 0 ? (_jsx("div", { className: "rounded-2xl border border-dashed border-border/45 bg-bg/55 p-4 text-xs text-muted", children: "No owner GitHub account linked yet." })) : (ownerGithubConnections.map((connection) => (_jsx(OwnerGithubConnectionCard, { connection: connection, busy: disconnectingOwnerConnectionId === connection.id, onDisconnect: handleDisconnectOwnerGithub }, connection.id))))] }), _jsx(SectionSurface, { title: "Agent GitHub", icon: _jsx(Shield, { className: "h-4 w-4" }),
|
|
386
|
+
: "Connect LifeOps GitHub"] }) }), ownerGithubConnections.length === 0 ? (_jsx("div", { className: "rounded-2xl border border-dashed border-border/45 bg-bg/55 p-4 text-xs text-muted", children: "No owner GitHub account linked yet." })) : (ownerGithubConnections.map((connection) => (_jsx(OwnerGithubConnectionCard, { connection: connection, busy: disconnectingOwnerConnectionId === connection.id, onDisconnect: handleDisconnectOwnerGithub }, connection.id))))] }), _jsx(SectionSurface, { title: "Agent GitHub", icon: _jsx(Shield, { className: "h-4 w-4" }), children: agentGithubEntries.length === 0 ? (_jsx("div", { className: "rounded-2xl border border-dashed border-border/45 bg-bg/55 p-4 text-xs text-muted", children: "No cloud agents found yet. Create or connect a cloud agent to give it its own GitHub identity." })) : (agentGithubEntries.map((entry) => (_jsx(AgentGithubCard, { entry: entry, ownerConnections: ownerGithubConnections, busyAgentId: busyAgentGithubId, onConnect: handleConnectAgentGithub, onDisconnect: handleDisconnectAgentGithub, onUseOwnerConnection: handleUseOwnerGithub }, entry.agent.agent_id)))) })] })] }))] })) : null, appEnabled ? _jsx(LifeOpsWorkspaceView, {}) : null] }));
|
|
387
387
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifeOpsSettingsSection.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsSettingsSection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LifeOpsSettingsSection.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsSettingsSection.tsx"],"names":[],"mappings":"AAkTA,wBAAgB,sBAAsB,4CA+BrC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Badge, Button,
|
|
3
|
-
import {
|
|
2
|
+
import { Badge, Button, } from "@elizaos/app-core";
|
|
3
|
+
import { Plug2, RefreshCw, } from "lucide-react";
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { useGoogleLifeOpsConnector } from "@elizaos/app-core";
|
|
6
6
|
import { useApp } from "@elizaos/app-core";
|
|
@@ -139,17 +139,16 @@ function GoogleConnectorSideCard({ apiBaseUrl, connector, side, }) {
|
|
|
139
139
|
const { activeMode, actionPending, connect, disconnect, error, loading, modeOptions, refresh, selectMode, status, } = connector;
|
|
140
140
|
const identity = readIdentity(status?.identity ?? null);
|
|
141
141
|
const capabilityBadges = status?.grantedCapabilities ?? [];
|
|
142
|
-
const expiresAtLabel = formatExpiry(status?.expiresAt ?? null);
|
|
143
142
|
const currentStatusLabel = statusLabel(status?.reason ?? "disconnected", status?.connected === true);
|
|
144
143
|
const setupDetails = useMemo(() => connectorSetupDetails(side, activeMode, apiBaseUrl), [activeMode, apiBaseUrl, side]);
|
|
145
|
-
return (_jsxs(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
144
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: sideTitle(side) }), status?.preferredByAgent ? (_jsx(Badge, { variant: "secondary", children: "Default" })) : null] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [status?.connected && !status.preferredByAgent ? (_jsx(Button, { size: "sm", variant: "outline", disabled: loading || actionPending, onClick: () => void selectMode(activeMode), children: "Use by default" })) : null, _jsxs(Button, { size: "sm", variant: "outline", disabled: loading || actionPending, onClick: () => void refresh(), children: [_jsx(RefreshCw, { className: "mr-1.5 h-3 w-3" }), "Refresh"] }), _jsx(Button, { size: "sm", variant: status?.connected ? "outline" : "default", disabled: loading || actionPending, onClick: () => void (status?.connected ? disconnect() : connect()), children: status?.connected
|
|
145
|
+
? "Disconnect"
|
|
146
|
+
: status?.reason === "needs_reauth"
|
|
147
|
+
? "Reconnect"
|
|
148
|
+
: "Connect" })] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2 text-sm", children: [_jsx("span", { className: "min-w-0 truncate font-semibold text-txt", children: identity.primary }), _jsx(Badge, { variant: modeTone(activeMode), children: modeLabel(activeMode) }), _jsx(Badge, { variant: "outline", children: currentStatusLabel }), capabilityBadges.map((capability) => (_jsx(Badge, { variant: "secondary", className: "text-2xs", children: capabilityLabel(capability) }, capability)))] }), _jsx("div", { className: "flex flex-wrap gap-1.5", children: modeOptions.map((mode) => {
|
|
149
|
+
const isActive = mode === activeMode;
|
|
150
|
+
return (_jsx(Button, { size: "sm", variant: isActive ? "default" : "outline", disabled: loading || actionPending, onClick: () => void selectMode(mode), children: modeLabel(mode) }, mode));
|
|
151
|
+
}) }), setupDetails.envVars.length > 0 ? (_jsxs("div", { className: "rounded-lg border border-border/50 bg-bg/40 px-3 py-2", children: [_jsx("span", { className: "text-xs font-semibold text-muted", children: "Config: " }), _jsx("span", { className: "font-mono text-xs text-txt", children: setupDetails.envVars.join(", ") })] })) : null, setupDetails.redirectUri ? (_jsxs("div", { className: "rounded-lg border border-border/50 bg-bg/40 px-3 py-2", children: [_jsx("span", { className: "text-xs font-semibold text-muted", children: "Redirect URI: " }), _jsx("span", { className: "break-all font-mono text-xs text-txt", children: setupDetails.redirectUri })] })) : null, error ? _jsx("div", { className: "text-xs text-danger", children: error }) : null] }));
|
|
153
152
|
}
|
|
154
153
|
export function LifeOpsSettingsSection() {
|
|
155
154
|
const { t: translate } = useApp();
|
|
@@ -157,5 +156,5 @@ export function LifeOpsSettingsSection() {
|
|
|
157
156
|
const agentConnector = useGoogleLifeOpsConnector({ side: "agent" });
|
|
158
157
|
const apiBaseUrl = useMemo(() => resolveLifeOpsSettingsApiBaseUrl(), []);
|
|
159
158
|
const t = typeof translate === "function" ? translate : (key) => key;
|
|
160
|
-
return (_jsxs("div", { className: "space-y-4", children: [_jsxs(
|
|
159
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center gap-2 text-muted", children: [_jsx(Plug2, { className: "h-4 w-4" }), _jsx("div", { className: "text-xs font-semibold uppercase tracking-wide", children: t("settings.sections.lifeops.label") })] }), _jsxs("div", { className: "grid gap-6 xl:grid-cols-2", children: [_jsx(GoogleConnectorSideCard, { apiBaseUrl: apiBaseUrl, connector: ownerConnector, side: "owner" }), _jsx(GoogleConnectorSideCard, { apiBaseUrl: apiBaseUrl, connector: agentConnector, side: "agent" })] }), _jsx(LifeOpsBrowserSetupPanel, {})] }));
|
|
161
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifeOpsWorkspaceView.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsWorkspaceView.tsx"],"names":[],"mappings":"AA2UA,wBAAgB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"LifeOpsWorkspaceView.d.ts","sourceRoot":"","sources":["../../../../../../apps/app-lifeops/src/LifeOpsWorkspaceView.tsx"],"names":[],"mappings":"AA2UA,wBAAgB,oBAAoB,4CAo8BnC"}
|
|
@@ -481,19 +481,19 @@ export function LifeOpsWorkspaceView() {
|
|
|
481
481
|
{ value: "email", label: "Email" },
|
|
482
482
|
];
|
|
483
483
|
if (!workspaceConnected) {
|
|
484
|
-
return (_jsx("div", { className: "space-y-4", children: _jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "LifeOps", heading: "Calendar and Inbox
|
|
484
|
+
return (_jsx("div", { className: "space-y-4", children: _jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "LifeOps", heading: "Calendar and Inbox", actions: _jsx(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => setState("tab", "settings"), children: "Open settings" }) }), _jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[14rem] rounded-3xl", title: "No Google connection yet" })] }) }));
|
|
485
485
|
}
|
|
486
|
-
return (_jsxs("div", { className: "space-y-4", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "LifeOps", heading: "Calendar and Inbox
|
|
486
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "LifeOps", heading: "Calendar and Inbox", actions: _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void refreshAll(), disabled: ownerConnector.loading || agentConnector.loading, children: [_jsx(RefreshCw, { className: "mr-2 h-3.5 w-3.5" }), "Refresh"] }), _jsxs(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => setState("tab", "settings"), children: [_jsx(Settings2, { className: "mr-2 h-3.5 w-3.5" }), "Settings"] })] }) }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-3", children: [_jsxs("div", { className: "rounded-2xl border border-border/40 bg-bg/72 p-4", children: [_jsx("div", { className: "text-2xs font-semibold uppercase tracking-[0.12em] text-muted", children: "Connector" }), _jsx("div", { className: "mt-2 text-sm font-semibold text-txt", children: dataStatus ? sideLabel(dataStatus.side) : "Disconnected" }), _jsx("div", { className: "mt-1 text-xs-tight text-muted", children: dataStatus ? modeLabel(dataStatus.mode) : "No account selected" })] }), _jsxs("div", { className: "rounded-2xl border border-border/40 bg-bg/72 p-4", children: [_jsx("div", { className: "text-2xs font-semibold uppercase tracking-[0.12em] text-muted", children: "Calendar" }), _jsxs("div", { className: "mt-2 text-sm font-semibold text-txt", children: [calendarSummary, " event", calendarSummary === 1 ? "" : "s"] }), _jsx("div", { className: "mt-1 text-xs-tight text-muted", children: pane === "week" ? "7 day window" : "Today’s agenda" })] }), _jsxs("div", { className: "rounded-2xl border border-border/40 bg-bg/72 p-4", children: [_jsx("div", { className: "text-2xs font-semibold uppercase tracking-[0.12em] text-muted", children: "Inbox" }), _jsxs("div", { className: "mt-2 text-sm font-semibold text-txt", children: [replyNeededCount, " reply needed"] }), _jsxs("div", { className: "mt-1 text-xs-tight text-muted", children: [mailSummary, " mail item", mailSummary === 1 ? "" : "s", " loaded"] })] })] }), _jsx("div", { className: "mt-4", children: _jsx(SegmentedControl, { "aria-label": "LifeOps workspace navigation", value: pane, onValueChange: (value) => setPane(value), items: paneItems.map((item) => ({
|
|
487
487
|
value: item.value,
|
|
488
488
|
label: item.label,
|
|
489
489
|
})), buttonClassName: "min-h-9 whitespace-nowrap px-3 py-2.5", "data-testid": "lifeops-workspace-nav" }) }), workspaceError ? (_jsx(PagePanel.Notice, { tone: "danger", className: "mt-4", children: workspaceError })) : null, loading &&
|
|
490
490
|
calendarEvents.length === 0 &&
|
|
491
|
-
gmailMessages.length === 0 ? (_jsx(PagePanel.Loading, { variant: "surface", heading: "Loading LifeOps workspace", className: "mt-4" })) : null] }), pane === "email" ? (_jsxs("div", { className: "grid gap-4 lg:grid-cols-[minmax(20rem,0.85fr)_minmax(0,1fr)]", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "Gmail", heading: "Reply-needed mail",
|
|
491
|
+
gmailMessages.length === 0 ? (_jsx(PagePanel.Loading, { variant: "surface", heading: "Loading LifeOps workspace", className: "mt-4" })) : null] }), pane === "email" ? (_jsxs("div", { className: "grid gap-4 lg:grid-cols-[minmax(20rem,0.85fr)_minmax(0,1fr)]", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "Gmail", heading: "Reply-needed mail", actions: _jsx(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void loadWorkspace(), children: "Refresh mail" }) }), _jsxs("div", { className: "space-y-3", children: [_jsx(Input, { "data-testid": "lifeops-mail-search", value: mailSearch, onChange: (event) => setMailSearch(event.target.value), placeholder: "Search subjects, senders, or snippets", "aria-label": "Search mail" }), _jsxs("label", { className: "flex items-center gap-2 text-xs text-muted", children: [_jsx("input", { type: "checkbox", checked: replyNeededOnly, onChange: (event) => setReplyNeededOnly(event.target.checked) }), "Reply-needed only"] }), _jsx("div", { className: "space-y-2", children: filteredGmailMessages.length === 0 ? (_jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[12rem] rounded-3xl", title: "No mail matches" })) : (filteredGmailMessages.map((message) => (_jsx(GmailMessageCard, { message: message, selected: message.id === selectedGmailMessage?.id, onSelect: setSelectedMessageId, timeZone: timeZone }, message.id)))) })] })] }), _jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "Draft", heading: selectedGmailMessage?.subject ?? "Select a message", description: selectedGmailMessage?.from ?? "No message selected" }), selectedGmailMessage ? (_jsxs("div", { className: "space-y-3", children: [_jsxs(DetailBlock, { title: "Message detail", children: [_jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Subject:" }), " ", selectedGmailMessage.subject] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "From:" }), " ", selectedGmailMessage.from] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Snippet:" }), " ", selectedGmailMessage.snippet] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Received:" }), " ", formatLocalDateTime(selectedGmailMessage.receivedAt, timeZone)] })] }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-3", children: [_jsxs("label", { className: "space-y-1 sm:col-span-1", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Tone" }), _jsxs("select", { value: draftTone, onChange: (event) => setDraftTone(event.target.value), className: "min-h-11 w-full rounded-xl border border-border/60 bg-card/96 px-3 py-2 text-sm text-txt shadow-sm", children: [_jsx("option", { value: "brief", children: "Brief" }), _jsx("option", { value: "neutral", children: "Neutral" }), _jsx("option", { value: "warm", children: "Warm" })] })] }), _jsxs("label", { className: "space-y-1 sm:col-span-2", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Intent" }), _jsx(Input, { "data-testid": "lifeops-draft-intent", value: draftIntent, onChange: (event) => setDraftIntent(event.target.value), placeholder: "What should the reply achieve?" })] })] }), _jsxs("label", { className: "flex items-center gap-2 text-xs text-muted", children: [_jsx("input", { type: "checkbox", checked: draftIncludeQuotedOriginal, onChange: (event) => setDraftIncludeQuotedOriginal(event.target.checked) }), "Include quoted original"] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { variant: "default", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void handleGenerateDraft(), disabled: !dataCapabilities.has("google.gmail.triage") || drafting, children: drafting ? "Drafting..." : "Generate draft" }), _jsx(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void loadWorkspace(), children: "Refresh triage" })] }), _jsx(Textarea, { "data-testid": "lifeops-draft-body", value: draftBody, onChange: (event) => setDraftBody(event.target.value), placeholder: "Draft body appears here", className: "min-h-48" }), draft ? (_jsxs(DetailBlock, { title: "Draft metadata", children: [_jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Send allowed:" }), " ", draft.sendAllowed ? "Yes" : "No"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Requires confirmation:" }), " ", draft.requiresConfirmation ? "Yes" : "No"] }), draft.previewLines.length > 0 ? (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "font-semibold text-txt", children: "Preview:" }), draft.previewLines.map((line) => (_jsx("div", { children: line }, line)))] })) : null] })) : null, _jsx("div", { className: "flex flex-wrap gap-2", children: _jsx(Button, { variant: "default", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void handleSendDraft(), disabled: !dataCapabilities.has("google.gmail.send") ||
|
|
492
492
|
sending ||
|
|
493
|
-
draftBody.trim().length === 0, children: sending ? "Sending..." : "Send reply" }) })] })) : (_jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[20rem] rounded-3xl", title: "Select a message"
|
|
493
|
+
draftBody.trim().length === 0, children: sending ? "Sending..." : "Send reply" }) })] })) : (_jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[20rem] rounded-3xl", title: "Select a message" }))] })] })) : (_jsxs("div", { className: "grid gap-4 lg:grid-cols-[minmax(20rem,0.85fr)_minmax(0,1fr)]", children: [_jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "Calendar", heading: pane === "week" ? "Week agenda" : "Today’s agenda", actions: _jsx(Button, { variant: "outline", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void loadWorkspace(), children: "Refresh calendar" }) }), _jsx("div", { className: "space-y-3", children: groupedCalendarEvents.length === 0 ? (_jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[12rem] rounded-3xl", title: "No upcoming events" })) : (groupedCalendarEvents.map((group) => (_jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "text-xs-tight font-semibold uppercase tracking-[0.12em] text-muted", children: group.label }), _jsx("div", { className: "space-y-2", children: group.events.map((event) => (_jsx(CalendarEventCard, { event: event, selected: event.id === selectedCalendarEvent?.id, onSelect: setSelectedCalendarId, timeZone: timeZone }, event.id))) })] }, group.dayKey)))) })] }), _jsxs(PagePanel, { variant: "section", className: "p-4 lg:p-5", children: [_jsx(PagePanel.Header, { eyebrow: "Detail", heading: selectedCalendarEvent?.title ?? "Select an event", description: selectedCalendarEvent
|
|
494
494
|
? formatEventWindow(selectedCalendarEvent, timeZone)
|
|
495
495
|
: "No calendar event selected." }), selectedCalendarEvent ? (_jsxs("div", { className: "space-y-3", children: [_jsxs(DetailBlock, { title: "Event detail", children: [_jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Location:" }), " ", selectedCalendarEvent.location || "—"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Starts:" }), " ", formatLocalDateTime(selectedCalendarEvent.startAt, timeZone)] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Ends:" }), " ", formatLocalDateTime(selectedCalendarEvent.endAt, timeZone)] }), selectedCalendarEvent.conferenceLink ? (_jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Conference:" }), " ", selectedCalendarEvent.conferenceLink] })) : null, selectedCalendarEvent.description.trim().length > 0 ? (_jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Description:" }), " ", selectedCalendarEvent.description] })) : null] }), calendarContext ? (_jsxs(DetailBlock, { title: "Preparation", children: [_jsxs("div", { children: [_jsx("span", { className: "font-semibold text-txt", children: "Starts in:" }), " ", calendarContext.startsInMinutes === null
|
|
496
496
|
? "—"
|
|
497
497
|
: `${calendarContext.startsInMinutes} minutes`] }), calendarContext.preparationChecklist.length > 0 ? (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "font-semibold text-txt", children: "Checklist:" }), calendarContext.preparationChecklist.map((item) => (_jsxs("div", { children: ["\u2022 ", item] }, item)))] })) : null, calendarContext.linkedMail.length > 0 ? (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "font-semibold text-txt", children: "Linked mail:" }), calendarContext.linkedMail.map((message) => (_jsxs("div", { children: [message.subject, " - ", message.from] }, message.id)))] })) : null] })) : null, _jsxs(DetailBlock, { title: "Quick create", children: [_jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [_jsxs("label", { className: "space-y-1 sm:col-span-2", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Title" }), _jsx(Input, { "data-testid": "lifeops-create-event-title", value: eventTitle, onChange: (event) => setEventTitle(event.target.value), placeholder: "Weekly planning" })] }), _jsxs("label", { className: "space-y-1", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Date" }), _jsx(Input, { "data-testid": "lifeops-create-event-date", type: "date", value: eventDate, onChange: (event) => setEventDate(event.target.value) })] }), _jsxs("label", { className: "space-y-1", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Time" }), _jsx(Input, { "data-testid": "lifeops-create-event-time", type: "time", value: eventTime, onChange: (event) => setEventTime(event.target.value) })] }), _jsxs("label", { className: "space-y-1", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Duration" }), _jsx(Input, { "data-testid": "lifeops-create-event-duration", type: "number", min: 5, step: 5, value: eventDurationMinutes, onChange: (event) => setEventDurationMinutes(event.target.value) })] }), _jsxs("label", { className: "space-y-1 sm:col-span-2", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Location" }), _jsx(Input, { "data-testid": "lifeops-create-event-location", value: eventLocation, onChange: (event) => setEventLocation(event.target.value), placeholder: "Conference room or link" })] }), _jsxs("label", { className: "space-y-1 sm:col-span-2", children: [_jsx("span", { className: "text-xs-tight font-semibold uppercase tracking-[0.08em] text-muted", children: "Description" }), _jsx(Textarea, { "data-testid": "lifeops-create-event-description", value: eventDescription, onChange: (event) => setEventDescription(event.target.value), placeholder: "Add prep notes", className: "min-h-28" })] })] }), _jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: _jsx(Button, { variant: "default", size: "sm", className: "rounded-full px-4 text-xs-tight font-semibold", onClick: () => void handleCreateEvent(), disabled: creatingEvent ||
|
|
498
|
-
!dataCapabilities.has("google.calendar.write"), children: creatingEvent ? "Creating..." : "Create event" }) })] })] })) : (_jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[20rem] rounded-3xl", title: "Select a day"
|
|
498
|
+
!dataCapabilities.has("google.calendar.write"), children: creatingEvent ? "Creating..." : "Create event" }) })] })] })) : (_jsx(PagePanel.Empty, { variant: "surface", className: "min-h-[20rem] rounded-3xl", title: "Select a day" }))] })] }))] }));
|
|
499
499
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/app-state.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAC7D,CAAC;AAMF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/app-state.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAC7D,CAAC;AAMF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,OAAO,CAAC,eAAe,CAAC,CAqB1B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,eAAe,CAAC,CAc1B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logger } from "@elizaos/core";
|
|
2
2
|
const LIFEOPS_APP_STATE_CACHE_KEY = "eliza:lifeops-app-state";
|
|
3
3
|
const DEFAULT_LIFEOPS_APP_STATE = {
|
|
4
|
-
enabled:
|
|
4
|
+
enabled: true,
|
|
5
5
|
};
|
|
6
6
|
export async function loadLifeOpsAppState(runtime) {
|
|
7
7
|
if (!runtime) {
|
|
@@ -9,8 +9,11 @@ export async function loadLifeOpsAppState(runtime) {
|
|
|
9
9
|
}
|
|
10
10
|
try {
|
|
11
11
|
const cached = await runtime.getCache(LIFEOPS_APP_STATE_CACHE_KEY);
|
|
12
|
+
if (cached == null) {
|
|
13
|
+
return DEFAULT_LIFEOPS_APP_STATE;
|
|
14
|
+
}
|
|
12
15
|
return {
|
|
13
|
-
enabled: cached
|
|
16
|
+
enabled: cached.enabled !== false,
|
|
14
17
|
};
|
|
15
18
|
}
|
|
16
19
|
catch (error) {
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Selfcontrol role checking — delegates to the core @elizaos/core roles module.
|
|
3
|
+
*
|
|
4
|
+
* Previously this was a full reimplementation that diverged from core,
|
|
5
|
+
* missing world-resolution fallbacks and silently swallowing errors.
|
|
6
|
+
* Now it's a thin adapter that re-exports the core checkSenderRole
|
|
7
|
+
* with the extra `hasPrivateAccess` field for backward compatibility.
|
|
8
|
+
*
|
|
9
|
+
* When the core module returns null (no world found for the message),
|
|
10
|
+
* we fall back to checking whether the sender matches the configured
|
|
11
|
+
* admin entity ID. This covers dashboard/terminal sessions where the
|
|
12
|
+
* world may not exist yet or the room has no worldId.
|
|
13
|
+
*/
|
|
14
|
+
import { type IAgentRuntime, type Memory, type RoleCheckResult as CoreRoleCheckResult } from "@elizaos/core";
|
|
15
|
+
export type RoleCheckResult = CoreRoleCheckResult & {
|
|
9
16
|
hasPrivateAccess: boolean;
|
|
10
17
|
};
|
|
11
18
|
export declare function checkSenderRole(runtime: IAgentRuntime, message: Memory): Promise<RoleCheckResult | null>;
|
|
12
|
-
export {};
|
|
13
19
|
//# sourceMappingURL=roles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/selfcontrol/roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/selfcontrol/roles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,eAAe,IAAI,mBAAmB,EAE5C,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG;IAClD,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiCjC"}
|
|
@@ -1,228 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (typeof configured === "string" && configured.trim().length > 0) {
|
|
22
|
-
return configured.trim();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return metadata?.ownership?.ownerId ?? null;
|
|
26
|
-
}
|
|
27
|
-
async function resolveWorldForMessage(runtime, message) {
|
|
28
|
-
const room = await runtime.getRoom(message.roomId);
|
|
29
|
-
if (!room?.worldId) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
const world = await runtime.getWorld(room.worldId);
|
|
33
|
-
if (!world) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
return (world.metadata ?? {});
|
|
37
|
-
}
|
|
38
|
-
function normalizeIdentityValue(value) {
|
|
39
|
-
if (typeof value === "number" || typeof value === "bigint") {
|
|
40
|
-
return String(value);
|
|
41
|
-
}
|
|
42
|
-
if (typeof value !== "string") {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const normalized = value.trim();
|
|
46
|
-
if (normalized.length === 0) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
return normalized.toLowerCase();
|
|
50
|
-
}
|
|
51
|
-
function collectConnectorIdentities(metadata) {
|
|
52
|
-
if (!metadata) {
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
const identities = [];
|
|
56
|
-
for (const [connector, rawConnectorData] of Object.entries(metadata)) {
|
|
57
|
-
if (!rawConnectorData || typeof rawConnectorData !== "object") {
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
const connectorData = rawConnectorData;
|
|
61
|
-
const values = new Set();
|
|
62
|
-
for (const field of ["id", "userId", "user_id", "fromId", "username"]) {
|
|
63
|
-
const normalized = normalizeIdentityValue(connectorData[field]);
|
|
64
|
-
if (normalized) {
|
|
65
|
-
values.add(normalized);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (values.size > 0) {
|
|
69
|
-
identities.push({ connector, values });
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return identities;
|
|
73
|
-
}
|
|
74
|
-
function extractLiveMessageMetadata(message) {
|
|
75
|
-
const metadata = message.content?.metadata;
|
|
76
|
-
if (metadata && typeof metadata === "object" && !Array.isArray(metadata)) {
|
|
77
|
-
return metadata;
|
|
78
|
-
}
|
|
79
|
-
return undefined;
|
|
80
|
-
}
|
|
81
|
-
function extractMessageConnectorMetadata(message) {
|
|
82
|
-
const metadata = message
|
|
83
|
-
.metadata;
|
|
84
|
-
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
const source = typeof message.content?.source === "string"
|
|
88
|
-
? message.content.source
|
|
89
|
-
: undefined;
|
|
90
|
-
const result = {};
|
|
91
|
-
const fromId = metadata.fromId ??
|
|
92
|
-
metadata.discordUserId ??
|
|
93
|
-
metadata.telegramUserId ??
|
|
94
|
-
metadata.userId ??
|
|
95
|
-
metadata.id;
|
|
96
|
-
const username = metadata.username ?? metadata.telegramUsername;
|
|
97
|
-
if (source === "discord" ||
|
|
98
|
-
typeof metadata.discordServerId === "string" ||
|
|
99
|
-
typeof metadata.discordChannelId === "string") {
|
|
100
|
-
result.discord = {
|
|
101
|
-
userId: fromId,
|
|
102
|
-
username,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
if (source === "telegram" ||
|
|
106
|
-
typeof metadata.telegramChatId === "string" ||
|
|
107
|
-
typeof metadata.telegramUserId === "string") {
|
|
108
|
-
result.telegram = {
|
|
109
|
-
id: fromId,
|
|
110
|
-
username,
|
|
1
|
+
/**
|
|
2
|
+
* Selfcontrol role checking — delegates to the core @elizaos/core roles module.
|
|
3
|
+
*
|
|
4
|
+
* Previously this was a full reimplementation that diverged from core,
|
|
5
|
+
* missing world-resolution fallbacks and silently swallowing errors.
|
|
6
|
+
* Now it's a thin adapter that re-exports the core checkSenderRole
|
|
7
|
+
* with the extra `hasPrivateAccess` field for backward compatibility.
|
|
8
|
+
*
|
|
9
|
+
* When the core module returns null (no world found for the message),
|
|
10
|
+
* we fall back to checking whether the sender matches the configured
|
|
11
|
+
* admin entity ID. This covers dashboard/terminal sessions where the
|
|
12
|
+
* world may not exist yet or the room has no worldId.
|
|
13
|
+
*/
|
|
14
|
+
import { checkSenderRole as coreCheckSenderRole, logger, resolveCanonicalOwnerId, } from "@elizaos/core";
|
|
15
|
+
export async function checkSenderRole(runtime, message) {
|
|
16
|
+
const result = await coreCheckSenderRole(runtime, message);
|
|
17
|
+
if (result) {
|
|
18
|
+
return {
|
|
19
|
+
...result,
|
|
20
|
+
hasPrivateAccess: result.isAdmin,
|
|
111
21
|
};
|
|
112
22
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
const leftIdentities = collectConnectorIdentities(left);
|
|
120
|
-
const rightByConnector = new Map(collectConnectorIdentities(right).map((identity) => [
|
|
121
|
-
identity.connector,
|
|
122
|
-
identity.values,
|
|
123
|
-
]));
|
|
124
|
-
for (const identity of leftIdentities) {
|
|
125
|
-
const otherValues = rightByConnector.get(identity.connector);
|
|
126
|
-
if (!otherValues) {
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
for (const value of identity.values) {
|
|
130
|
-
if (otherValues.has(value)) {
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
async function getEntity(runtime, entityId) {
|
|
138
|
-
if (typeof runtime.getEntityById !== "function") {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
const entity = await runtime.getEntityById(entityId);
|
|
142
|
-
return entity ? entity : null;
|
|
143
|
-
}
|
|
144
|
-
function isConfirmedIdentityLink(relationship, senderEntityId, canonicalOwnerId) {
|
|
145
|
-
if (!Array.isArray(relationship.tags)) {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
if (!relationship.tags.includes(IDENTITY_LINK_TAG)) {
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
const status = normalizeIdentityValue(relationship.metadata?.status);
|
|
152
|
-
if (status !== "confirmed") {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
return ((relationship.sourceEntityId === senderEntityId &&
|
|
156
|
-
relationship.targetEntityId === canonicalOwnerId) ||
|
|
157
|
-
(relationship.sourceEntityId === canonicalOwnerId &&
|
|
158
|
-
relationship.targetEntityId === senderEntityId));
|
|
159
|
-
}
|
|
160
|
-
async function senderMatchesCanonicalOwner(runtime, message, canonicalOwnerId) {
|
|
23
|
+
// Fallback: no world found for this message's room. This happens for
|
|
24
|
+
// dashboard/terminal sessions where the world may not be set up yet.
|
|
25
|
+
// If the sender matches the configured canonical owner, grant OWNER.
|
|
26
|
+
const canonicalOwnerId = resolveCanonicalOwnerId(runtime);
|
|
161
27
|
const senderEntityId = String(message.entityId);
|
|
162
|
-
if (senderEntityId === canonicalOwnerId) {
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
const ownerEntity = await getEntity(runtime, canonicalOwnerId);
|
|
166
|
-
const ownerMetadata = ownerEntity?.metadata && typeof ownerEntity.metadata === "object"
|
|
167
|
-
? ownerEntity.metadata
|
|
168
|
-
: undefined;
|
|
169
|
-
if (ownerMetadata) {
|
|
170
|
-
const senderEntity = await getEntity(runtime, senderEntityId);
|
|
171
|
-
const senderMetadataCandidates = [
|
|
172
|
-
extractMessageConnectorMetadata(message),
|
|
173
|
-
extractLiveMessageMetadata(message),
|
|
174
|
-
senderEntity?.metadata && typeof senderEntity.metadata === "object"
|
|
175
|
-
? senderEntity.metadata
|
|
176
|
-
: undefined,
|
|
177
|
-
];
|
|
178
|
-
for (const senderMetadata of senderMetadataCandidates) {
|
|
179
|
-
if (sharesConnectorIdentity(senderMetadata, ownerMetadata)) {
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (typeof runtime.getRelationships !== "function") {
|
|
185
|
-
return false;
|
|
186
|
-
}
|
|
187
|
-
const relationships = (await runtime.getRelationships({
|
|
188
|
-
entityIds: [senderEntityId],
|
|
189
|
-
tags: [IDENTITY_LINK_TAG],
|
|
190
|
-
}));
|
|
191
|
-
return relationships.some((relationship) => isConfirmedIdentityLink(relationship, senderEntityId, canonicalOwnerId));
|
|
192
|
-
}
|
|
193
|
-
export async function checkSenderRole(runtime, message) {
|
|
194
|
-
try {
|
|
195
|
-
const metadata = await resolveWorldForMessage(runtime, message);
|
|
196
|
-
if (!metadata) {
|
|
197
|
-
return null;
|
|
198
|
-
}
|
|
199
|
-
const senderEntityId = String(message.entityId);
|
|
200
|
-
const canonicalOwnerId = resolveCanonicalOwnerId(runtime, metadata);
|
|
201
|
-
let role;
|
|
202
|
-
if (canonicalOwnerId &&
|
|
203
|
-
(await senderMatchesCanonicalOwner(runtime, message, canonicalOwnerId))) {
|
|
204
|
-
role = "OWNER";
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
const storedRole = normalizeRole(metadata.roles?.[senderEntityId]);
|
|
208
|
-
role =
|
|
209
|
-
canonicalOwnerId &&
|
|
210
|
-
storedRole === "OWNER" &&
|
|
211
|
-
senderEntityId !== canonicalOwnerId
|
|
212
|
-
? "GUEST"
|
|
213
|
-
: storedRole;
|
|
214
|
-
}
|
|
215
|
-
const isAdmin = role === "OWNER" || role === "ADMIN";
|
|
28
|
+
if (canonicalOwnerId && senderEntityId === canonicalOwnerId) {
|
|
29
|
+
logger.debug("[selfcontrol] No world for message room, but sender matches configured admin entity — granting OWNER");
|
|
216
30
|
return {
|
|
217
31
|
entityId: senderEntityId,
|
|
218
|
-
role,
|
|
219
|
-
isOwner:
|
|
220
|
-
isAdmin,
|
|
221
|
-
canManageRoles:
|
|
222
|
-
hasPrivateAccess:
|
|
32
|
+
role: "OWNER",
|
|
33
|
+
isOwner: true,
|
|
34
|
+
isAdmin: true,
|
|
35
|
+
canManageRoles: true,
|
|
36
|
+
hasPrivateAccess: true,
|
|
223
37
|
};
|
|
224
38
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
39
|
+
logger.debug("[selfcontrol] checkSenderRole returned null — no world found and sender does not match configured admin entity");
|
|
40
|
+
return null;
|
|
228
41
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/app-core",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.170",
|
|
4
4
|
"description": "Shared application core for elizaOS white-label agent apps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -411,17 +411,17 @@
|
|
|
411
411
|
"@capacitor/keyboard": "8.0.0",
|
|
412
412
|
"@capacitor/preferences": "^8.0.1",
|
|
413
413
|
"@clack/prompts": "^1.0.0",
|
|
414
|
-
"@elizaos/agent": "^2.0.0-alpha.
|
|
414
|
+
"@elizaos/agent": "^2.0.0-alpha.170",
|
|
415
415
|
"@elizaos/app-companion": "^0.0.0",
|
|
416
416
|
"@elizaos/app-shopify": "^0.0.0",
|
|
417
417
|
"@elizaos/app-steward": "^0.0.0",
|
|
418
418
|
"@elizaos/app-task-coordinator": "^0.0.0",
|
|
419
419
|
"@elizaos/app-training": "^0.0.1",
|
|
420
420
|
"@elizaos/app-vincent": "^0.0.0",
|
|
421
|
-
"@elizaos/core": "^2.0.0-alpha.
|
|
421
|
+
"@elizaos/core": "^2.0.0-alpha.170",
|
|
422
422
|
"@elizaos/plugin-wechat": "^0.1.0",
|
|
423
|
-
"@elizaos/shared": "^2.0.0-alpha.
|
|
424
|
-
"@elizaos/ui": "^2.0.0-alpha.
|
|
423
|
+
"@elizaos/shared": "^2.0.0-alpha.170",
|
|
424
|
+
"@elizaos/ui": "^2.0.0-alpha.170",
|
|
425
425
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
426
426
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
427
427
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-plugins.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/runtime/core-plugins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA2B,CAAC;AAE9E,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"core-plugins.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/runtime/core-plugins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA2B,CAAC;AAE9E,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAiBzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EA4BlD,CAAC"}
|
|
@@ -20,6 +20,7 @@ export const CORE_PLUGINS = [
|
|
|
20
20
|
"@elizaos/plugin-shell", // shell command execution
|
|
21
21
|
"@elizaos/plugin-agent-skills", // skill execution and marketplace runtime
|
|
22
22
|
"@elizaos/plugin-commands", // slash command handling (skills auto-register as /commands)
|
|
23
|
+
"@elizaos/app-lifeops", // LifeOps: personal ops — tasks, goals, calendar, inbox, browser companions, website blocking
|
|
23
24
|
// Built-in runtime capabilities (no longer external plugins):
|
|
24
25
|
// - experience, form, clipboard, personality: advanced capabilities (advancedCapabilities: true)
|
|
25
26
|
// - trust: core capability (enableTrust: true)
|
|
@@ -34,7 +35,7 @@ export const CORE_PLUGINS = [
|
|
|
34
35
|
export const OPTIONAL_CORE_PLUGINS = [
|
|
35
36
|
// plugin-manager, secrets-manager, trust: now built-in core capabilities
|
|
36
37
|
// Enable via character settings: ENABLE_PLUGIN_MANAGER, ENABLE_SECRETS_MANAGER, ENABLE_TRUST
|
|
37
|
-
"@elizaos/app-lifeops"
|
|
38
|
+
// "@elizaos/app-lifeops" — moved to CORE_PLUGINS above
|
|
38
39
|
"@elizaos/plugin-pdf", // PDF processing (published bundle broken in alpha.15)
|
|
39
40
|
"@elizaos/plugin-cua", // CUA computer-use agent (cloud sandbox automation)
|
|
40
41
|
"@elizaos/plugin-obsidian", // Obsidian vault CLI integration
|
|
@@ -131,7 +131,7 @@ ElizaClient.prototype.createCloudCompatAgentManagedGithubOauth =
|
|
|
131
131
|
params.set("return_url", request.returnUrl);
|
|
132
132
|
}
|
|
133
133
|
const fallback = await this.initiateCloudOauth("github", {
|
|
134
|
-
redirectUrl: `/api/v1/
|
|
134
|
+
redirectUrl: `/api/v1/milady/lifeops/github-complete?${params.toString()}`,
|
|
135
135
|
connectionRole: "agent",
|
|
136
136
|
scopes: request.scopes,
|
|
137
137
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins-compat-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/plugins-compat-routes.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,eAAe,CAAC;AAuB1D,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAQ/B,KAAK,cAAc,GACf,aAAa,GACb,WAAW,GACX,WAAW,GACX,UAAU,GACV,KAAK,GACL,SAAS,CAAC;AA0Cd,UAAU,qBAAqB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,gBAAgB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,eAAe,GAChB,mBAAmB,GACnB,sBAAsB,GACtB,sBAAsB,GACtB,qBAAqB,CAAC;AAE1B,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,UAAU,6BAA6B;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,6BAA6B,CAAC;IACvC,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAkRD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,kBAAkB,EAAE,EAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EACpD,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"plugins-compat-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/plugins-compat-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -244,7 +244,13 @@ export function analyzePluginStateDrift(pluginList, configRecord, configEntries,
|
|
|
244
244
|
compatEnabled !== entryEnabled) {
|
|
245
245
|
driftFlags.push("entries_vs_compat");
|
|
246
246
|
}
|
|
247
|
-
|
|
247
|
+
// Connector and streaming plugins load from config.connectors / config.streaming,
|
|
248
|
+
// not from plugins.allow. Only flag allowlist drift for plugins whose load path
|
|
249
|
+
// actually depends on the allow list (i.e. optional core plugins).
|
|
250
|
+
if (enabledAllowList !== null &&
|
|
251
|
+
entryEnabled !== undefined &&
|
|
252
|
+
category !== "connector" &&
|
|
253
|
+
category !== "streaming") {
|
|
248
254
|
if (enabledAllowList !== entryEnabled) {
|
|
249
255
|
driftFlags.push("entries_vs_allowlist");
|
|
250
256
|
}
|
|
@@ -117,9 +117,9 @@ export function Header({ mobileLeft, pageRightExtras, transparent: _transparent
|
|
|
117
117
|
}, children: _jsx(Menu, { className: "pointer-events-none w-5 h-5" }) })) : null, children: showNavigationMenu ? (_jsx("nav", { className: "scrollbar-hide hidden flex-1 items-center justify-start gap-1.5 overflow-x-auto whitespace-nowrap sm:flex", children: tabGroups.map((group) => {
|
|
118
118
|
const primaryTab = group.tabs[0];
|
|
119
119
|
const isActive = group.tabs.includes(tab);
|
|
120
|
-
return (_jsxs(Button, { variant:
|
|
121
|
-
? "border-
|
|
122
|
-
: "text-muted hover:
|
|
120
|
+
return (_jsxs(Button, { variant: "ghost", "data-testid": `header-nav-button-${primaryTab}`, className: `relative z-10 min-h-touch shrink-0 rounded-none border-b-2 border-transparent bg-transparent px-3 py-2.5 text-xs transition-all duration-200 md:px-3.5 xl:px-4 ${isActive
|
|
121
|
+
? "border-b-accent text-accent font-semibold"
|
|
122
|
+
: "text-muted hover:text-txt"}`, onClick: () => setTab(primaryTab), title: group.description, style: {
|
|
123
123
|
clipPath: "none",
|
|
124
124
|
WebkitClipPath: "none",
|
|
125
125
|
touchAction: "manipulation",
|
|
@@ -136,9 +136,9 @@ export function Header({ mobileLeft, pageRightExtras, transparent: _transparent
|
|
|
136
136
|
}, children: _jsx(X, { className: "pointer-events-none h-4 w-4" }) })] }) }), _jsxs("div", { className: "flex flex-1 flex-col px-3 py-3", children: [_jsx("div", { className: "flex-1 overflow-y-auto pr-1", children: _jsx("div", { className: "flex flex-col gap-1", children: tabGroups.map((group, index) => {
|
|
137
137
|
const primaryTab = group.tabs[0];
|
|
138
138
|
const isActive = group.tabs.includes(tab);
|
|
139
|
-
return (_jsxs(Button, { variant:
|
|
140
|
-
? "border-
|
|
141
|
-
: "
|
|
139
|
+
return (_jsxs(Button, { variant: "ghost", className: `flex min-h-[48px] w-full rounded-none border-b-2 border-transparent bg-transparent px-3 py-3 text-sm font-medium transition-all duration-200 ${isActive
|
|
140
|
+
? "border-b-accent text-accent font-semibold"
|
|
141
|
+
: "text-txt hover:text-accent/70"}`, style: {
|
|
142
142
|
clipPath: "none",
|
|
143
143
|
WebkitClipPath: "none",
|
|
144
144
|
touchAction: "manipulation",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eliza.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/eliza.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAiBxC,cAAc,8BAA8B,CAAC;AAK7C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,qBAAqB,IAAI,6BAA6B,EACtD,gBAAgB,IAAI,wBAAwB,EAE5C,kBAAkB,IAAI,0BAA0B,EAGhD,UAAU,IAAI,kBAAkB,EACjC,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAiDhF,eAAO,MAAM,kBAAkB;;;;CAG9B,CAAC;AAkEF,wBAAgB,kBAAkB,CAChC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,GACrD,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAa/C;AAED,wBAAgB,qBAAqB,CACnC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,6BAA6B,CAAC,GACxD,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAKlD;
|
|
1
|
+
{"version":3,"file":"eliza.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/eliza.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAiBxC,cAAc,8BAA8B,CAAC;AAK7C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,qBAAqB,IAAI,6BAA6B,EACtD,gBAAgB,IAAI,wBAAwB,EAE5C,kBAAkB,IAAI,0BAA0B,EAGhD,UAAU,IAAI,kBAAkB,EACjC,MAAM,8BAA8B,CAAC;AAQtC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAiDhF,eAAO,MAAM,kBAAkB;;;;CAG9B,CAAC;AAkEF,wBAAgB,kBAAkB,CAChC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,GACrD,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAa/C;AAED,wBAAgB,qBAAqB,CACnC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,6BAA6B,CAAC,GACxD,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAKlD;AAmcD,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CACjD;AAED,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,0BAA+B,GACpC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAqB/D;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CACjD;AAuOD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBxB;AAED,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAE5D;AAED,wBAAsB,UAAU,CAC9B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CA0HzD"}
|
|
@@ -149,8 +149,17 @@ async function registerAppRoutePlugins(runtime) {
|
|
|
149
149
|
const { lifeopsPlugin } = await import("@elizaos/app-lifeops/routes/plugin");
|
|
150
150
|
for (const plugin of [vincentPlugin, shopifyPlugin, stewardPlugin, lifeopsPlugin]) {
|
|
151
151
|
try {
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
// Push rawPath routes directly onto runtime.routes to avoid the core's
|
|
153
|
+
// registerPlugin() path mangling (which prepends /<pluginName>/ to every
|
|
154
|
+
// route path). The rawPath flag means these routes already have their
|
|
155
|
+
// final absolute paths (e.g. /api/lifeops/app-state).
|
|
156
|
+
if (plugin.routes?.length) {
|
|
157
|
+
for (const route of plugin.routes) {
|
|
158
|
+
const routePath = route.path.startsWith("/") ? route.path : `/${route.path}`;
|
|
159
|
+
runtime.routes.push({ ...route, path: routePath });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
logger.info(`[eliza] Registered app route plugin: ${plugin.name} (${plugin.routes?.length ?? 0} routes)`);
|
|
154
163
|
}
|
|
155
164
|
catch (err) {
|
|
156
165
|
logger.warn(`[eliza] Failed to register app route plugin ${plugin.name}: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1668,11 +1668,6 @@ export declare const allActionsSpec: {
|
|
|
1668
1668
|
readonly description: "Check ElizaCloud credit balance, container costs, and estimated remaining runtime.";
|
|
1669
1669
|
readonly parameters: readonly [];
|
|
1670
1670
|
readonly similes: readonly ["check credits", "check balance", "how much credit", "cloud billing"];
|
|
1671
|
-
}, {
|
|
1672
|
-
readonly name: "CLEAR_SHELL_HISTORY";
|
|
1673
|
-
readonly description: "Clears the recorded history of shell commands for the current conversation";
|
|
1674
|
-
readonly parameters: readonly [];
|
|
1675
|
-
readonly similes: readonly ["RESET_SHELL", "CLEAR_TERMINAL", "CLEAR_HISTORY", "RESET_HISTORY"];
|
|
1676
1671
|
}, {
|
|
1677
1672
|
readonly name: "COMMANDS_LIST";
|
|
1678
1673
|
readonly description: "List all available commands with their aliases. Only activates for /commands or /cmds slash commands.";
|
|
@@ -1715,16 +1710,6 @@ export declare const allActionsSpec: {
|
|
|
1715
1710
|
readonly description: "Edit an existing message in a Discord channel";
|
|
1716
1711
|
readonly parameters: readonly [];
|
|
1717
1712
|
readonly similes: readonly ["UPDATE_MESSAGE", "MODIFY_MESSAGE", "CHANGE_MESSAGE", "EDIT_DISCORD_MESSAGE"];
|
|
1718
|
-
}, {
|
|
1719
|
-
readonly name: "EVM_TRANSFER_TOKENS";
|
|
1720
|
-
readonly description: "Transfer tokens between addresses on the same chain";
|
|
1721
|
-
readonly parameters: readonly [];
|
|
1722
|
-
readonly similes: readonly ["EVM_TRANSFER", "EVM_SEND_TOKENS", "EVM_TOKEN_TRANSFER", "EVM_MOVE_TOKENS"];
|
|
1723
|
-
}, {
|
|
1724
|
-
readonly name: "EXECUTE_COMMAND";
|
|
1725
|
-
readonly description: "Execute ANY shell command in the terminal. Use this to run ANY command including: brew install, npm install, apt-get, system commands, file operations (create, write, delete), navigate directories, execute scripts, or perform any other shell operation. I CAN and SHOULD execute commands when asked. This includes brew, npm, git, ls, cd, echo, touch, cat, mkdir, system_profiler, and literally ANY other terminal command.";
|
|
1726
|
-
readonly parameters: readonly [];
|
|
1727
|
-
readonly similes: readonly ["RUN_COMMAND", "SHELL_COMMAND", "TERMINAL_COMMAND", "EXEC", "RUN", "EXECUTE", "CREATE_FILE", "WRITE_FILE", "MAKE_FILE", "INSTALL", "BREW_INSTALL", "NPM_INSTALL", "APT_INSTALL"];
|
|
1728
1713
|
}, {
|
|
1729
1714
|
readonly name: "FINALIZE_WORKSPACE";
|
|
1730
1715
|
readonly description: "Finalize workspace changes by committing, pushing, and optionally creating a pull request. ";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-docs.d.ts","sourceRoot":"","sources":["../../../../../../typescript/src/generated/action-docs.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgrC2C,CAAC;AACxE,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"action-docs.d.ts","sourceRoot":"","sources":["../../../../../../typescript/src/generated/action-docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,8BAA8B,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,wBAAwB,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,uBAAuB,EAAE,CAAC,EAAE,CAAC;IAC3D,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,0BAA0B,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAG,OAAgB,CAAC;AACvD,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AACtD,eAAO,MAAM,wBAAwB,EAAG,OAAgB,CAAC;AACzD,eAAO,MAAM,uBAAuB,EAAG,OAAgB,CAAC;AACxD,eAAO,MAAM,yBAAyB,EAAG,OAAgB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,EAAG,OAAgB,CAAC;AAEzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgrC2C,CAAC;AACxE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4iE4C,CAAC;AACxE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoJ6C,CAAC;AAC5E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoJ8C,CAAC;AAC5E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoK9B,CAAC;AACF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoK7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,SAAS,EAA4B,CAAC;AAC5E,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAA2B,CAAC;AAC1E,eAAO,MAAM,gBAAgB,EAAE,SAAS,WAAW,EACvB,CAAC;AAC7B,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EACvB,CAAC;AAC5B,eAAO,MAAM,iBAAiB,EAAE,SAAS,YAAY,EACvB,CAAC;AAC/B,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EACvB,CAAC"}
|
|
@@ -2392,17 +2392,6 @@ export const allActionsSpec = {
|
|
|
2392
2392
|
"cloud billing",
|
|
2393
2393
|
],
|
|
2394
2394
|
},
|
|
2395
|
-
{
|
|
2396
|
-
name: "CLEAR_SHELL_HISTORY",
|
|
2397
|
-
description: "Clears the recorded history of shell commands for the current conversation",
|
|
2398
|
-
parameters: [],
|
|
2399
|
-
similes: [
|
|
2400
|
-
"RESET_SHELL",
|
|
2401
|
-
"CLEAR_TERMINAL",
|
|
2402
|
-
"CLEAR_HISTORY",
|
|
2403
|
-
"RESET_HISTORY",
|
|
2404
|
-
],
|
|
2405
|
-
},
|
|
2406
2395
|
{
|
|
2407
2396
|
name: "COMMANDS_LIST",
|
|
2408
2397
|
description: "List all available commands with their aliases. Only activates for /commands or /cmds slash commands.",
|
|
@@ -2469,37 +2458,6 @@ export const allActionsSpec = {
|
|
|
2469
2458
|
"EDIT_DISCORD_MESSAGE",
|
|
2470
2459
|
],
|
|
2471
2460
|
},
|
|
2472
|
-
{
|
|
2473
|
-
name: "EVM_TRANSFER_TOKENS",
|
|
2474
|
-
description: "Transfer tokens between addresses on the same chain",
|
|
2475
|
-
parameters: [],
|
|
2476
|
-
similes: [
|
|
2477
|
-
"EVM_TRANSFER",
|
|
2478
|
-
"EVM_SEND_TOKENS",
|
|
2479
|
-
"EVM_TOKEN_TRANSFER",
|
|
2480
|
-
"EVM_MOVE_TOKENS",
|
|
2481
|
-
],
|
|
2482
|
-
},
|
|
2483
|
-
{
|
|
2484
|
-
name: "EXECUTE_COMMAND",
|
|
2485
|
-
description: "Execute ANY shell command in the terminal. Use this to run ANY command including: brew install, npm install, apt-get, system commands, file operations (create, write, delete), navigate directories, execute scripts, or perform any other shell operation. I CAN and SHOULD execute commands when asked. This includes brew, npm, git, ls, cd, echo, touch, cat, mkdir, system_profiler, and literally ANY other terminal command.",
|
|
2486
|
-
parameters: [],
|
|
2487
|
-
similes: [
|
|
2488
|
-
"RUN_COMMAND",
|
|
2489
|
-
"SHELL_COMMAND",
|
|
2490
|
-
"TERMINAL_COMMAND",
|
|
2491
|
-
"EXEC",
|
|
2492
|
-
"RUN",
|
|
2493
|
-
"EXECUTE",
|
|
2494
|
-
"CREATE_FILE",
|
|
2495
|
-
"WRITE_FILE",
|
|
2496
|
-
"MAKE_FILE",
|
|
2497
|
-
"INSTALL",
|
|
2498
|
-
"BREW_INSTALL",
|
|
2499
|
-
"NPM_INSTALL",
|
|
2500
|
-
"APT_INSTALL",
|
|
2501
|
-
],
|
|
2502
|
-
},
|
|
2503
2461
|
{
|
|
2504
2462
|
name: "FINALIZE_WORKSPACE",
|
|
2505
2463
|
description: "Finalize workspace changes by committing, pushing, and optionally creating a pull request. ",
|