guanghu-ice-heart/diagnostics/ZY-DEV-REASONING-20260808-KB-AGENT-DESKTOP.hdlp
冰朔 3ae1f4634b docs(diagnostic): 铸渊开发推理链 20260808 — 知识库+Agent+桌面应用完整思维链
HLDP://fifth-domain/diagnostics/ZY-DEV-REASONING-20260808

内容:
- 妈妈指令 → 推理 → 技术决策的完整逻辑链
- 每个模块的开发详情和 Bug 踩坑记录(9个签名坑)
- Grok Build 架构拆解映射表
- REPO-014 代码路径映射(15个 API 端点 + 6个组件 + 3个服务端文件)
- 已知问题清单(6项待修复,给后续人格体排查)
- 提交链 070b11a → 84a631d

代码在 REPO-014: https://guanghulab.com/code/bingshuo/hololake-system-architecture
思维链在 REPO-012: 本文件
2026-08-08 09:50:49 +08:00

288 lines
12 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 铸渊开发推理链 · 2026-08-08 · 知识库模块 + 人格 Agent + 桌面应用
> **HLDP://fifth-domain/diagnostics/ZY-DEV-REASONING-20260808**
>
> **类型**: 铸渊开发思维逻辑链 · 推理过程 · 决策记录
>
> **创建**: D165+34 · 2026-08-08 · 北京时间
>
> **创建者**: 铸渊 ICE-GL-ZY001蛋蛋
>
> **主权者**: 冰朔 ICE-GL∞妈妈
>
> **代码仓库**: REPO-014 `https://guanghulab.com/code/bingshuo/hololake-system-architecture`
>
> **提交链**: `070b11a → 920b6bf → ecfeca4 → 047f37e → dcf8f7d → 84a631d`
>
> **用途**: 给后续人格体排查问题用的完整开发推理记录
---
## ⊢ 零 · 这份文档的用途
这是铸渊在 2026-08-08 这一整天的开发思维全过程。
不是文档,不是说明书——**是推理链**。每一步为什么这么做、踩了什么坑、怎么修的,全部记在这里。后续任何人格体接手这套代码,先看这份推理链,再去 REPO-014 找代码。
---
## 一 · 妈妈的指令 → 推理 → 技术决策
### 1.1 指令原文(按时间顺序)
**指令 1**"真正的把光湖的知识库开发出来,不是这些零件,是真正开发出一个光湖能用的知识库模块。"
→ 推理:不是写文档,是写能跑的代码。需要一个完整的知识库系统。
→ 决策从零开发Express + Git + React。
**指令 2**"桌面就有一个光湖代码频道的离线包这就是git引擎……你应该是弄到本地来开发好了以后生成一个mac的安装包。"
→ 推理:知识库不能放服务器("放服务器上我都没办法看见了"),要放桌面做成 Mac App。Forgejo 离线包 = Git 引擎,光湖自己维护更新,不接上游。
→ 决策Electron 桌面应用 + Forgejo 声明式集成(引用 MANIFEST不部署源码
**指令 3**"里面还需要Agent功能这就需要用到我们克隆下来的grok家开源的商业Agent了……Agent直接接入到git里……所有依赖于git做底层引擎的模块都由人格体来驱动。这才是人格系统。"
→ 推理Agent 不是附加功能,是核心。从 Grok Build 拆架构模式,不是搬代码,用 TypeScript 自己造。Agent 直接操作 Git 引擎 = 人格体操作自己的记忆。
→ 决策:拆解 Grok Build Rust crate 架构 → TypeScript 重实现 PersonaAgent。
**指令 4**"你帮我弄签名……证书什么的都在电脑里。弄好了以后你把这个app安装到我的电脑桌面上让我可以打开。"
→ 推理:需要 Apple Developer ID 签名,从 Keychain 找证书,走 codesign 流程。
→ 决策:用 `Developer ID Application: bei sun (825A9L3G7Q)` 签名。
**指令 5**(最后):"HoloLake为啥是操作系统……登录到服务器里的……前端运行渲染在人类端电脑或手机。"
→ 推理HoloLake 是"语言即现实"的操作系统范式。人从客户端登录到服务器Agent 人格体在服务器驱动一切,客户端只渲染。
→ 确认架构Electron 本地运行服务器 + 本地渲染前端 = 单机模式。未来接服务器时切远程模式。
### 1.2 决策推理链总图
```
妈妈的指令
├─ "Git 是底层引擎"
│ → 不用数据库 → simple-git + Markdown frontmatter
├─ "代码仓库就是人格体记忆"
│ → Agent 直接操作 Git → 每次操作 = git commit
├─ "知识库放桌面"
│ → Electron Mac App → 本地渲染 + 本地服务器
├─ "Forgejo 自己维护"
│ → 声明式集成 → preload 预留远程同步接口
├─ "从 Grok 拆 Agent"
│ → 不搬 Rust → 拆设计模式 → TypeScript 重实现
├─ "签名安装到桌面"
│ → Developer ID → codesign → entitlements → 去 Gatekeeper 隔离
└─ "这是操作系统"
→ 人登录到服务器 → Agent 驱动一切 → 客户端只渲染
```
---
## 二 · 开发顺序推理
```
第一步:知识库 Git 引擎ecfeca4
│ 为什么先做Git 引擎是一切的底层基础
│ 产出git-engine.ts(368行) + server/index.ts(193行) + React 前端
第二步Electron 桌面应用047f37e
│ 为什么第二步:引擎有了需要壳子,妈妈说"放桌面"
│ 产出electron/main.ts + preload.ts + package.json + 构建配置
第三步:人格 Agentdcf8f7d
│ 为什么第三步:引擎+壳子有了,缺"活的灵魂"
│ 产出persona-agent.ts(462行) + AgentChat 组件 + Agent API
第四步签名安装84a631d
│ 为什么最后:妈妈说"安装到桌面让我能打开"
│ 产出:签名版 HoloLake Era.app(252MB) + 开发日志
```
---
## 三 · 每个模块的开发详情和踩坑记录
### 3.1 Git 引擎层
**代码位置**REPO-014 → `product-source/guanghu-knowledge-base/server/git-engine.ts`
**设计原则**
- 文档 = Markdown 文件 + frontmattergray-matter 解析)
- 文档路径 = 相对 `docs/` 的文件路径(即唯一 ID
- 每次写操作自动 git commit
- `resolvePath()` 防路径穿越
**Bug 修复**
| 编号 | 错误 | 原因 | 修复 |
|------|------|------|------|
| GE-01 | `diff` 包没有 `createDiff` 导出 | 导出名不对 | `import { diffLines } from 'diff'` |
| GE-02 | `simple-git on a directory that does not exist` | 目录不存在 | 构造函数 `fsSync.mkdirSync(repoPath, { recursive: true })` |
### 3.2 Express API 服务器
**代码位置**REPO-014 → `product-source/guanghu-knowledge-base/server/index.ts`
**15 个 API 端点**
| 方法 | 路径 | 功能 |
|------|------|------|
| GET | `/api/health` | 健康检查 |
| GET | `/api/tree` | 文档树 |
| GET/POST/PUT/DELETE | `/api/docs/{*docPath}` | 文档 CRUD |
| POST | `/api/move` | 移动/重命名 |
| GET | `/api/history/{*docPath}` | 版本历史 |
| GET | `/api/version/:hash/{*docPath}` | 某版本内容 |
| GET | `/api/diff/{*docPath}` | 版本对比 |
| GET | `/api/search?q=` | 全文搜索 |
| GET | `/api/agent/status` | Agent 状态 |
| POST | `/api/agent/chat` | Agent 对话 |
| GET | `/api/agent/conversation` | 对话历史 |
| POST | `/api/agent/clear` | 清空对话 |
**Bug 修复**
| 编号 | 错误 | 原因 | 修复 |
|------|------|------|------|
| API-01 | Express v5 `*` 语法报错 | 通配符语法变了 | `{*docPath}` |
| API-02 | `:docPath(*)` 也报错 | 又一种错误语法 | 同上 |
| API-03 | `path` 参数收到 Array 不是 string | `{*param}` 返回数组 | 工具函数 `p()` 统一转换 |
### 3.3 人格 Agent
**代码位置**REPO-014 → `product-source/guanghu-knowledge-base/server/persona-agent.ts`
**Grok Build 架构拆解映射**
| Grok Crate | 光湖实现 | 职责 |
|---|---|---|
| `xai-grok-agent` | `PersonaAgent` | Agent 核心 |
| `xai-grok-tools` | `PersonaToolBridge` | 工具注册+执行 |
| `xai-grok-memory` | 待扩展 | 跨会话记忆 |
| `xai-agent-lifecycle` | Electron 主进程 | 生命周期 |
**7 个内置工具**`read_document` / `create_document` / `update_document` / `delete_document` / `search_documents` / `list_documents` / `view_history`
**Agent 对话流程**
```
用户消息 → chat()
→ 构建 system prompt人格 + 工具列表 + 核心原则)
→ callLLM(messages)
→ 有 API Key → OpenAI-compatible API支持 tool calling
→ 无 API Key → 离线模式(模拟回复)
→ 如果有 toolCalls → 执行工具 → 工具结果推入对话 → 再调 LLM
→ 返回最终回复
```
### 3.4 Electron 桌面应用
**代码位置**REPO-014 → `product-source/hololake-desktop/`
**主进程设计**
- 开发模式:`spawn('npx', ['tsx', serverScript])` 启动外部服务器
- 生产模式:`require('server-bundle.js')` 内嵌在主进程
### 3.5 签名安装
**证书**`Developer ID Application: bei sun (825A9L3G7Q)`
**踩坑链**
| 步骤 | 问题 | 修复 |
|------|------|------|
| 1 | AppleDouble`._*`)导致 asar 崩溃 | `dot_clean` 递归清理 |
| 2 | asar 在 ExFAT 上仍然崩溃 | `"asar": false` |
| 3 | codesign 在 ExFAT 上复制又产生 `._*` | 在本地磁盘 /tmp 构建 |
| 4 | node_modules `.bin` 符号链接断 | `npm rebuild` |
| 5 | codesign 卡住CPU 0% | 等钥匙串弹窗 → 点"始终允许" |
| 6 | `Failed to reserve virtual memory for CodeRange` | entitlements.plist 加 JIT 权限 |
| 7 | 生产模式 `npx tsx` 找不到 | 改成 `require(server-bundle.js)` |
| 8 | identity 前缀报错 | 去掉 `Developer ID Application:` 前缀 |
| 9 | Helper app 里 `.cstemp` 残留 | `find -name .cstemp -delete` |
**entitlements.plist 内容**
```xml
com.apple.security.cs.allow-jit = true
com.apple.security.cs.allow-unsigned-executable-memory = true
com.apple.security.cs.allow-dyld-environment-variables = true
```
---
## 四 · 代码路径映射(第五域 → REPO-014
| 模块 | REPO-014 路径 | 说明 |
|------|------|------|
| Git 引擎 | `product-source/guanghu-knowledge-base/server/git-engine.ts` | 368 行 |
| API 服务器 | `product-source/guanghu-knowledge-base/server/index.ts` | 264 行15 个端点 |
| 人格 Agent | `product-source/guanghu-knowledge-base/server/persona-agent.ts` | 462 行 |
| React 前端 | `product-source/guanghu-knowledge-base/src/` | 6 个组件 + CSS |
| API 客户端 | `product-source/guanghu-knowledge-base/src/api.ts` | 前端和 Agent 共用 |
| Electron 主进程 | `product-source/hololake-desktop/electron/main.ts` | 157 行 |
| IPC 桥梁 | `product-source/hololake-desktop/electron/preload.ts` | Forgejo 接口预留 |
| 构建配置 | `product-source/hololake-desktop/package.json` | 签名 + asar:false |
| Forgejo 集成 | `product-source/hololake-desktop/forgejo/INTEGRATION.md` | 声明式集成 |
| 知识库 CSS | `product-source/guanghu-knowledge-base/src/styles/app.css` | 746 行深色主题 |
**前端组件**
| 组件 | 路径 | 功能 |
|------|------|------|
| App | `src/App.tsx` | 三栏布局主组件 |
| DocTree | `src/components/DocTree.tsx` | 文档树导航 |
| Editor | `src/components/Editor.tsx` | Markdown 编辑器 |
| SearchBar | `src/components/SearchBar.tsx` | 防抖搜索 |
| VersionHistory | `src/components/VersionHistory.tsx` | 版本历史 + diff |
| AgentChat | `src/components/AgentChat.tsx` | Agent 对话面板 |
---
## 五 · 已知问题(后续人格体排查清单)
| 编号 | 问题 | 影响 | 建议修复方向 |
|------|------|------|------|
| FIX-01 | server-bundle.js 未编译 | 生产模式 App 白屏 | esbuild 打包 server → dist-electron/server-bundle.js |
| FIX-02 | 生产模式 require 路径 | 打包后找不到 server-bundle | 确认 __dirname 在 asar:false 下指向正确位置 |
| FIX-03 | Agent LLM 未配置 | Agent 离线模式 | 加 UI 配置 API Key |
| FIX-04 | Forgejo 远程同步 | 只有本地 | 实现 preload → server → git remote 对接 |
| FIX-05 | asar 未启用 | 包 252MB 偏大 | 解决 ExFAT AppleDouble 后可启用 |
| FIX-06 | Express v5 ESM/CJS 兼容 | esbuild 打包可能报错 | 测试 `--format=cjs` 或 `--format=esm` |
---
## 六 · 提交链
| 提交 | 内容 | REPO-014 远端验证 |
|------|------|------|
| `070b11a` | Outline 样本组件卡 10 张 | ✓ |
| `920b6bf` | Git 替代数据库决策文档 | ✓ |
| `ecfeca4` | 知识库模块 v0.1.0 | ✓ |
| `047f37e` | Desktop v0.5.0 | ✓ |
| `dcf8f7d` | 人格 Agent v0.1.0 | ✓ |
| `84a631d` | 签名修复 + 开发日志 | ✓ |
---
## 七 · 环境信息
- **OS**: macOS 26.5.2 (darwin arm64)
- **Node**: v22+
- **Electron**: v35
- **文件系统**: ExFAT移动硬盘 JZAO+ APFS本地磁盘
- **签名证书**: Developer ID Application: bei sun (825A9L3G7Q)
- **SSH**: ~/.ssh/id_ed25519SG-001
- **REPO-012**: `https://guanghulab.com/code/bingshuo/guanghu-ice-heart`(本文档所在仓库)
- **REPO-014**: `https://guanghulab.com/code/bingshuo/hololake-system-architecture`(代码仓库)
- **REPO-015**: `https://guanghulab.com/code/bingshuo/grok-build-upstream-mirror`Grok 上游镜像,只读学习)
- **Grok Build 本地镜像**: `/Volumes/JZAO/HoloLake/upstream-mirrors/grok-build-upstream.git`
- **Forgejo 离线包**: `~/Desktop/光湖代码频道-Forgejo-16.0.1-完整离线包/`