Skip to content

Commit 3fdc5ab

Browse files
committed
release: v1.3.6
1 parent f394dc0 commit 3fdc5ab

17 files changed

Lines changed: 237 additions & 32 deletions

File tree

claudecode-plugin/.claude-plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
{
99
"name": "lore",
1010
"description": "Long-term Lore memory for AI agents — fixed boot baseline, recall injection, and MCP tools",
11-
"version": "1.3.5-pre.2",
11+
"version": "1.3.6",
1212
"source": "./",
1313
"author": {
1414
"name": "FFatTiger"
1515
}
1616
}
1717
],
18-
"version": "1.3.5"
18+
"version": "1.3.6"
1919
}

claudecode-plugin/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "lore",
33
"description": "Long-term Lore memory for AI agents — fixed boot baseline, recall injection, and MCP tools",
4-
"version": "1.3.5",
4+
"version": "1.3.6",
55
"author": {
66
"name": "FFatTiger"
77
},

codex-plugin/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lore",
3-
"version": "1.3.5",
3+
"version": "1.3.6",
44
"description": "Long-term Lore memory for Codex via MCP tools, skills, and bundled lifecycle hooks.",
55
"author": {
66
"name": "FFatTiger"

openclaw-plugin/openclaw.plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"id": "lore",
33
"name": "Lore",
44
"description": "Primary Lore memory system for fixed boot baseline, recall, and cross-session project knowledge.",
5-
"version": "1.3.5",
5+
"version": "1.3.6",
66
"activation": {
77
"onStartup": true
88
},

openclaw-plugin/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openclaw-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@local/lore",
3-
"version": "1.3.5",
3+
"version": "1.3.6",
44
"description": "Lore memory plugin for OpenClaw with fixed boot baseline and recall hooks",
55
"type": "module",
66
"scripts": {

pi-extension/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@local/lore-pi-extension",
3-
"version": "1.3.5",
3+
"version": "1.3.6",
44
"description": "Lore memory extension for Pi agent with fixed boot baseline and recall injection",
55
"type": "module",
66
"private": true,

web/components/AppShell.tsx

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,15 @@
22

33
import React, { useState, useEffect, useCallback, useRef, useMemo, ReactNode } from 'react';
44
import { useRouter, usePathname } from 'next/navigation';
5-
import { Sun, Moon } from 'lucide-react';
5+
import { Sun, Moon, Waves } from 'lucide-react';
66
import clsx from 'clsx';
77
import { getDomains, getSetupFlowStatus, AUTH_ERROR_EVENT } from '../lib/api';
88
import { getSetupFlowDecision, SETUP_STATUS_CHANGED_EVENT, type SetupFlowStatus } from '@/lib/bootSetup';
99
import { LanguageProvider, useT } from '../lib/i18n';
1010
import { ThemeProvider, useTheme } from '../lib/theme';
1111
import TokenAuth from './TokenAuth';
1212
import { ConfirmProvider, useConfirm } from './ConfirmDialog';
13-
import { AppUIProvider, Button } from './ui';
14-
import { AuroraBackground } from '@lobehub/ui/awesome';
13+
import { AppUIProvider, AuroraBackdrop, Button } from './ui';
1514
import { AxiosError } from 'axios';
1615

1716
const BOOT_SETUP_ACK_KEY = 'lore-boot-setup-confirmed';
@@ -68,7 +67,7 @@ export function NavDock(): React.JSX.Element {
6867
const pathname = usePathname() || '';
6968
const router = useRouter();
7069
const { t, lang, setLang } = useT();
71-
const { theme, toggleTheme } = useTheme();
70+
const { auroraBackgroundEnabled, theme, toggleAuroraBackground, toggleTheme } = useTheme();
7271
const navRef = useRef<HTMLElement>(null);
7372
const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());
7473
const [hoverHref, setHoverHref] = useState<string | null>(null);
@@ -184,6 +183,20 @@ export function NavDock(): React.JSX.Element {
184183
? <Moon size={14} strokeWidth={2} />
185184
: <Sun size={14} strokeWidth={2} />}
186185
</button>
186+
<button
187+
onClick={toggleAuroraBackground}
188+
aria-pressed={auroraBackgroundEnabled}
189+
aria-label={auroraBackgroundEnabled ? t('Disable Aurora Background') : t('Enable Aurora Background')}
190+
title={auroraBackgroundEnabled ? t('Disable Aurora Background') : t('Enable Aurora Background')}
191+
className={clsx(
192+
'press flex h-9 w-9 md:h-8 md:w-8 shrink-0 items-center justify-center rounded-full transition-colors',
193+
auroraBackgroundEnabled
194+
? 'bg-sys-blue/15 text-sys-blue shadow-sm'
195+
: 'text-txt-secondary hover:bg-fill-quaternary hover:text-txt-primary',
196+
)}
197+
>
198+
<Waves size={14} strokeWidth={2.2} />
199+
</button>
187200
</div>
188201

189202
<div className="hidden sm:flex items-center rounded-full bg-fill-quaternary p-[3px]">
@@ -209,11 +222,27 @@ interface AppShellInnerProps {
209222
children: ReactNode;
210223
}
211224

225+
interface AppShellFrameProps {
226+
auroraBackgroundEnabled: boolean;
227+
children: ReactNode;
228+
}
229+
230+
export function AppShellFrame({ auroraBackgroundEnabled, children }: AppShellFrameProps): React.JSX.Element {
231+
return (
232+
<div className="relative h-screen w-full max-w-full overflow-hidden bg-bg-system text-txt-primary">
233+
{auroraBackgroundEnabled ? <AuroraBackdrop /> : null}
234+
<NavDock />
235+
<div className={appContentClassName}>{children}</div>
236+
</div>
237+
);
238+
}
239+
212240
function AppShellInner({ children }: AppShellInnerProps): React.JSX.Element {
213241
const router = useRouter();
214242
const pathname = usePathname() || '';
215243
const { confirm } = useConfirm();
216244
const { t } = useT();
245+
const { auroraBackgroundEnabled } = useTheme();
217246
const [isAuthenticated, setIsAuthenticated] = useState(false);
218247
const [isCheckingAuth, setIsCheckingAuth] = useState(true);
219248
const [backendError, setBackendError] = useState(false);
@@ -425,15 +454,9 @@ function AppShellInner({ children }: AppShellInnerProps): React.JSX.Element {
425454
}
426455

427456
return (
428-
<div className="relative h-screen w-full max-w-full overflow-hidden bg-bg-system text-txt-primary">
429-
<AuroraBackground
430-
className="absolute inset-0 h-full w-full"
431-
classNames={{ content: 'hidden' }}
432-
styles={{ content: { display: 'none' } }}
433-
/>
434-
<NavDock />
435-
<div className={appContentClassName}>{children}</div>
436-
</div>
457+
<AppShellFrame auroraBackgroundEnabled={auroraBackgroundEnabled}>
458+
{children}
459+
</AppShellFrame>
437460
);
438461
}
439462

web/components/__tests__/AppShellTheme.test.tsx

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import React from 'react';
22
import { renderToStaticMarkup } from 'react-dom/server';
3-
import { describe, expect, it, vi } from 'vitest';
3+
import { beforeEach, describe, expect, it, vi } from 'vitest';
4+
5+
const themeMock = vi.hoisted(() => ({
6+
auroraBackgroundEnabled: false,
7+
toggleAuroraBackground: vi.fn(),
8+
toggleTheme: vi.fn(),
9+
}));
410

511
vi.mock('next/navigation', () => ({
612
usePathname: () => '/memory',
@@ -47,18 +53,30 @@ vi.mock('../../lib/i18n', () => ({
4753
}));
4854

4955
vi.mock('../../lib/theme', () => ({
50-
useTheme: () => ({ theme: 'light', toggleTheme: vi.fn() }),
56+
useTheme: () => ({
57+
auroraBackgroundEnabled: themeMock.auroraBackgroundEnabled,
58+
theme: 'light',
59+
toggleAuroraBackground: themeMock.toggleAuroraBackground,
60+
toggleTheme: themeMock.toggleTheme,
61+
}),
5162
}));
5263

5364
vi.mock('../ui', () => ({
65+
AuroraBackdrop: () => <div data-aurora-background="true" />,
5466
AppUIProvider: ({ children }: { children: React.ReactNode }) => <div data-app-ui-provider="true">{children}</div>,
5567
Button: ({ children }: { children: React.ReactNode }) => <button>{children}</button>,
5668
}));
5769

58-
import { NavDock, navIndicatorClassName } from '../AppShell';
70+
import { AppShellFrame, NavDock, navIndicatorClassName } from '../AppShell';
5971
import { AppUIProvider } from '../ui';
6072

6173
describe('AppShell theme contrast', () => {
74+
beforeEach(() => {
75+
themeMock.auroraBackgroundEnabled = false;
76+
themeMock.toggleAuroraBackground.mockClear();
77+
themeMock.toggleTheme.mockClear();
78+
});
79+
6280
it('passes the app theme through the self-owned UI provider bridge', () => {
6381
const html = renderToStaticMarkup(<AppUIProvider><div>content</div></AppUIProvider>);
6482

@@ -76,8 +94,9 @@ describe('AppShell theme contrast', () => {
7694
expect(html).toContain('bottom-3');
7795
expect(html).toContain('md:bottom-auto');
7896
expect(html).toContain('md:top-4');
79-
expect(html).not.toContain('Enable Aurora Background');
97+
expect(html).toContain('Enable Aurora Background');
8098
expect(html).not.toContain('Disable Aurora Background');
99+
expect(html).toContain('aria-pressed="false"');
81100
expect(html).toContain('bg-[var(--dock-bg-mobile)]');
82101
expect(html).toContain('md:bg-[var(--dock-bg)]');
83102
expect(html).not.toContain('bg-bg-elevated/80');
@@ -93,4 +112,37 @@ describe('AppShell theme contrast', () => {
93112
expect(html).toContain('h-9 w-9 md:h-8 md:w-8');
94113
expect(html).toContain('hidden md:flex items-center gap-2');
95114
});
115+
116+
it('renders the aurora nav toggle as active when enabled', () => {
117+
themeMock.auroraBackgroundEnabled = true;
118+
119+
const html = renderToStaticMarkup(<NavDock />);
120+
121+
expect(html).toContain('Disable Aurora Background');
122+
expect(html).not.toContain('Enable Aurora Background');
123+
expect(html).toContain('aria-pressed="true"');
124+
expect(html).toContain('bg-sys-blue/15');
125+
});
126+
127+
it('keeps the workspace aurora backdrop disabled by default', () => {
128+
const html = renderToStaticMarkup(
129+
<AppShellFrame auroraBackgroundEnabled={false}>
130+
<main>Workspace</main>
131+
</AppShellFrame>,
132+
);
133+
134+
expect(html).toContain('Workspace');
135+
expect(html).not.toContain('data-aurora-background="true"');
136+
});
137+
138+
it('renders the workspace aurora backdrop when enabled', () => {
139+
const html = renderToStaticMarkup(
140+
<AppShellFrame auroraBackgroundEnabled>
141+
<main>Workspace</main>
142+
</AppShellFrame>,
143+
);
144+
145+
expect(html).toContain('Workspace');
146+
expect(html).toContain('data-aurora-background="true"');
147+
});
96148
});

web/components/ui/__tests__/layout.test.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,23 @@ vi.mock('@lobehub/ui/es/Block/index', () => ({
88
),
99
}));
1010

11+
vi.mock('@lobehub/ui/awesome', () => ({
12+
AuroraBackground: ({ className, classNames, styles }: { className?: string; classNames?: { content?: string }; styles?: { content?: React.CSSProperties } }) => (
13+
<div
14+
className={className}
15+
data-aurora-background="true"
16+
data-content-class={classNames?.content}
17+
data-content-display={styles?.content?.display}
18+
/>
19+
),
20+
}));
21+
1122
vi.mock('../controls', () => ({
1223
Spinner: ({ size }: { size?: string }) => <span data-spinner-size={size || 'md'} />,
1324
surfaceCardClassName: 'rounded-2xl border border-separator-thin bg-bg-elevated shadow-card',
1425
}));
1526

16-
import { ActionPanel, Card, InlineMeta, LoadingBlock, PageCanvas, Section, surfaceCardClassName } from '../layout';
27+
import { ActionPanel, AuroraBackdrop, Card, InlineMeta, LoadingBlock, PageCanvas, Section, surfaceCardClassName } from '../layout';
1728

1829
describe('ui layout Card', () => {
1930
it('renders through Lobe Block with default padding 16', () => {
@@ -96,4 +107,13 @@ describe('ui layout Card', () => {
96107
expect(html).toContain('pb-24');
97108
expect(html).toContain('md:py-14');
98109
});
110+
111+
it('wraps the Lobe aurora background as a hidden backdrop primitive', () => {
112+
const html = renderToStaticMarkup(<AuroraBackdrop />);
113+
114+
expect(html).toContain('data-aurora-background="true"');
115+
expect(html).toContain('absolute inset-0 h-full w-full');
116+
expect(html).toContain('data-content-class="hidden"');
117+
expect(html).toContain('data-content-display="none"');
118+
});
99119
});

0 commit comments

Comments
 (0)