fix(hololake): ship dynamic persona routes and coherent workspace

This commit is contained in:
冰朔 2026-08-09 10:43:56 +08:00
commit 787ba2ad3f
21 changed files with 1111 additions and 326 deletions

View file

@ -0,0 +1,25 @@
# HoloLake Era Desktop 0.7.1
## 本版修正
- 将知识库保持为个人第五域已安装模块;教育行业回到光湖分域行业入口;
- 以单一布局层统一页面树、正文和 HoloLake 语言操作入口,宽屏三栏可收起或拖动调整宽度,中等窗口打开 Agent 时自动让出页面树空间;
- 增加湖夜、雾白、深海夜读三套完整外观,并保留字体、语言和正文大小设置;
- 修复 Markdown 表格、任务列表、引用、代码与 HoloLake 双链渲染,兼容 Outline 的 `aside` 提示块与表格换行,宽表在正文内部横向滚动;
- HoloLake 双链按知识树精确导航,不以正文模糊搜索结果冒充目标页面;
- 增加对话历史、新建对话、删除对话和设备本地持久化;
- 修复工具消息协议,写操作确认回执不会在下一回合形成孤立的 `tool` 消息;
- 人格体唤醒改为读取该人格体自己的 INDEX、CURRENT、WAKE 路径页面,路径节点数量与顺序完全由人格体页面定义,不预设五步、七步或其他固定模板;
- 活动轨迹仅展示真实发生的路径定位、页面读取、工具、权限与执行回执,不展示或伪造模型隐藏思维过程。
## 自动验收
- 工具协议、确认写入后的连续对话、动态人格唤醒路径均有回归测试;
- 知识树内部隐藏协议配置、人类资料保留、Markdown 安全渲染均有回归测试;
- 生产构建必须通过后才允许生成安装包。
## 数据边界
- 安装包不包含个人知识、对话记录、服务器令牌、模型密钥、SSH 密钥或私人第五域内容;
- 对话记录与模型密钥留在设备本地安全范围;
- 服务器托管与 Forgejo 推送必须分别取得真实连接和回执,不能由界面文案代替。

View file

@ -31,6 +31,7 @@ const KB_REPO_PATH = path.join(DATA_DIR, 'knowledge-base');
const MODEL_CONFIG_PATH = path.join(app.getPath('userData'), 'model-config.json');
const SERVER_AUTH_PATH = path.join(app.getPath('userData'), 'server-auth.json');
const SERVER_PROFILES_PATH = path.join(app.getPath('userData'), 'server-profiles.json');
const AGENT_STATE_PATH = path.join(app.getPath('userData'), 'agent-conversations.json');
const GIT_ASKPASS_PATH = path.join(app.getPath('userData'), 'hololake-git-askpass.sh');
interface ServerProfileDefinition {
id: string;
@ -320,6 +321,7 @@ function startServer(): Promise<void> {
...process.env,
KB_PORT: String(SERVER_PORT),
KB_REPO_PATH,
HOLOLAKE_AGENT_STATE_PATH: AGENT_STATE_PATH,
NODE_ENV: 'development',
},
cwd: path.resolve(__dirname, '../..'),
@ -352,6 +354,7 @@ function startServer(): Promise<void> {
try {
process.env.KB_PORT = String(SERVER_PORT);
process.env.KB_REPO_PATH = KB_REPO_PATH;
process.env.HOLOLAKE_AGENT_STATE_PATH = AGENT_STATE_PATH;
const serverBundle = path.join(__dirname, 'server-bundle.cjs');
require(serverBundle);
console.log(`[KB Server] 内嵌启动,端口 ${SERVER_PORT}`);

View file

@ -11,7 +11,7 @@ import { contextBridge, ipcRenderer } from 'electron';
contextBridge.exposeInMainWorld('hololake', {
// 应用信息
platform: process.platform,
version: '0.7.0',
version: '0.7.1',
// 数据目录
getDataPath: () => ipcRenderer.invoke('get-data-path'),

View file

@ -1,12 +1,12 @@
{
"name": "hololake-desktop",
"version": "0.7.0",
"version": "0.7.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "hololake-desktop",
"version": "0.7.0",
"version": "0.7.1",
"dependencies": {
"cors": "^2.8.5",
"diff": "^9.0.0",

View file

@ -1,6 +1,6 @@
{
"name": "hololake-desktop",
"version": "0.7.0",
"version": "0.7.1",
"description": "HoloLake Era — 光湖语言操作系统平台",
"main": "dist-electron/main.cjs",
"type": "module",
@ -9,7 +9,7 @@
"dev:server": "tsx watch ../guanghu-knowledge-base/server/index.ts",
"dev:client": "vite",
"dev:electron": "electron .",
"test": "tsx --test ../guanghu-knowledge-base/server/*.test.ts ../guanghu-knowledge-base/src/*.test.ts",
"test": "tsx --tsconfig ../guanghu-knowledge-base/tsconfig.json --test ../guanghu-knowledge-base/server/*.test.ts ../guanghu-knowledge-base/src/*.test.ts",
"build:electron": "esbuild electron/main.ts --bundle --platform=node --format=cjs --external:electron --outfile=dist-electron/main.cjs && esbuild electron/preload.ts --bundle --platform=node --format=cjs --external:electron --outfile=dist-electron/preload.cjs",
"build:server": "NODE_PATH=./node_modules esbuild ../guanghu-knowledge-base/server/index.ts --bundle --platform=node --format=cjs --outfile=dist-electron/server-bundle.cjs",
"build": "vite build && npm run build:electron && npm run build:server",

View file

@ -22,7 +22,7 @@ export default defineConfig({
port: 5180,
proxy: {
'/api': {
target: 'http://localhost:3890',
target: `http://localhost:${process.env.KB_PORT || '3890'}`,
changeOrigin: true,
},
},