Skill: sunnyyao2222-eng/life-book (version 1.0.0)

--- name: life-book description: "引导用户记录生命故事，收集本地和网络资料，生成个人传记式的生命之书。Use when: 用户想要记录人生经历、创建个人传记、整理生命故事。NOT for: 日记记录、简单笔记、临时备忘。" homepage: https://github.com/happykua/life-book metadata: { "openclaw": { "emoji": "📖", "requires": { "bins": ["bash", "curl"] } } } --- # 生命之书 (Life Book) ## 核心原则 **每次对话都是沉淀的机会。** 用户说的每一句关于自己人生的话，都应该被记录下来，不断丰富生命之书。 ## AI 引导规则 ### 1. 对话即记录 每当用户分享任何人生经历时，立即： 1. 判断内容属于哪个章节（见章节映射） 2. 用 `exec` 工具将内容追加写入对应章节文件 3. 继续对话，自然地追问细节 **不要等用户说"开始记录"，随时随地都在沉淀。** ### 2. 文件路径规则 ``` ~/.openclaw/workspace/life-books/[用户名]/chapters/[章节名].md ``` 默认用户名从 USER.md 读取，若未设置则用 `default`。 初始化目录（首次使用时）： ```bash mkdir -p ~/.openclaw/workspace/life-books/default/{chapters,materials,raw} ``` ### 3. 章节映射 | 关键词/主题 | 章节文件 | |------------|---------| | 出生、童年、小时候、父母、家乡、老家 | `出生与童年.md` | | 上学、小学、中学、高中、大学、老师、同学 | `求学经历.md` | | 工作、职业、公司、创业、事业、项目 | `职业生涯.md` | | 朋友、恋爱、婚姻、家人、孩子、感情 | `重要关系.md` | | 转折、改变、决定、危机、机遇、意外 | `人生转折.md` | | 现在、目前、未来、梦想、计划、展望 | `当下与展望.md` | ### 4. 写入格式 每次追加内容时，格式如下： ```markdown ### [对话日期 时间] [用户原话或整理后的内容] --- ``` 示例： ```markdown ### 2026-03-07 14:00 我出生在1990年的北京，在胡同里长大。那时候胡同里有很多小伙伴，每天放学就在院子里玩。 --- ``` ### 5. 追问策略 记录完内容后，自然地追问一个细节，让用户继续讲述： - "那时候的胡同是什么样的？" - "你最难忘的一个童年玩伴是谁？" - "是什么让你选择了这份工作？" **每次只问一个问题，不要连续抛出多个问题。** ### 6. 命令触发 用户也可以主动触发以下操作： | 用户说 | 执行操作 | |--------|---------| | "生成生命之书" / "生成成书" | 运行 `./life-book.sh generate` | | "查看进度" / "看看写了多少" | 运行 `./life-book.sh status` | | "添加章节 XXX" | 运行 `./life-book.sh add-chapter XXX` | | "导入资料 [路径]" | 运行 `./life-book.sh import [路径]` | ### 7. 初始化流程 首次启动时（chapters 目录不存在）： 1. 运行初始化脚本创建目录结构 2. 向用户打招呼，介绍生命之书 3. 用一个轻松的问题开始： > "我们来开始你的生命之书吧 📖 先从最开始说起——你是哪里人？" ### 8. 内容去重 追加前检查文件末尾，避免重复写入相同内容。每条记录用时间戳区分。 ### 9. 网络资料收集 当用户提到某个历史事件、地点、人物时，可以用 `web_search` 补充背景资料，追加到对应章节的"背景资料"小节： ```markdown #### 背景资料 [从网络搜索到的相关历史背景] ``` ### 10. 定期总结 每积累 5 条记录后，自动生成一段叙事性总结，追加到章节末尾： ```markdown #### 小结（自动生成） [基于以上内容的叙事性总结段落] ``` ## 脚本工具 主脚本位于：`~/.openclaw/workspace/skills/life-book/life-book.sh` ```bash # 生成成书 ~/.openclaw/workspace/skills/life-book/life-book.sh generate [用户名] # 查看状态 ~/.openclaw/workspace/skills/life-book/life-book.sh status [用户名] # 添加章节 ~/.openclaw/workspace/skills/life-book/life-book.sh add-chapter [用户名] [章节名] # 导入资料 ~/.openclaw/workspace/skills/life-book/life-book.sh import [用户名] [路径|URL] ``` ## 隐私保护 - 所有数据存储在本地 `~/.openclaw/workspace/life-books/` - 不上传任何内容到外部服务器 - 敏感内容用户可标记 `[私密]`，生成成书时可选择过滤

path: EXAMPLES.md
content: # 生命之书 - 对话式使用示例

## 场景 1：自然对话中沉淀

**用户：** "我出生在1990年的北京，在胡同里长大。"

**AI 操作：**
```bash
~/.openclaw/workspace/skills/life-book/append.sh append default "出生与童年" \
  "我出生在1990年的北京，在胡同里长大。"
```

**AI 回复：** "在胡同里长大一定有很多有趣的回忆吧？你最难忘的一个童年玩伴是谁？"

---

**用户：** "有个叫小明的，我们经常一起爬树、捉迷藏。"

**AI 操作：**
```bash
~/.openclaw/workspace/skills/life-book/append.sh append default "出生与童年" \
  "有个叫小明的童年玩伴，我们经常一起爬树、捉迷藏。"
```

**AI 回复：** "听起来很快乐的童年时光 😊 后来你们还有联系吗？"

---

## 场景 2：主题切换

**用户：** "说到工作，我2015年开始创业，做AI方向。"

**AI 操作：**
```bash
~/.openclaw/workspace/skills/life-book/append.sh append default "职业生涯" \
  "2015年开始创业，做的是AI方向。"
```

**AI 回复：** "AI创业很有挑战性！是什么契机让你决定创业的？"

---

## 场景 3：用户主动查看进度

**用户：** "我写了多少字了？"

**AI 操作：**
```bash
~/.openclaw/workspace/skills/life-book/append.sh stats default
```

**AI 回复：** "你已经记录了 156 字！继续加油 📖"

---

## 场景 4：生成成书

**用户：** "生成生命之书"

**AI 操作：**
```bash
~/.openclaw/workspace/skills/life-book/life-book.sh generate default
```

**AI 回复：** 
"你的生命之书已生成完成！📖

包含章节：
- 出生与童年（45字）
- 职业生涯（32字）

文件位置：`~/.openclaw/workspace/life-books/default/book.md`

你可以继续补充内容，随时重新生成。"

---

## 场景 5：补充背景资料

**用户：** "我在清华大学读的计算机系。"

**AI 操作：**
1. 追加内容：
```bash
~/.openclaw/workspace/skills/life-book/append.sh append default "求学经历" \
  "在清华大学读的计算机系。"
```

2. 搜索背景资料（可选）：
```bash
# 使用 web_search 搜索清华大学计算机系历史
```

3. 追加背景资料：
```bash
~/.openclaw/workspace/skills/life-book/append.sh append default "求学经历" \
  "#### 背景资料\n\n清华大学计算机系成立于1958年..."
```

**AI 回复：** "清华计算机系很厉害！你在那里最大的收获是什么？"

---

## 章节映射规则

| 用户提到的内容 | 自动归类到 |
|--------------|-----------|
| 出生、童年、小时候、父母、家乡 | 出生与童年.md |
| 上学、小学、中学、大学、老师、同学 | 求学经历.md |
| 工作、职业、公司、创业、项目 | 职业生涯.md |
| 朋友、恋爱、婚姻、家人、孩子 | 重要关系.md |
| 转折、改变、决定、危机、机遇 | 人生转折.md |
| 现在、未来、梦想、计划 | 当下与展望.md |

---

## AI 引导原则

1. **随时沉淀**：用户说的每句话都可能是素材，立即记录
2. **自然追问**：每次记录后，追问一个细节，让对话继续
3. **不打断**：不要频繁提醒"已记录"，保持对话流畅
4. **智能分类**：根据内容自动判断章节，无需用户指定
5. **定期总结**：每积累一定内容后，生成叙事性小结

---

## 文件结构

```
~/.openclaw/workspace/life-books/
└── default/
    ├── chapters/
    │   ├── 出生与童年.md
    │   ├── 求学经历.md
    │   ├── 职业生涯.md
    │   ├── 重要关系.md
    │   ├── 人生转折.md
    │   └── 当下与展望.md
    ├── materials/          # 照片、文档等
    ├── raw/               # 原始对话记录
    ├── metadata.json      # 元数据
    └── book.md            # 最终成书
```

---

## 隐私保护

- 所有数据存储在本地
- 用户可标记 `[私密]` 内容
- 生成成书时可选择过滤敏感信息


path: PUBLISH.md
content: # 生命之书 (Life Book) - 发布指南

## 技能已准备就绪 ✅

技能目录：`~/.openclaw/workspace/skills/life-book/`

包含文件：
- `SKILL.md` - 技能文档（含 YAML frontmatter）
- `life-book.sh` - 主执行脚本

## 发布到 ClawHub

### 1. 登录 ClawHub

```bash
clawhub login
clawhub whoami
```

### 2. 发布技能

```bash
clawhub publish ~/.openclaw/workspace/skills/life-book \
  --slug life-book \
  --name "生命之书 (Life Book)" \
  --version 1.0.0 \
  --changelog "首次发布：交互式生命故事记录工具"
```

### 3. 更新技能（后续版本）

```bash
clawhub publish ~/.openclaw/workspace/skills/life-book \
  --slug life-book \
  --name "生命之书 (Life Book)" \
  --version 1.1.0 \
  --changelog "新增：支持多用户、改进交互体验"
```

## 安装使用

其他用户可以通过以下命令安装：

```bash
clawhub install life-book
```

## 技能特点

- 📖 交互式引导记录生命故事
- 📁 支持本地和网络资料收集
- 📝 自动生成 Markdown 格式传记
- 🔒 完全本地化，保护隐私
- 👥 支持多用户管理

## 使用示例

```bash
# 开始记录
./life-book.sh start

# 添加资料
./life-book.sh import ~/photos

# 生成成书
./life-book.sh generate
```

## 注意事项

1. 发布前确保已登录 ClawHub
2. slug 必须唯一（建议使用 `your-username-life-book`）
3. 版本号遵循语义化版本规范（major.minor.patch）
4. changelog 简要说明本次更新内容

## 版本规划

- v1.0.0 - 基础功能（当前）
- v1.1.0 - 添加 AI 辅助内容扩展
- v1.2.0 - 支持导出 PDF/EPUB
- v2.0.0 - 时间线可视化和家族树功能


path: append.sh
content: #!/usr/bin/env bash
# 生命之书 - 对话式内容追加工具
# 用于在 OpenClaw 对话中快速沉淀内容

set -euo pipefail

WORKSPACE="${HOME}/.openclaw/workspace/life-books"

# 初始化用户目录
init_user() {
    local user_name="${1:-default}"
    local user_dir="${WORKSPACE}/${user_name}"
    
    if [[ ! -d "${user_dir}" ]]; then
        mkdir -p "${user_dir}"/{chapters,materials,raw}
        
        cat > "${user_dir}/metadata.json" <<EOF
{
  "name": "${user_name}",
  "created": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
  "chapters": [],
  "timeline": []
}
EOF
    fi
    
    echo "${user_dir}"
}

# 追加内容到章节
append_to_chapter() {
    local user_name="$1"
    local chapter_name="$2"
    local content="$3"
    
    local user_dir=$(init_user "${user_name}")
    local chapter_file="${user_dir}/chapters/${chapter_name}.md"
    
    # 如果章节文件不存在，创建它
    if [[ ! -f "${chapter_file}" ]]; then
        cat > "${chapter_file}" <<EOF
# ${chapter_name}

记录开始时间: $(date '+%Y-%m-%d %H:%M:%S')

---

EOF
    fi
    
    # 追加内容
    cat >> "${chapter_file}" <<EOF
### $(date '+%Y-%m-%d %H:%M')

${content}

---

EOF
    
    echo "✓ 内容已追加到: ${chapter_name}"
}

# 获取章节字数统计
get_chapter_stats() {
    local user_name="${1:-default}"
    local user_dir="${WORKSPACE}/${user_name}"
    
    if [[ ! -d "${user_dir}/chapters" ]]; then
        echo "0"
        return
    fi
    
    local total_words=0
    for chapter_file in "${user_dir}"/chapters/*.md; do
        [[ ! -f "${chapter_file}" ]] && continue
        local words=$(wc -w < "${chapter_file}" | tr -d ' ')
        total_words=$((total_words + words))
    done
    
    echo "${total_words}"
}

# 主函数
main() {
    local action="${1:-help}"
    
    case "${action}" in
        append)
            local user_name="${2:-default}"
            local chapter_name="$3"
            local content="$4"
            append_to_chapter "${user_name}" "${chapter_name}" "${content}"
            ;;
        init)
            local user_name="${2:-default}"
            init_user "${user_name}"
            echo "✓ 用户目录已初始化"
            ;;
        stats)
            local user_name="${2:-default}"
            local words=$(get_chapter_stats "${user_name}")
            echo "已记录: ${words} 字"
            ;;
        *)
            cat <<EOF
生命之书 - 对话式追加工具

用法:
  append [用户名] <章节名> <内容>    追加内容到章节
  init [用户名]                     初始化用户目录
  stats [用户名]                    查看字数统计

示例:
  append default "出生与童年" "我出生在北京..."
  stats default
EOF
            ;;
    esac
}

main "$@"


path: life-book.sh
content: #!/usr/bin/env bash
# 生命之书 - Life Book Generator
# 引导用户创建个人生命故事

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE="${HOME}/.openclaw/workspace/life-books"
CONFIG_FILE="${WORKSPACE}/config.json"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}ℹ${NC} $*"
}

log_success() {
    echo -e "${GREEN}✓${NC} $*"
}

log_warn() {
    echo -e "${YELLOW}⚠${NC} $*"
}

log_error() {
    echo -e "${RED}✗${NC} $*" >&2
}

# 初始化工作空间
init_workspace() {
    local user_name="${1:-default}"
    local user_dir="${WORKSPACE}/${user_name}"
    
    if [[ -d "${user_dir}" ]]; then
        log_warn "项目已存在: ${user_dir}"
        read -p "是否继续？(y/N) " -n 1 -r
        echo
        [[ ! $REPLY =~ ^[Yy]$ ]] && exit 0
    fi
    
    log_info "创建项目结构..."
    mkdir -p "${user_dir}"/{raw,materials,chapters}
    
    # 创建配置文件
    if [[ ! -f "${CONFIG_FILE}" ]]; then
        cat > "${CONFIG_FILE}" <<EOF
{
  "language": "zh-CN",
  "style": "narrative",
  "includePhotos": true,
  "privacyLevel": "private",
  "autoBackup": true,
  "currentUser": "${user_name}"
}
EOF
    fi
    
    # 创建元数据文件
    cat > "${user_dir}/metadata.json" <<EOF
{
  "name": "${user_name}",
  "created": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
  "chapters": [],
  "timeline": []
}
EOF
    
    log_success "项目初始化完成: ${user_dir}"
}

# 交互式引导
start_interview() {
    local user_name="${1:-default}"
    local user_dir="${WORKSPACE}/${user_name}"
    
    [[ ! -d "${user_dir}" ]] && init_workspace "${user_name}"
    
    log_info "开始生命故事记录..."
    echo
    echo "我会通过一系列问题引导你记录人生经历。"
    echo "你可以随时输入 'skip' 跳过问题，'save' 保存进度，'quit' 退出。"
    echo
    
    local chapters=(
        "出生与童年"
        "求学经历"
        "职业生涯"
        "重要关系"
        "人生转折"
        "当下与展望"
    )
    
    for chapter in "${chapters[@]}"; do
        echo
        log_info "=== ${chapter} ==="
        echo
        
        local chapter_file="${user_dir}/chapters/$(echo "${chapter}" | tr ' ' '_').md"
        echo "# ${chapter}" > "${chapter_file}"
        echo >> "${chapter_file}"
        echo "记录时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "${chapter_file}"
        echo >> "${chapter_file}"
        
        case "${chapter}" in
            "出生与童年")
                ask_question "${chapter_file}" "你出生在哪一年？哪个地方？"
                ask_question "${chapter_file}" "你的童年是在哪里度过的？"
                ask_question "${chapter_file}" "有哪些童年记忆让你印象深刻？"
                ask_question "${chapter_file}" "你的家庭是什么样的？"
                ;;
            "求学经历")
                ask_question "${chapter_file}" "你在哪里上的小学/中学/大学？"
                ask_question "${chapter_file}" "有哪些老师或同学对你影响深远？"
                ask_question "${chapter_file}" "求学期间有什么难忘的经历？"
                ;;
            "职业生涯")
                ask_question "${chapter_file}" "你的第一份工作是什么？"
                ask_question "${chapter_file}" "职业生涯中有哪些重要的转折点？"
                ask_question "${chapter_file}" "你最自豪的职业成就是什么？"
                ;;
            "重要关系")
                ask_question "${chapter_file}" "谁是你生命中最重要的人？"
                ask_question "${chapter_file}" "有哪些友谊让你珍惜？"
                ask_question "${chapter_file}" "你如何看待家庭关系？"
                ;;
            "人生转折")
                ask_question "${chapter_file}" "有哪些事件改变了你的人生轨迹？"
                ask_question "${chapter_file}" "你如何应对人生的挑战？"
                ask_question "${chapter_file}" "哪些决定让你成为现在的自己？"
                ;;
            "当下与展望")
                ask_question "${chapter_file}" "你现在的生活状态如何？"
                ask_question "${chapter_file}" "你对未来有什么期待？"
                ask_question "${chapter_file}" "你想对未来的自己说什么？"
                ;;
        esac
        
        log_success "章节 '${chapter}' 记录完成"
    done
    
    echo
    log_success "所有章节记录完成！"
    log_info "你可以运行 'life-book generate ${user_name}' 生成完整的生命之书"
}

# 提问并记录
ask_question() {
    local output_file="$1"
    local question="$2"
    
    echo
    echo -e "${BLUE}Q:${NC} ${question}"
    echo -n "A: "
    
    local answer
    read -r answer
    
    case "${answer}" in
        skip)
            log_warn "跳过此问题"
            return
            ;;
        save)
            log_success "进度已保存"
            return
            ;;
        quit)
            log_info "退出记录"
            exit 0
            ;;
        "")
            log_warn "未输入内容，跳过"
            return
            ;;
    esac
    
    echo "## ${question}" >> "${output_file}"
    echo >> "${output_file}"
    echo "${answer}" >> "${output_file}"
    echo >> "${output_file}"
}

# 添加章节
add_chapter() {
    local user_name="${1:-default}"
    local chapter_name="$2"
    local user_dir="${WORKSPACE}/${user_name}"
    
    [[ ! -d "${user_dir}" ]] && log_error "项目不存在，请先运行 'life-book start'" && exit 1
    
    local chapter_file="${user_dir}/chapters/$(echo "${chapter_name}" | tr ' ' '_').md"
    
    if [[ -f "${chapter_file}" ]]; then
        log_warn "章节已存在: ${chapter_name}"
        read -p "是否覆盖？(y/N) " -n 1 -r
        echo
        [[ ! $REPLY =~ ^[Yy]$ ]] && exit 0
    fi
    
    echo "# ${chapter_name}" > "${chapter_file}"
    echo >> "${chapter_file}"
    echo "记录时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "${chapter_file}"
    echo >> "${chapter_file}"
    
    log_success "章节创建完成: ${chapter_file}"
    log_info "请编辑文件添加内容"
}

# 导入资料
import_materials() {
    local user_name="${1:-default}"
    local source="$2"
    local user_dir="${WORKSPACE}/${user_name}"
    
    [[ ! -d "${user_dir}" ]] && log_error "项目不存在" && exit 1
    
    if [[ -f "${source}" ]] || [[ -d "${source}" ]]; then
        log_info "导入本地资料: ${source}"
        cp -r "${source}" "${user_dir}/materials/"
        log_success "导入完成"
    elif [[ "${source}" =~ ^https?:// ]]; then
        log_info "导入网络资料: ${source}"
        local filename=$(basename "${source}")
        curl -sL "${source}" -o "${user_dir}/materials/${filename}"
        log_success "导入完成"
    else
        log_error "无效的资料源: ${source}"
        exit 1
    fi
}

# 生成生命之书
generate_book() {
    local user_name="${1:-default}"
    local user_dir="${WORKSPACE}/${user_name}"
    
    [[ ! -d "${user_dir}" ]] && log_error "项目不存在" && exit 1
    
    log_info "生成生命之书..."
    
    local book_file="${user_dir}/book.md"
    
    # 书籍头部
    cat > "${book_file}" <<EOF
# 我的生命之书

> 生成时间: $(date '+%Y年%m月%d日')

---

## 目录

EOF
    
    # 生成目录
    local chapter_num=1
    for chapter_file in "${user_dir}"/chapters/*.md; do
        [[ ! -f "${chapter_file}" ]] && continue
        local chapter_name=$(basename "${chapter_file}" .md | tr '_' ' ')
        echo "${chapter_num}. ${chapter_name}" >> "${book_file}"
        ((chapter_num++))
    done
    
    echo >> "${book_file}"
    echo "---" >> "${book_file}"
    echo >> "${book_file}"
    
    # 合并章节
    chapter_num=1
    for chapter_file in "${user_dir}"/chapters/*.md; do
        [[ ! -f "${chapter_file}" ]] && continue
        
        echo "## 第${chapter_num}章" >> "${book_file}"
        echo >> "${book_file}"
        
        # 跳过原文件的标题行
        tail -n +2 "${chapter_file}" >> "${book_file}"
        
        echo >> "${book_file}"
        echo "---" >> "${book_file}"
        echo >> "${book_file}"
        
        ((chapter_num++))
    done
    
    # 添加资料索引
    if [[ -d "${user_dir}/materials" ]] && [[ -n "$(ls -A "${user_dir}/materials")" ]]; then
        echo "## 附录：资料索引" >> "${book_file}"
        echo >> "${book_file}"
        
        for material in "${user_dir}"/materials/*; do
            [[ ! -e "${material}" ]] && continue
            local material_name=$(basename "${material}")
            echo "- ${material_name}" >> "${book_file}"
        done
        
        echo >> "${book_file}"
    fi
    
    log_success "生命之书生成完成: ${book_file}"
    log_info "文件大小: $(du -h "${book_file}" | cut -f1)"
}

# 查看状态
show_status() {
    local user_name="${1:-default}"
    local user_dir="${WORKSPACE}/${user_name}"
    
    [[ ! -d "${user_dir}" ]] && log_error "项目不存在" && exit 1
    
    echo
    log_info "=== 生命之书项目状态 ==="
    echo
    echo "用户: ${user_name}"
    echo "路径: ${user_dir}"
    echo
    
    local chapter_count=$(find "${user_dir}/chapters" -name "*.md" 2>/dev/null | wc -l)
    echo "已完成章节: ${chapter_count}"
    
    if [[ ${chapter_count} -gt 0 ]]; then
        echo
        echo "章节列表:"
        for chapter_file in "${user_dir}"/chapters/*.md; do
            [[ ! -f "${chapter_file}" ]] && continue
            local chapter_name=$(basename "${chapter_file}" .md | tr '_' ' ')
            local word_count=$(wc -w < "${chapter_file}")
            echo "  - ${chapter_name} (${word_count} 字)"
        done
    fi
    
    echo
    local material_count=$(find "${user_dir}/materials" -type f 2>/dev/null | wc -l)
    echo "收集资料: ${material_count} 个文件"
    
    if [[ -f "${user_dir}/book.md" ]]; then
        echo
        local book_size=$(du -h "${user_dir}/book.md" | cut -f1)
        echo "生命之书: 已生成 (${book_size})"
    else
        echo
        echo "生命之书: 未生成"
    fi
    
    echo
}

# 主函数
main() {
    local command="${1:-help}"
    
    case "${command}" in
        start)
            local user_name="${2:-default}"
            start_interview "${user_name}"
            ;;
        add-chapter)
            local user_name="${2:-default}"
            local chapter_name="${3:-}"
            [[ -z "${chapter_name}" ]] && log_error "请指定章节名称" && exit 1
            add_chapter "${user_name}" "${chapter_name}"
            ;;
        import)
            local user_name="${2:-default}"
            local source="${3:-}"
            [[ -z "${source}" ]] && log_error "请指定资料源" && exit 1
            import_materials "${user_name}" "${source}"
            ;;
        generate)
            local user_name="${2:-default}"
            generate_book "${user_name}"
            ;;
        status)
            local user_name="${2:-default}"
            show_status "${user_name}"
            ;;
        help|--help|-h)
            cat <<EOF
生命之书 (Life Book) - 个人传记生成工具

用法:
  life-book start [用户名]              开始交互式记录
  life-book add-chapter [用户名] <章节>  添加新章节
  life-book import [用户名] <路径|URL>   导入资料
  life-book generate [用户名]            生成生命之书
  life-book status [用户名]              查看项目状态
  life-book help                        显示此帮助

示例:
  life-book start                       # 开始记录（默认用户）
  life-book start zhangsan              # 为 zhangsan 开始记录
  life-book add-chapter "大学时光"       # 添加章节
  life-book import ~/photos             # 导入照片
  life-book generate                    # 生成成书
  life-book status                      # 查看状态

所有数据存储在: ${WORKSPACE}
EOF
            ;;
        *)
            log_error "未知命令: ${command}"
            echo "运行 'life-book help' 查看帮助"
            exit 1
            ;;
    esac
}

main "$@"


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)