diff --git a/README.md b/README.md index 2e847c3..ca9ce03 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@
-# Personal AI Profile +# NEXORA(知序) -### Your Personal Intelligence Layer +### Your Intelligence. Your Data. Your Control. -**A local-first, model-agnostic workspace for personal context, confirmed memory, reflection, and permission-controlled AI access.** +**An open-source, local-first Personal Intelligence Platform for confirmed memory, reflection, knowledge and permission-controlled AI access.** -[![CI](https://github.com/XY-code1/personal-ai-profile/actions/workflows/test.yml/badge.svg)](https://github.com/XY-code1/personal-ai-profile/actions/workflows/test.yml) -[![GitHub Release](https://img.shields.io/github/v/release/XY-code1/personal-ai-profile?display_name=tag&sort=semver)](https://github.com/XY-code1/personal-ai-profile/releases) +[![CI](https://github.com/XY-code1/Nexora/actions/workflows/test.yml/badge.svg)](https://github.com/XY-code1/Nexora/actions/workflows/test.yml) +[![GitHub Release](https://img.shields.io/github/v/release/XY-code1/Nexora?display_name=tag&sort=semver)](https://github.com/XY-code1/Nexora/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-27BFFF.svg)](LICENSE) [![Local First](https://img.shields.io/badge/architecture-local--first-20D9E8.svg)](#architecture) [![MCP](https://img.shields.io/badge/MCP-permission--controlled-936BFF.svg)](#mcp-gateway) [English](#overview) · [中文](#中文概览) · [Quick Start](#quick-start) · [Security](#privacy-and-security) · [Documentation](#documentation) -Personal AI Profile intelligence orb +NEXORA — Personal Intelligence Platform
@@ -22,7 +22,7 @@ ## Overview -Personal AI Profile creates a user-owned context layer that can be shared across Codex, Claude, Cursor, and other MCP-compatible AI clients. +NEXORA(知序), formerly developed under the project name Personal AI Profile, creates a user-owned intelligence layer that can be shared across Codex, Claude, Cursor, and other MCP-compatible AI clients. Your private data remains in a local Markdown Vault. AI clients may read only what you explicitly authorize. They can propose candidate memories, but they cannot silently convert a conversation into permanent memory. @@ -48,7 +48,7 @@ Personal context is fragmented across AI products: - copying entire conversations creates unnecessary privacy exposure; - maintaining a large profile form by hand feels like work. -Personal AI Profile separates the **experience of conversation** from the **authority of memory**. +NEXORA separates the **experience of conversation** from the **authority of memory**. ## Product @@ -285,7 +285,7 @@ Security foundations include loopback-only serving, bearer sessions, trusted-hos ### Windows -Use the installer from [GitHub Releases](https://github.com/XY-code1/personal-ai-profile/releases) when available, or run: +Use the installer from [GitHub Releases](https://github.com/XY-code1/Nexora/releases) when available, or run: ```text start-review.vbs @@ -302,8 +302,8 @@ Requirements: - Git ```powershell -git clone https://github.com/XY-code1/personal-ai-profile.git -cd personal-ai-profile +git clone https://github.com/XY-code1/Nexora.git +cd Nexora python -m pip install -r requirements.txt @@ -356,6 +356,10 @@ Tests use temporary synthetic Vaults. They must never read or copy a real privat | Topic | Document | | --- | --- | +| Brand guidelines | [BRAND_GUIDELINES.md](docs/brand/BRAND_GUIDELINES.md) | +| Logo specification | [LOGO_SPECIFICATION.md](docs/brand/LOGO_SPECIFICATION.md) | +| Brand assets | [BRAND_ASSET_CATALOG.md](docs/brand/BRAND_ASSET_CATALOG.md) | +| Product identity | [PRODUCT_IDENTITY.md](docs/brand/PRODUCT_IDENTITY.md) | | Product architecture | [PRODUCT_ARCHITECTURE.md](docs/PRODUCT_ARCHITECTURE.md) | | Vault lifecycle | [VAULT_LIFECYCLE_PLAN.md](docs/VAULT_LIFECYCLE_PLAN.md) | | Local API | [LOCAL_API.md](docs/LOCAL_API.md) | @@ -371,11 +375,10 @@ Tests use temporary synthetic Vaults. They must never read or copy a real privat ## Roadmap -1. Refine first-run setup and Vault selection. -2. Add safer GitHub private-repository setup and privacy verification. -3. Improve backup history browsing and guided recovery. -4. Add explicit model-provider authorization. -5. Provide user-controlled import tools. +1. Complete the NEXORA identity migration across release and community assets. +2. Add GitHub Device Flow and verified private-repository provisioning without storing credentials in the Vault. +3. Expand explicitly authorized model-provider connectors without weakening local-first defaults. +4. Continue accessibility, localization and Windows packaging validation. The project will not add silent memory confirmation, automatic psychological labels, unrestricted AI file access, or default cloud collection. @@ -383,7 +386,7 @@ The project will not add silent memory confirmation, automatic psychological lab ## 中文概览 -Personal AI Profile 是一个**本地优先、模型无关、由用户控制**的个人 AI 上下文系统。 +NEXORA(知序)是一个**开源、本地优先、模型无关、由用户控制**的个人智能平台。项目原开发名称为 Personal AI Profile,现有仓库地址和兼容标识暂时保持不变。 它不会让 AI 自动保存所有聊天,而是建立一条清晰的记忆边界: @@ -421,8 +424,8 @@ Optional Public Export 经过选择、脱敏和人工确认的公开内 ### 中文快速开始 ```powershell -git clone https://github.com/XY-code1/personal-ai-profile.git -cd personal-ai-profile +git clone https://github.com/XY-code1/Nexora.git +cd Nexora python -m pip install -r requirements.txt # 在框架仓库之外创建私人 Vault diff --git a/apps/web/index.html b/apps/web/index.html index 3356143..77baa76 100644 --- a/apps/web/index.html +++ b/apps/web/index.html @@ -3,8 +3,9 @@ - - Personal AI Profile · 记忆审核 + + + NEXORA 知序 · Personal Intelligence Platform
diff --git a/apps/web/public/brand/favicon.svg b/apps/web/public/brand/favicon.svg new file mode 100644 index 0000000..ba92953 --- /dev/null +++ b/apps/web/public/brand/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/brand/nexora-logo.svg b/apps/web/public/brand/nexora-logo.svg new file mode 100644 index 0000000..10f9497 --- /dev/null +++ b/apps/web/public/brand/nexora-logo.svg @@ -0,0 +1,25 @@ + + NEXORA + NEXORA wordmark with the Intelligence Core symbol. + + + + + + + + + + + + + + + + + + + + NEXORA + PERSONAL INTELLIGENCE PLATFORM + diff --git a/apps/web/public/brand/nexora-symbol-mono.svg b/apps/web/public/brand/nexora-symbol-mono.svg new file mode 100644 index 0000000..446f0d3 --- /dev/null +++ b/apps/web/public/brand/nexora-symbol-mono.svg @@ -0,0 +1,12 @@ + + NEXORA monochrome symbol + A single-color intelligence core surrounded by orbital connections. + + + + + + + + + diff --git a/apps/web/public/brand/nexora-symbol.svg b/apps/web/public/brand/nexora-symbol.svg new file mode 100644 index 0000000..4968b8f --- /dev/null +++ b/apps/web/public/brand/nexora-symbol.svg @@ -0,0 +1,27 @@ + + NEXORA Intelligence Core + A faceted intelligence core surrounded by two orbital connections. + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/brand/preview.html b/apps/web/public/brand/preview.html new file mode 100644 index 0000000..12ef83d --- /dev/null +++ b/apps/web/public/brand/preview.html @@ -0,0 +1,30 @@ + + + + + + NEXORA Brand Foundation + + + +
+

NEXORA / 知序 · Brand Foundation B1

+

Intelligence, in your orbit.

+

A future-facing identity for a local-first personal intelligence platform. The core represents owned knowledge; the orbits represent controlled connections.

+

Your Intelligence. Your Data. Your Control.

+
+

Primary Logo · Dark

NEXORA primary logo
+

Primary Logo · Light

NEXORA logo on light background
+

App Symbol

NEXORA symbolNEXORA app icon
+

Monochrome · Dark

NEXORA monochrome symbol
+

Monochrome · Light

NEXORA monochrome symbol on light
+

Brand Color System

+
DEEP SPACE
#07111F
MIDNIGHT NAVY
#0C1728
PANEL BLUE
#13243A
ELECTRIC CYAN
#12D9F5
NEON VIOLET
#906BFF
SIGNAL GREEN
#30D6A0
ICE WHITE
#EAF3FF
SLATE
#8499B4
+
+

Typography

Space Grotesk

Inter and Noto Sans SC support clear, multilingual product communication.

JetBrains Mono · VAULT_ID / REVISION
+

Product Language

Intelligence Core

Local data remains protected. Connections require explicit authorization.

+
+
diff --git a/apps/web/src/App.css b/apps/web/src/App.css index 07c73cf..dc43bff 100644 --- a/apps/web/src/App.css +++ b/apps/web/src/App.css @@ -1,7 +1,7 @@ #root { min-height: 100dvh; } h1,h2,h3,p { margin-top:0 } button { min-height:44px } .app-shell{height:100dvh;overflow:hidden;background:var(--bg-primary)}.app-stage{height:100dvh;min-width:0;margin-left:var(--sidebar-width);overflow:auto;scrollbar-gutter:stable}.content-shell{width:min(100%,1500px);margin:auto;padding:28px 34px 56px}.eyebrow{color:var(--color-cyan);font:700 .69rem/1.2 ui-monospace,"Cascadia Code",monospace;letter-spacing:.17em;margin-bottom:8px}.muted{color:var(--text-secondary)} -.sidebar{position:fixed;inset:0 auto 0 0;z-index:30;width:var(--sidebar-width);display:flex;flex-direction:column;border-right:1px solid var(--border-subtle);background:#0b1322;box-shadow:18px 0 48px rgba(0,0,0,.18)}.brand{position:relative;display:flex;align-items:center;gap:12px;min-height:86px;padding:20px 18px;border-bottom:1px solid var(--border-subtle)}.brand-mark{display:grid;place-items:center;width:42px;height:42px;color:var(--color-primary);border:1px solid var(--border-active);border-radius:12px;background:#101f34;box-shadow:0 0 24px rgba(39,191,255,.16)}.brand-mark svg{width:24px;height:24px}.brand strong{display:block;font-size:.96rem}.brand small{display:block;color:#6f89aa;margin-top:4px;font:700 .58rem ui-monospace,monospace;letter-spacing:.12em}.sidebar nav{display:grid;gap:6px;padding:20px 12px}.sidebar nav button{display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:8px;width:100%;padding:10px 12px;color:var(--text-secondary);text-align:left;border:1px solid transparent;border-radius:10px;background:transparent}.sidebar nav button:hover:not([aria-disabled=true]){color:var(--text-primary);background:rgba(39,191,255,.06)}.sidebar nav button.active{color:var(--text-primary);border-color:rgba(39,191,255,.34);background:#13283f;box-shadow:inset 3px 0 var(--color-cyan),0 0 24px rgba(39,191,255,.08)}.sidebar nav button.active svg{color:var(--color-cyan)}.sidebar nav button[aria-disabled=true]{cursor:default;opacity:.54}.sidebar nav button small{color:#647993;font-size:.6rem}.sidebar-status{margin:auto 14px 18px;padding:14px;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:#101b2c}.sidebar-status p{display:grid;grid-template-columns:20px 1fr auto;align-items:center;margin:0;color:var(--text-secondary);font-size:.75rem}.sidebar-status p+p{margin-top:11px}.sidebar-status svg{color:var(--color-cyan)}.sidebar-status strong{color:var(--color-success);font-size:.68rem}.drawer-close,.mobile-menu,.navigation-scrim{display:none} +.sidebar{position:fixed;inset:0 auto 0 0;z-index:30;width:var(--sidebar-width);display:flex;flex-direction:column;border-right:1px solid var(--border-subtle);background:#0b1322;box-shadow:18px 0 48px rgba(0,0,0,.18)}.brand{position:relative;display:flex;align-items:center;gap:12px;min-height:86px;padding:20px 18px;border-bottom:1px solid var(--border-subtle)}.brand-mark{display:grid;place-items:center;width:42px;height:42px;color:var(--color-primary);border:1px solid var(--border-active);border-radius:12px;background:#101f34;box-shadow:0 0 24px rgba(39,191,255,.16)}.brand-mark img{width:34px;height:34px}.brand strong{display:flex;align-items:baseline;gap:7px;font:700 .96rem var(--font-display)}.brand strong em{color:var(--brand-slate);font:600 .7rem var(--font-body);font-style:normal}.brand small{display:block;color:#6f89aa;margin-top:4px;font:700 .55rem var(--font-mono);letter-spacing:.11em}.sidebar nav{display:grid;gap:6px;padding:20px 12px}.sidebar nav button{display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:8px;width:100%;padding:10px 12px;color:var(--text-secondary);text-align:left;border:1px solid transparent;border-radius:10px;background:transparent}.sidebar nav button:hover:not([aria-disabled=true]){color:var(--text-primary);background:rgba(39,191,255,.06)}.sidebar nav button.active{color:var(--text-primary);border-color:rgba(39,191,255,.34);background:#13283f;box-shadow:inset 3px 0 var(--color-cyan),0 0 24px rgba(39,191,255,.08)}.sidebar nav button.active svg{color:var(--color-cyan)}.sidebar nav button[aria-disabled=true]{cursor:default;opacity:.54}.sidebar nav button small{color:#647993;font-size:.6rem}.sidebar-status{margin:auto 14px 18px;padding:14px;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:#101b2c}.sidebar-status p{display:grid;grid-template-columns:20px 1fr auto;align-items:center;margin:0;color:var(--text-secondary);font-size:.75rem}.sidebar-status p+p{margin-top:11px}.sidebar-status svg{color:var(--color-cyan)}.sidebar-status strong{color:var(--color-success);font-size:.68rem}.drawer-close,.mobile-menu,.navigation-scrim{display:none} .topbar{position:sticky;top:0;z-index:20;min-height:86px;display:flex;justify-content:space-between;align-items:center;gap:24px;padding:16px 34px;border-bottom:1px solid var(--border-subtle);background:rgba(8,13,24,.94);backdrop-filter:blur(18px)}.topbar h1{margin:0;font-size:clamp(1.35rem,2.5vw,1.8rem);letter-spacing:-.035em}.topbar-actions{display:flex;align-items:center;gap:10px}.service-status{display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:0 12px;color:var(--text-secondary);border:1px solid var(--border-subtle);border-radius:9px;background:#101b2c;font-size:.76rem;white-space:nowrap}.service-status i{width:7px;height:7px;border-radius:50%;background:var(--color-success);box-shadow:0 0 12px var(--color-success)}.icon-button,.text-button{color:var(--text-secondary);border:1px solid var(--border-subtle);border-radius:8px;background:#111c2d;padding:0 12px}.icon-button{display:grid;place-items:center;width:44px;padding:0}.text-button:hover,.icon-button:hover{color:var(--text-primary);border-color:var(--border-active)}.danger-link{color:#ff9aab} .intro{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:14px 18px;margin-bottom:18px;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--bg-secondary);color:var(--text-secondary)}.intro p{margin:0}.intro span,.status,.local-badge{color:var(--color-cyan);font:700 .72rem ui-monospace,monospace;white-space:nowrap}.notice{display:flex;justify-content:space-between;gap:16px;align-items:center;border:1px solid;border-radius:var(--radius-sm);padding:13px 16px;margin-bottom:18px}.notice.success{color:#a8f7d6;border-color:rgba(54,214,154,.35);background:rgba(54,214,154,.08)}.notice.error{color:#ffc1cc;border-color:rgba(255,120,146,.4);background:rgba(255,120,146,.08)}.notice button{color:inherit;border:1px solid currentColor;border-radius:6px;background:transparent;padding:0 10px} .workspace{display:grid;grid-template-columns:minmax(260px,.72fr) minmax(0,1.75fr);min-height:610px;overflow:hidden;border:1px solid var(--border-subtle);border-radius:var(--radius-lg);background:var(--bg-secondary);box-shadow:0 22px 64px rgba(0,0,0,.24)}.memory-list{border-right:1px solid var(--border-subtle);padding:16px}.list-heading{display:flex;justify-content:space-between;align-items:baseline;padding:8px 8px 16px}.list-heading h2{margin:0;font-size:1rem}.list-heading span{color:var(--text-secondary);font-size:.75rem}.memory-row{display:grid;gap:7px;width:100%;min-height:auto;padding:16px 10px;color:var(--text-primary);text-align:left;border:1px solid transparent;border-top-color:var(--border-subtle);background:transparent}.memory-row:hover,.memory-row.selected{border-color:rgba(39,191,255,.3);border-radius:9px;background:#14253a}.memory-row-meta{color:var(--color-violet);font: .65rem ui-monospace,monospace}.memory-row>span:last-child{color:var(--text-secondary);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.detail{padding:clamp(24px,4vw,50px);background:#0e1828}.detail-header{display:flex;justify-content:space-between;gap:24px;padding-bottom:22px;margin-bottom:24px;border-bottom:1px solid var(--border-subtle)}.detail-header h2{margin:0;font-size:clamp(1.55rem,3vw,2.4rem)}.metadata{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 26px}.metadata div{padding:12px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--bg-secondary)}.metadata dt{color:var(--text-secondary);font-size:.7rem}.metadata dd{margin:4px 0 0;font-size:.82rem} diff --git a/apps/web/src/App.test.tsx b/apps/web/src/App.test.tsx index 3442b3d..6862dc6 100644 --- a/apps/web/src/App.test.tsx +++ b/apps/web/src/App.test.tsx @@ -347,7 +347,7 @@ describe('review workspace', () => { fireEvent.click(screen.getByRole('button', { name: '连接审核空间' })) // 首次启动直接进入一页式引导,不展示完整功能菜单。 - await screen.findByRole('heading', { name: '欢迎来到你的个人智能中枢' }) + await screen.findByRole('heading', { name: '欢迎来到 NEXORA 个人智能中枢' }) expect(screen.queryByRole('button', { name: '成长仪表盘' })).not.toBeInTheDocument() expect(screen.getByText('创建你的个人空间')).toBeInTheDocument() expect(screen.getByText('Obsidian 是可选编辑器,不是使用产品的前置条件。')).toBeInTheDocument() diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx index 83b119c..198f6cd 100644 --- a/apps/web/src/App.tsx +++ b/apps/web/src/App.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useRef, useState } from 'react' import type { FormEvent } from 'react' -import { Brain, CalendarDots, ChartLineUp, CirclesFour, CloudArrowUp, Database, GithubLogo, HardDrives, House, List, LockKey, Network, PlugsConnected, ShieldCheck, Sparkle, Stack, UserCircle, Warning, X } from '@phosphor-icons/react' +import { Brain, CalendarDots, ChartLineUp, CloudArrowUp, Database, GithubLogo, HardDrives, House, List, LockKey, Network, PlugsConnected, ShieldCheck, Sparkle, Stack, UserCircle, Warning, X } from '@phosphor-icons/react' import { ApiClient, ApiError, type Human3Trend, type Memory, type MemoryStats, type MonthlyOverview, type MonthlyReflection, type MonthlyTrend, type ProfileOverview, type ReflectionDimension, type ReflectionEvent, type ReflectionGoal, type SecurityCenter, type TimelineItem } from './api' import MemoryReviewPage from './MemoryReviewPage' import MonthlyReflectionPage from './MonthlyReflectionPage' @@ -522,7 +522,7 @@ function App() { {navigationOpen && +
NEXORA 知序PERSONAL INTELLIGENCE