): DreamingProps {
const props: DreamingProps = {
+ access: {
+ canOpenConfig: true,
+ canBackfillDiary: true,
+ canDedupeDreamDiary: true,
+ canResetDiary: true,
+ canResetGroundedShortTerm: true,
+ canRepairDreamingArtifacts: true,
+ },
viewState,
active: true,
selectedAgentId: "main",
diff --git a/ui/src/pages/agents/memory/view.ts b/ui/src/pages/agents/memory/view.ts
index 8d3024f69a0c..1f26f6ca574c 100644
--- a/ui/src/pages/agents/memory/view.ts
+++ b/ui/src/pages/agents/memory/view.ts
@@ -92,6 +92,14 @@ type DreamingPhaseInfo = {
};
type DreamingProps = {
+ access: {
+ canOpenConfig: boolean;
+ canBackfillDiary: boolean;
+ canDedupeDreamDiary: boolean;
+ canResetDiary: boolean;
+ canResetGroundedShortTerm: boolean;
+ canRepairDreamingArtifacts: boolean;
+ };
viewState: DreamingViewState;
active: boolean;
selectedAgentId: string;
@@ -805,8 +813,16 @@ function renderAdvancedSection(props: DreamingProps) {
${[
- { label: t("dreaming.scene.dedupeDiary"), onClick: props.onDedupeDreamDiary },
- { label: t("dreaming.scene.repairCache"), onClick: props.onRepairDreamingArtifacts },
+ {
+ label: t("dreaming.scene.dedupeDiary"),
+ onClick: props.onDedupeDreamDiary,
+ allowed: props.access.canDedupeDreamDiary,
+ },
+ {
+ label: t("dreaming.scene.repairCache"),
+ onClick: props.onRepairDreamingArtifacts,
+ allowed: props.access.canRepairDreamingArtifacts,
+ },
{
label: t(
props.dreamDiaryActionLoading
@@ -814,14 +830,23 @@ function renderAdvancedSection(props: DreamingProps) {
: "dreaming.scene.backfill",
),
onClick: props.onBackfillDiary,
+ allowed: props.access.canBackfillDiary,
+ },
+ {
+ label: t("dreaming.scene.reset"),
+ onClick: props.onResetDiary,
+ allowed: props.access.canResetDiary,
+ },
+ {
+ label: t("dreaming.scene.clearGrounded"),
+ onClick: props.onResetGroundedShortTerm,
+ allowed: props.access.canResetGroundedShortTerm,
},
- { label: t("dreaming.scene.reset"), onClick: props.onResetDiary },
- { label: t("dreaming.scene.clearGrounded"), onClick: props.onResetGroundedShortTerm },
].map(
- ({ label, onClick }) => html`
+ ({ label, onClick, allowed }) => html`
@@ -212,7 +219,8 @@ export function renderAgents(props: AgentsProps) {
props.onSetDefault(selectedAgent.id)}
>
${defaultId && selectedAgent.id === defaultId
@@ -285,6 +293,8 @@ export function renderAgents(props: AgentsProps) {
identityDraft: props.identityDraft,
identitySaving: props.identitySaving,
identityError: props.identityError,
+ canUpdateConfig: props.access.canUpdateConfig,
+ canUpdateIdentity: props.access.canUpdateIdentity,
configLoading: props.config.loading,
configSaving: props.config.saving,
configDirty: props.config.dirty,
@@ -312,6 +322,7 @@ export function renderAgents(props: AgentsProps) {
agentFileContents: props.agentFiles.contents,
agentFileDrafts: props.agentFiles.drafts,
agentFileSaving: props.agentFiles.saving,
+ canWrite: props.access.canWriteFiles,
onLoadFiles: props.onLoadFiles,
onSelectFile: props.onSelectFile,
onFileDraftChange: props.onFileDraftChange,
@@ -334,6 +345,7 @@ export function renderAgents(props: AgentsProps) {
toolsEffectiveResult: props.toolsEffective.result,
runtimeSessionKey: props.runtimeSessionKey,
runtimeSessionMatchesSelectedAgent: props.runtimeSessionMatchesSelectedAgent,
+ canUpdateConfig: props.access.canUpdateConfig,
onProfileChange: props.onToolsProfileChange,
onOverridesChange: props.onToolsOverridesChange,
onConfigReload: props.onConfigReload,
@@ -352,6 +364,7 @@ export function renderAgents(props: AgentsProps) {
configSaving: props.config.saving,
configDirty: props.config.dirty,
filter: props.agentSkills.filter,
+ canUpdateConfig: props.access.canUpdateConfig,
onFilterChange: props.onSkillsFilterChange,
onRefresh: props.onSkillsRefresh,
onToggle: props.onAgentSkillToggle,
@@ -398,6 +411,7 @@ export function renderAgents(props: AgentsProps) {
scopedNextWakeAtMs: props.cron.scopedNextWakeAtMs,
loading: props.cron.loading,
error: props.cron.error,
+ canRunNow: props.access.canRunCron,
onRefresh: props.onCronRefresh,
onLoadMore: props.onCronLoadMore,
onRunNow: props.onCronRunNow,