Files
Obsidian/CLAUDE.md
T
Serendipity ffa6cbe4d1 chore: 添加 .gitignore,更新 CLAUDE.md,新增网络基础设施科普博客
- 新建 .gitignore:忽略 workspace.json、.superpowers/、OS 文件
- 更新 CLAUDE.md:新增博客发布流程、Halo CLI、Club-Service-Guide 说明
- 新增博客:从输入网址到看见博客——我的网络基础设施全揭秘
- 停止跟踪 .obsidian/workspace.json
2026-07-23 22:01:05 +08:00

156 lines
6.5 KiB
Markdown
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.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
这是一个 Obsidian vault,包含两个主要项目:
- **obsidian-halo** — 将 Obsidian 笔记发布到 [Halo](https://github.com/halo-dev/halo) 博客平台的社区插件
- **Club-Service-Guide** — 河南理工大学人工智能协会内部知识库(独立 Git 仓库,托管于协会 Gitea)
vault 根目录的 `博客/` 目录存放博客文章草稿,通过 Halo CLI 发布到 `blog.liuhangyv.top`
### 博客目录结构
```text
博客/
├── covers/ # 博客封面图片(.png)
├── AI与大模型/ # AI 与大模型相关文章
├── 学术与效率/ # 学术研究与效率工具
├── 数据分析与报告/ # 数据分析与报告相关
├── 机器学习/ # 机器学习理论与应用
├── 编程与工具/ # 编程技巧与工具链
└── 其他/ # 未分类文章
```
## 博客发布
### 发布方式
两种方式均可发布博客文章,优先使用 Halo CLI:
1. **Halo CLI**(推荐)— 从 Markdown 文件直接发布
```bash
# 导入并发布文章(导入后默认为草稿,需手动 publish)
npx halo post import-markdown --file "博客/编程与工具/文章名.md"
# 更新分类、slug 并发布
npx halo post update <post-name> --categories "<category-name>" --slug "slug-name" --publish true
```
2. **obsidian-halo 插件** — 在 Obsidian 编辑器内通过命令面板发布
### Halo CLI 配置文件
当前激活的 profile 是 `aliyun`,指向生产环境 `https://blog.liuhangyv.top`。NAS 本地有 Halo 备份实例(`http://192.168.5.8:8090`profile `local`),用于测试。
```bash
npx halo post list --page 1 --size 20 # 查看文章列表
npx halo post get <name-or-id> # 查看文章详情
npx halo post create --title "标题" --content "内容" --publish true
npx halo post update <name> --categories "..." --tags "..." --publish true
npx halo post tag list # 列出所有标签
npx halo post category list # 列出所有分类
```
### 博客分类与标签(硬约束)
**发布时必须只使用现有分类和标签,禁止创建新的。** 现有 8 个分类和 11 个标签(具体列表见 memory `halo-blog-tags`)。
常用组合:
- 技术教程/工具文章 → 分类 `技术思考`,标签 `技术深潜`+ `零基础入门` 如面向新手)
- 协会活动/通知 → 分类 `协会进行时`,标签 `协会动态`
- AI 科普/入门 → 分类 `成长实验室`,标签 `零基础入门, AI智能体`
### 博客文章 Frontmatter 格式
```yaml
---
title: 文章标题
date: 2026-07-23
author: liuhangyv
category: 技术思考 # 必须从现有 8 个分类中选
tags:
- 技术深潜 # 必须从现有 11 个标签中选
- 零基础入门
excerpt: 文章摘要
---
```
## Club-Service-Guide
`Club-Service-Guide/` 是河南理工大学人工智能协会的内部知识库项目,有独立的 Git 仓库和 CLAUDE.md。
- **Git 远程**: `git@gitea.liuhangyv.top:Serendipity/Club-Service-Guide.git`
- **访问方式**: Obsidian 打开 `Club-Service-Guide/` 目录作为独立 vault
- **链接规范**: 使用标准 Markdown 相对路径(`[文本](路径.md)`),禁用 `[[wiki-link]]`Gitea Web 不渲染)
- **提交格式**: 约定式提交 `docs:` / `feat:`
## 开发命令
所有开发命令在 `obsidian-halo/` 目录下执行,使用 pnpm 作为包管理器:
```bash
cd obsidian-halo
pnpm install # 安装依赖
pnpm run dev # 开发模式(watch + 自动构建)
pnpm run build # 生产构建(输出 main.js
pnpm run check # Biome lint + 格式化(自动修复)
pnpm test # 运行测试(watch 模式)
pnpm run test:run # 运行测试(单次)
```
构建产物为 `obsidian-halo/main.js`,直接由 Obsidian 加载。
## 代码规范
- **Linter/Formatter**: Biome(非 ESLint/Prettier),配置在 `biome.json`
- 缩进: 2 空格,行宽 120,LF 换行,双引号,尾逗号
- 测试文件放在源码同级的 `__tests__/` 目录,使用 Vitest
## 架构
### 技术栈
- TypeScript + Obsidian Plugin API
- Rslib(基于 Rspack 的库构建工具)打包,输出 CJS 格式
- `@halo-dev/api-client` 与 Halo API 交互
- i18next 国际化(en / zh-cn / zh-tw
- gray-matter 解析 frontmattermarkdown-it 渲染 Markdown
### 目录结构
```text
obsidian-halo/src/
├── main.ts # 插件入口,注册命令和 UI
├── settings.ts # 设置类型定义和设置面板
├── i18n/ # 国际化资源
├── commands/ # 命令实现(发布、删除、导入、搜索等)
├── modals/ # 弹窗 UI 组件
├── views/ # 面板视图(同步状态)
├── services/ # 核心业务逻辑层
│ ├── client.ts # HTTP 客户端(封装 Obsidian requestUrl
│ ├── halo-service.ts # 主服务门面,协调各子服务
│ ├── post-service.ts # 文章 CRUD
│ ├── content-service.ts # 内容处理
│ ├── image-service.ts # 图片上传
│ ├── taxonomy-service.ts # 标签/分类管理
│ ├── types.ts # Halo API 数据类型(Post, Tag, Category 等)
│ └── error.ts # 错误类型体系(HaloError / HttpError
├── service/ # 兼容性重导出层(指向 services/)
└── utils/ # 工具函数(重试、日志、ID 生成、Markdown 处理等)
```
### 关键设计模式
- **HaloService(门面模式)**: `src/services/halo-service.ts` 是核心协调器,组合 PostService、ImageService、TaxonomyService、ContentService 完成发布/拉取/导入等操作
- **HaloClientHTTP 封装)**: 封装 Obsidian 的 `requestUrl`,内置重试机制(`withRetry`)和错误映射
- **Frontmatter 驱动**: 已发布文章通过 YAML frontmatter 中的 `halo` 字段(site/name/publish)追踪同步状态
- **多站点支持**: 设置中可配置多个 Halo 站点,通过 `HaloSite` 接口管理,支持设置默认站点
### 服务层兼容路径
`src/service/index.ts` 是兼容性重新导出,实际指向 `src/services/halo-service.ts``main.ts` 通过 `import HaloService from "./service"` 引入。新功能应写在 `src/services/` 中。