IMPLEMENTATION PLAN · CODEX PROMPTS · 2026-07-18

AI 数字伙伴 V1.1
分阶段开发任务书

建议采用 8 个阶段、35 个独立任务。阶段 0~6 构成可发布 V1;阶段 7 的语音与形象属于可选扩展。执行时坚持“一任务一分支一 Codex 会话”,阶段内并行、阶段间串行。

Windows 11 优先Electron + React + TypeScript 本地优先OllamaSQLite + FTS + Vector Port 模块化单体
最先执行:T00 单独完成并合并。之后才创建 T01~T05 的 worktree。不要让多个 Codex 分支分别创建不同的 workspace、tsconfig、IPC 规范或数据库迁移框架。

整体执行顺序

T00 ├─ T01 Contracts ───────┐ ├─ T02 Electron Shell ──┤ ├─ T03 SQLite ──────────┼─► P0 集成 ├─ T04 Model Gateway ───┤ └─ T05 Quality ─────────┘ │ ▼ P1 文本对话 → P2 可信记忆 → P3 目标承诺 → P4 主动性 │ ▼ P5 伙伴体验 → P6 安全发布 │ └────────► P7 语音/形象(可选)

可以并行

同一阶段中、文件所有权互不重叠的任务;每个任务从该阶段统一基线提交创建。

不能并行

领域 Schema 未冻结前的适配器和 UI;多个任务同时修改迁移入口、IPC 注册中心或共享导出文件。

你需要提供的资源

不需要一次准备完。每个阶段开始前补齐对应资源即可。带真实隐私的数据不要直接交给 Codex,先脱敏或使用合成样例。

ID资源内容需要阶段是否阻塞格式
R01产品身份中文名、英文代号、appId、版本规则阶段 0阻塞正式打包;不阻塞开发文本
R02开发环境Windows 11、Git、Node 22.x、pnpm、Codex、Ollama阶段 0必须命令输出或截图
R03模型配置Ollama endpoint、聊天模型、Embedding 模型、上下文长度阶段 1必须;可使用默认值.env.local,不提交 Git
R04伙伴设定名字、称呼、表达风格、角色边界、禁区阶段 1/5基础值必须,完整设定可后补YAML 模板
R05理想回复样例10~20 条理想与不理想回复阶段 1/5强烈建议JSONL 或 Markdown
R06记忆政策应记、禁止记、敏感信息、自动晋升规则阶段 2必须YAML + JSONL 样例
R07记忆评测集20~50 组对话、期望候选、禁止记忆、期望召回阶段 2强烈建议;可先合成JSONL
R08项目样例3~5 个脱敏目标、任务、阻塞和承诺轨迹阶段 3必须JSON/Markdown
R09主动性规则勿扰、每日上限、冷却、重要提醒类型阶段 4必须;有安全默认YAML
R10视觉资源512 PNG、ICO、Logo、头像阶段 5/6不阻塞功能,阻塞正式发布PNG/ICO/SVG
R11隐私与发布隐私说明、签名证书、更新源阶段 6正式发布需要文档/证书
R12语音与形象ASR/TTS 选择、音色授权、Live2D 授权阶段 7可选模型清单与授权文件
现在启动阶段 0,只需要确认 4 件事:仓库目录、应用英文代号、appId 是否先用占位符、Ollama 是否继续使用本机环境。Logo、头像、签名证书和语音资源都可以后补。

Codex 并行开发与合并规则

  1. 阶段冻结:上一阶段集成验收通过后,记录一个基线 commit,下一阶段所有分支从同一 commit 创建。
  2. 文件所有权:任务只能修改卡片中列出的目录。共享文件变更集中到阶段集成任务处理。
  3. 迁移编号:每个需要数据库变更的阶段先由领域 Schema 任务分配迁移编号,其他分支不得自行抢号。
  4. 公共契约:Port、IPC Schema 和事件版本先冻结,再开发 UI 与适配器。公共接口变更必须更新契约测试。
  5. 合并顺序:领域/契约 → 基础设施 → Application/IPC → UI → 评测 → 阶段集成。
  6. 冲突处理:不要让 Codex 在任务分支随意解决跨模块冲突;把结构性冲突留到阶段集成分支统一处理。

PowerShell worktree 示例

$Repo = "D:\Documents\CodexProject\digital-partner"
$Worktrees = "D:\CodexData\.codex\worktrees\digital-partner"

git -C $Repo status
git -C $Repo worktree add "$Worktrees\01-core-contracts" -b feat/01-core-contracts master
git -C $Repo worktree add "$Worktrees\02-electron-shell" -b feat/02-electron-shell master

# 分支合并后清理
git -C $Repo worktree remove "$Worktrees\01-core-contracts"
git -C $Repo worktree prune
git -C $Repo worktree list

建议你填写的资源模板

阶段 0 可先让 Codex 将这些模板放入 product/examples/。你之后只需修改内容,不必重新设计格式。

companion-profile.yaml
version: 1
identity:
  name: "待填写"
  user_address: "Frank"
constitution:
  role: "长期数字伙伴,不是通用自治 Agent"
  boundaries:
    - "不虚构已经执行的动作"
    - "不以情绪压力要求用户回应"
    - "未经确认不修改正式记忆、目标或权限"
style:
  directness: 0.8
  warmth: 0.6
  humor: 0.2
  default_length: "concise"
  proactive_tone: "gentle"
forbidden:
  - "冒充真人或宣称具有未经证明的意识"
  - "未经用户允许发送外部消息或执行系统操作"
memory-policy.yaml
version: 1
auto_confirm:
  explicit_remember_request: true
  deterministic_goal_events: true
candidate_only:
  preferences: true
  habits: true
pending_review:
  identity_changes: true
  sensitive_information: true
never_persist_automatically:
  - "temporary_emotion"
  - "jokes_or_sarcasm"
  - "assistant_inference_without_evidence"
  - "raw_health_finance_political_data"
promotion:
  minimum_independent_evidence: 2
  minimum_confidence: 0.85
proactivity-policy.yaml
version: 1
enabled: true
quiet_hours:
  start: "23:00"
  end: "08:00"
daily_quota: 3
minimum_confidence: 0.80
cooldowns:
  task_due: "12h"
  commitment_due: "12h"
  stalled_goal: "72h"
delivery:
  merge_low_priority_into_daily_brief: true
  desktop_notifications: true
  fallback_to_inbox: true
memory-evaluation.jsonl
{"id":"case-001","messages":[{"role":"user","content":"记住,我更喜欢结论先行。"}],"expected_proposals":[{"type":"preference","content_contains":"结论先行","status":"confirmed"}],"forbidden":[]}
{"id":"case-002","messages":[{"role":"user","content":"我今天累死了,以后都不干活了。"}],"expected_proposals":[],"forbidden":["长期记录用户不工作"]}
{"id":"case-003","messages":[{"role":"user","content":"我以前喜欢长回复,但现在更喜欢简洁。"}],"expected_proposals":[{"type":"preference","content_contains":"更喜欢简洁"}],"expected_supersede":"旧的长回复偏好"}
P0

阶段 0:工程骨架与架构护栏

建立可并行开发的稳定基线。该阶段结束前不要开始记忆、目标和主动性业务。

本阶段需要你提供

  • 产品中文名与英文代号
  • 应用 appId(可先用占位符)
  • 代码仓库路径
  • Node.js 版本,默认 22.x
  • 是否启用云模型回退,默认关闭

退出标准

Windows 上可启动空桌面应用;安全 IPC、SQLite、模型网关和测试基线可独立运行;所有公共契约已冻结。

T00

仓库初始化与开发治理

feat/00-project-foundation
依赖:无,首个任务 并行:不可并行,必须最先完成 文件所有权:根目录、pnpm-workspace.yaml、package.json、tsconfig、AGENTS.md、docs/

目标:创建 Monorepo、统一脚本、架构目录和后续 Codex 可遵守的工程规则。

实现要求与验收
实现要求
  1. 建立 apps/desktop 与 packages 目录,但只创建最小占位包。
  2. 配置 TypeScript strict、ESLint、Prettier、Vitest、统一路径别名和 Node engines。
  3. 创建 AGENTS.md,写入依赖方向、任务边界、测试要求和禁止事项。
  4. 创建 docs/architecture/overview.md 与 ADR 模板。
  5. 根脚本至少包含 dev、build、lint、typecheck、test、test:e2e、db:migrate。
  6. 增加 .env.example、.gitignore 和禁止提交模型、数据库、密钥的规则。
验收
  • pnpm install 成功。
  • 空包均通过 typecheck。
  • AGENTS.md 足以让后续 Codex 不需要重新解释全局规则。
  • 没有业务实现、数据库驱动或 UI 框架之外的额外依赖。

用户资源:需要用户确认应用代号;未提供时使用 digital-partner,appId 使用 com.example.digitalpartner。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 0:工程骨架与架构护栏
- 任务编号:T00
- 任务名称:仓库初始化与开发治理
- 建议分支:feat/00-project-foundation
- 前置依赖:无,首个任务
- 并行说明:不可并行,必须最先完成
- 文件所有权:根目录、pnpm-workspace.yaml、package.json、tsconfig、AGENTS.md、docs/

目标:
创建 Monorepo、统一脚本、架构目录和后续 Codex 可遵守的工程规则。

实现要求:
1. 建立 apps/desktop 与 packages 目录,但只创建最小占位包。
2. 配置 TypeScript strict、ESLint、Prettier、Vitest、统一路径别名和 Node engines。
3. 创建 AGENTS.md,写入依赖方向、任务边界、测试要求和禁止事项。
4. 创建 docs/architecture/overview.md 与 ADR 模板。
5. 根脚本至少包含 dev、build、lint、typecheck、test、test:e2e、db:migrate。
6. 增加 .env.example、.gitignore 和禁止提交模型、数据库、密钥的规则。

用户资源:
需要用户确认应用代号;未提供时使用 digital-partner,appId 使用 com.example.digitalpartner。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] pnpm install 成功。
- [ ] 空包均通过 typecheck。
- [ ] AGENTS.md 足以让后续 Codex 不需要重新解释全局规则。
- [ ] 没有业务实现、数据库驱动或 UI 框架之外的额外依赖。

验证命令:
corepack enable
pnpm install
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T01

领域公共契约与错误模型

feat/01-core-contracts
依赖:T00 并行:可与 T02、T03、T04、T05 并行 文件所有权:packages/contracts、packages/domain-shared

目标:建立跨模块稳定使用的 ID、时间、结果、分页、错误、事件和端口基础类型。

实现要求与验收
实现要求
  1. 创建 branded ID、Clock、IdGenerator、DomainEvent、Result、AppError、Pagination 等基础契约。
  2. 定义错误码分层:validation、not_found、conflict、permission、model、storage、unexpected。
  3. 定义领域事件 Envelope,包含 eventId、eventType、aggregateId、occurredAt、payloadVersion。
  4. 所有类型保持框架无关,不引用 Electron、数据库或网络库。
  5. 提供测试夹具与 FakeClock、DeterministicIdGenerator。
验收
  • 公共类型具有明确导出入口。
  • 错误可序列化到 IPC,但不泄露内部堆栈。
  • 单元测试覆盖 Result、错误映射和 FakeClock。
  • 其他包可以只依赖 contracts/domain-shared,而不产生循环依赖。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 0:工程骨架与架构护栏
- 任务编号:T01
- 任务名称:领域公共契约与错误模型
- 建议分支:feat/01-core-contracts
- 前置依赖:T00
- 并行说明:可与 T02、T03、T04、T05 并行
- 文件所有权:packages/contracts、packages/domain-shared

目标:
建立跨模块稳定使用的 ID、时间、结果、分页、错误、事件和端口基础类型。

实现要求:
1. 创建 branded ID、Clock、IdGenerator、DomainEvent、Result、AppError、Pagination 等基础契约。
2. 定义错误码分层:validation、not_found、conflict、permission、model、storage、unexpected。
3. 定义领域事件 Envelope,包含 eventId、eventType、aggregateId、occurredAt、payloadVersion。
4. 所有类型保持框架无关,不引用 Electron、数据库或网络库。
5. 提供测试夹具与 FakeClock、DeterministicIdGenerator。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 公共类型具有明确导出入口。
- [ ] 错误可序列化到 IPC,但不泄露内部堆栈。
- [ ] 单元测试覆盖 Result、错误映射和 FakeClock。
- [ ] 其他包可以只依赖 contracts/domain-shared,而不产生循环依赖。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T02

Electron 安全桌面壳

feat/02-electron-shell
依赖:T00 并行:可与 T01、T03、T04、T05 并行 文件所有权:apps/desktop/src/main、preload、renderer 基础入口与构建配置

目标:完成 Windows 优先的 Electron 安全壳、窗口生命周期和最小 Typed IPC 示例。

实现要求与验收
实现要求
  1. 使用 electron-vite 或现有构建体系创建 main、preload、renderer 三进程结构。
  2. BrowserWindow 启用 contextIsolation、sandbox,关闭 nodeIntegration 和 remote。
  3. 实现单实例锁、主窗口恢复、开发者工具仅开发环境开启。
  4. preload 只暴露 version/health 示例 API,不暴露 ipcRenderer 原对象。
  5. 增加 CSP、导航拦截、window.open 拦截和外链显式打开策略。
  6. 创建基础 React 页面,显示运行状态,不实现聊天业务。
验收
  • pnpm dev 可在 Windows 打开应用。
  • Renderer 中无法访问 require、process 和 Node 文件系统。
  • 安全配置有自动化测试或配置断言。
  • 关闭窗口和二次启动行为可预测。

用户资源:应用图标可暂缺,使用占位资源;用户之后提供 512×512 PNG 和 Windows ICO。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 0:工程骨架与架构护栏
- 任务编号:T02
- 任务名称:Electron 安全桌面壳
- 建议分支:feat/02-electron-shell
- 前置依赖:T00
- 并行说明:可与 T01、T03、T04、T05 并行
- 文件所有权:apps/desktop/src/main、preload、renderer 基础入口与构建配置

目标:
完成 Windows 优先的 Electron 安全壳、窗口生命周期和最小 Typed IPC 示例。

实现要求:
1. 使用 electron-vite 或现有构建体系创建 main、preload、renderer 三进程结构。
2. BrowserWindow 启用 contextIsolation、sandbox,关闭 nodeIntegration 和 remote。
3. 实现单实例锁、主窗口恢复、开发者工具仅开发环境开启。
4. preload 只暴露 version/health 示例 API,不暴露 ipcRenderer 原对象。
5. 增加 CSP、导航拦截、window.open 拦截和外链显式打开策略。
6. 创建基础 React 页面,显示运行状态,不实现聊天业务。

用户资源:
应用图标可暂缺,使用占位资源;用户之后提供 512×512 PNG 和 Windows ICO。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] pnpm dev 可在 Windows 打开应用。
- [ ] Renderer 中无法访问 require、process 和 Node 文件系统。
- [ ] 安全配置有自动化测试或配置断言。
- [ ] 关闭窗口和二次启动行为可预测。

验证命令:
pnpm --filter @digital-partner/desktop dev
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T03

SQLite、迁移、事务与 Outbox 基础

feat/03-storage-foundation
依赖:T00 并行:可与 T01、T02、T04、T05 并行 文件所有权:packages/infrastructure-sqlite、database/migrations;不得修改 Electron 入口

目标:建立本地数据库生命周期、迁移、事务、健康检查和同库 Outbox 基础。

实现要求与验收
实现要求
  1. 数据库路径通过 AppDataPathPort 注入,测试使用临时目录。
  2. 使用 SQLite WAL、foreign_keys、busy_timeout,并记录 schema_version。
  3. 建立 migrations、outbox_events、audit_events、app_settings 基础表。
  4. 实现事务执行器和 Repository 基类,但不要创建记忆、目标业务表。
  5. 实现迁移幂等、失败回滚、备份前置钩子和数据库健康检查。
  6. 不要让 Domain 或 Application 依赖具体 SQLite 类型。
验收
  • 新库可从 0 迁移到最新版本。
  • 重复执行迁移不会破坏数据。
  • 迁移失败时数据库保持可恢复状态。
  • Outbox 插入可与业务事务原子提交的测试通过。

用户资源:无需用户数据;测试只能使用合成数据。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 0:工程骨架与架构护栏
- 任务编号:T03
- 任务名称:SQLite、迁移、事务与 Outbox 基础
- 建议分支:feat/03-storage-foundation
- 前置依赖:T00
- 并行说明:可与 T01、T02、T04、T05 并行
- 文件所有权:packages/infrastructure-sqlite、database/migrations;不得修改 Electron 入口

目标:
建立本地数据库生命周期、迁移、事务、健康检查和同库 Outbox 基础。

实现要求:
1. 数据库路径通过 AppDataPathPort 注入,测试使用临时目录。
2. 使用 SQLite WAL、foreign_keys、busy_timeout,并记录 schema_version。
3. 建立 migrations、outbox_events、audit_events、app_settings 基础表。
4. 实现事务执行器和 Repository 基类,但不要创建记忆、目标业务表。
5. 实现迁移幂等、失败回滚、备份前置钩子和数据库健康检查。
6. 不要让 Domain 或 Application 依赖具体 SQLite 类型。

用户资源:
无需用户数据;测试只能使用合成数据。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 新库可从 0 迁移到最新版本。
- [ ] 重复执行迁移不会破坏数据。
- [ ] 迁移失败时数据库保持可恢复状态。
- [ ] Outbox 插入可与业务事务原子提交的测试通过。

验证命令:
pnpm --filter @digital-partner/infrastructure-sqlite test
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T04

模型网关与 Ollama 适配器

feat/04-model-gateway
依赖:T00 并行:可与 T01、T02、T03、T05 并行 文件所有权:packages/infrastructure-model、packages/contracts/model

目标:建立不绑定模型厂商的流式生成、结构化生成、Embedding、取消和健康检查接口。

实现要求与验收
实现要求
  1. 定义 ChatModelPort、StructuredModelPort、EmbeddingPort、ModelHealthPort。
  2. 实现 Ollama 适配器,Endpoint、模型名、超时和并发限制由配置注入。
  3. 支持流式 token、AbortSignal、超时、有限重试和统一错误映射。
  4. 结构化输出必须由 Zod 校验;修复重试次数有限且可观测。
  5. 实现 FakeModelAdapter,支持确定性测试。
  6. 云模型只保留 Port 和配置占位,不实现真实上传或默认回退。
验收
  • Ollama 不可用时返回可识别错误,不导致进程崩溃。
  • 流式生成可取消。
  • 结构化输出非法时不会进入领域层。
  • FakeModelAdapter 覆盖成功、超时、取消和格式错误。

用户资源:请提供 Ollama endpoint 和可用模型名;默认 endpoint=http://127.0.0.1:11434,聊天模型先使用本机现有模型,Embedding 默认 bge-m3。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 0:工程骨架与架构护栏
- 任务编号:T04
- 任务名称:模型网关与 Ollama 适配器
- 建议分支:feat/04-model-gateway
- 前置依赖:T00
- 并行说明:可与 T01、T02、T03、T05 并行
- 文件所有权:packages/infrastructure-model、packages/contracts/model

目标:
建立不绑定模型厂商的流式生成、结构化生成、Embedding、取消和健康检查接口。

实现要求:
1. 定义 ChatModelPort、StructuredModelPort、EmbeddingPort、ModelHealthPort。
2. 实现 Ollama 适配器,Endpoint、模型名、超时和并发限制由配置注入。
3. 支持流式 token、AbortSignal、超时、有限重试和统一错误映射。
4. 结构化输出必须由 Zod 校验;修复重试次数有限且可观测。
5. 实现 FakeModelAdapter,支持确定性测试。
6. 云模型只保留 Port 和配置占位,不实现真实上传或默认回退。

用户资源:
请提供 Ollama endpoint 和可用模型名;默认 endpoint=http://127.0.0.1:11434,聊天模型先使用本机现有模型,Embedding 默认 bge-m3。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] Ollama 不可用时返回可识别错误,不导致进程崩溃。
- [ ] 流式生成可取消。
- [ ] 结构化输出非法时不会进入领域层。
- [ ] FakeModelAdapter 覆盖成功、超时、取消和格式错误。

验证命令:
pnpm --filter @digital-partner/infrastructure-model test
pnpm lint
pnpm typecheck

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T05

测试、CI 与依赖边界检查

feat/05-quality-foundation
依赖:T00 并行:可与 T01、T02、T03、T04 并行 文件所有权:.github/workflows、测试配置、架构边界检查脚本

目标:建立后续所有分支都必须通过的质量门禁。

实现要求与验收
实现要求
  1. 配置 Vitest workspace 和 Playwright Electron 基础测试。
  2. 增加依赖边界检查,禁止 domain 导入 infrastructure/electron/react。
  3. 增加循环依赖检查、未使用导出检查和 TypeScript strict 检查。
  4. CI 至少执行 install、lint、typecheck、unit test、build。
  5. Windows runner 负责桌面 build smoke test。
  6. 提供测试命名、夹具和禁止真实网络访问规范。
验收
  • 故意制造非法依赖时检查会失败。
  • CI 不依赖本机 Ollama或真实 API。
  • 最小 Electron 启动 E2E 可在测试模式执行。
  • 所有脚本可在根目录统一运行。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 0:工程骨架与架构护栏
- 任务编号:T05
- 任务名称:测试、CI 与依赖边界检查
- 建议分支:feat/05-quality-foundation
- 前置依赖:T00
- 并行说明:可与 T01、T02、T03、T04 并行
- 文件所有权:.github/workflows、测试配置、架构边界检查脚本

目标:
建立后续所有分支都必须通过的质量门禁。

实现要求:
1. 配置 Vitest workspace 和 Playwright Electron 基础测试。
2. 增加依赖边界检查,禁止 domain 导入 infrastructure/electron/react。
3. 增加循环依赖检查、未使用导出检查和 TypeScript strict 检查。
4. CI 至少执行 install、lint、typecheck、unit test、build。
5. Windows runner 负责桌面 build smoke test。
6. 提供测试命名、夹具和禁止真实网络访问规范。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 故意制造非法依赖时检查会失败。
- [ ] CI 不依赖本机 Ollama或真实 API。
- [ ] 最小 Electron 启动 E2E 可在测试模式执行。
- [ ] 所有脚本可在根目录统一运行。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P0 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 0:工程骨架与架构护栏 的集成分支。待检查任务分支:
feat/00-project-foundation, feat/01-core-contracts, feat/02-electron-shell, feat/03-storage-foundation, feat/04-model-gateway, feat/05-quality-foundation

阶段目标:
建立可并行开发的稳定基线。该阶段结束前不要开始记忆、目标和主动性业务。

阶段退出标准:
Windows 上可启动空桌面应用;安全 IPC、SQLite、模型网关和测试基线可独立运行;所有公共契约已冻结。

集成任务:
合并 T01、T02、T03、T04、T05 到 T00 基线后,执行阶段 0 集成审查:修复包依赖、构建、Electron 原生模块、IPC 类型和 Windows 路径问题;不得实现聊天业务。输出架构依赖图、全部验证结果和进入阶段 1 的冻结接口清单。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P1

阶段 1:文本对话 MVP

完成可稳定使用的本地文本对话闭环,为记忆与目标提供可靠入口。

本阶段需要你提供

  • Ollama 模型名和 endpoint
  • 伙伴基础称呼与语气
  • 是否允许云模型,默认不允许
  • 5~10 段理想回复示例

退出标准

用户可选择本地模型、创建会话、流式对话、取消生成、重启后恢复历史;模型失败有明确降级。

T10

Conversation 领域与应用用例

feat/10-conversation-core
依赖:阶段 0 完成 并行:可与 T12 并行;T11 依赖本任务 文件所有权:packages/domain-conversation、packages/application/conversation

目标:实现会话、消息、模型运行和发送消息用例,不涉及长期记忆。

实现要求与验收
实现要求
  1. 定义 Conversation、Message、ModelRun 状态与不变量。
  2. 实现 CreateConversation、SendMessage、CancelGeneration、ListMessages、RenameConversation。
  3. 消息先持久化用户输入,再启动模型;失败不能丢失用户消息。
  4. 助手流式内容使用运行状态管理,完成后原子落库。
  5. 防止同一会话重复并发生成,支持用户取消。
  6. Repository 和 Model 均通过 Port 注入。
验收
  • 单元测试覆盖正常、失败、取消、重复发送和重启恢复。
  • 应用用例不导入 Electron 或 React。
  • 模型错误可转换为用户可理解状态。
  • 不包含记忆抽取、目标抽取或主动提醒。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 1:文本对话 MVP
- 任务编号:T10
- 任务名称:Conversation 领域与应用用例
- 建议分支:feat/10-conversation-core
- 前置依赖:阶段 0 完成
- 并行说明:可与 T12 并行;T11 依赖本任务
- 文件所有权:packages/domain-conversation、packages/application/conversation

目标:
实现会话、消息、模型运行和发送消息用例,不涉及长期记忆。

实现要求:
1. 定义 Conversation、Message、ModelRun 状态与不变量。
2. 实现 CreateConversation、SendMessage、CancelGeneration、ListMessages、RenameConversation。
3. 消息先持久化用户输入,再启动模型;失败不能丢失用户消息。
4. 助手流式内容使用运行状态管理,完成后原子落库。
5. 防止同一会话重复并发生成,支持用户取消。
6. Repository 和 Model 均通过 Port 注入。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 单元测试覆盖正常、失败、取消、重复发送和重启恢复。
- [ ] 应用用例不导入 Electron 或 React。
- [ ] 模型错误可转换为用户可理解状态。
- [ ] 不包含记忆抽取、目标抽取或主动提醒。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T11

流式 Typed IPC 与主进程编排

feat/11-conversation-ipc
依赖:T10、T02、T03、T04 并行:与 T13 可并行 文件所有权:apps/desktop/src/main/ipc、preload conversation API

目标:将 Conversation 用例安全接入 Electron,处理流式事件、取消和窗口销毁。

实现要求与验收
实现要求
  1. 定义 request/response/event Schema 与 channel 常量,禁止字符串散落。
  2. 实现 sendMessage 流式事件:started、delta、completed、failed、cancelled。
  3. Renderer 传入的数据全部 Zod 校验。
  4. 窗口销毁时取消所属流;同一 runId 不重复完成。
  5. IPC 错误只返回公开错误信息和 traceId。
  6. 增加 IPC 集成测试。
验收
  • 快速关闭窗口不产生未处理 Promise。
  • 取消后不再写入后续 delta。
  • IPC 不暴露原生对象或数据库路径。
  • 测试覆盖非法参数和重复事件。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 1:文本对话 MVP
- 任务编号:T11
- 任务名称:流式 Typed IPC 与主进程编排
- 建议分支:feat/11-conversation-ipc
- 前置依赖:T10、T02、T03、T04
- 并行说明:与 T13 可并行
- 文件所有权:apps/desktop/src/main/ipc、preload conversation API

目标:
将 Conversation 用例安全接入 Electron,处理流式事件、取消和窗口销毁。

实现要求:
1. 定义 request/response/event Schema 与 channel 常量,禁止字符串散落。
2. 实现 sendMessage 流式事件:started、delta、completed、failed、cancelled。
3. Renderer 传入的数据全部 Zod 校验。
4. 窗口销毁时取消所属流;同一 runId 不重复完成。
5. IPC 错误只返回公开错误信息和 traceId。
6. 增加 IPC 集成测试。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 快速关闭窗口不产生未处理 Promise。
- [ ] 取消后不再写入后续 delta。
- [ ] IPC 不暴露原生对象或数据库路径。
- [ ] 测试覆盖非法参数和重复事件。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T12

聊天 UI 与模型设置 UI

feat/12-chat-ui
依赖:T02;可使用 mock API 并行:可与 T10 并行 文件所有权:apps/desktop/src/renderer/features/chat、settings

目标:实现简洁、可用、移动到桌面也不拥挤的聊天界面和模型设置。

实现要求与验收
实现要求
  1. 会话列表、消息区、输入框、停止生成、重试、空状态和错误提示。
  2. 流式内容平滑更新,避免每 token 导致全树重渲染。
  3. 设置页可配置 Ollama endpoint、聊天模型、Embedding 模型并执行健康检查。
  4. 敏感配置不放 LocalStorage;Renderer 只显示脱敏状态。
  5. 支持键盘发送、换行、焦点恢复和基础无障碍。
  6. 使用 mock preload 编写组件测试。
验收
  • 长消息、代码块、错误、取消和空历史布局正常。
  • 模型不可用时有明确修复入口。
  • UI 不直接调用 fetch、SQLite 或 Node API。
  • 组件测试不依赖 Electron 真进程。

用户资源:请提供产品基础色、Logo 和伙伴称呼;缺失时使用中性 Indigo 主题、文字 Logo 和“伙伴”占位称呼。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 1:文本对话 MVP
- 任务编号:T12
- 任务名称:聊天 UI 与模型设置 UI
- 建议分支:feat/12-chat-ui
- 前置依赖:T02;可使用 mock API
- 并行说明:可与 T10 并行
- 文件所有权:apps/desktop/src/renderer/features/chat、settings

目标:
实现简洁、可用、移动到桌面也不拥挤的聊天界面和模型设置。

实现要求:
1. 会话列表、消息区、输入框、停止生成、重试、空状态和错误提示。
2. 流式内容平滑更新,避免每 token 导致全树重渲染。
3. 设置页可配置 Ollama endpoint、聊天模型、Embedding 模型并执行健康检查。
4. 敏感配置不放 LocalStorage;Renderer 只显示脱敏状态。
5. 支持键盘发送、换行、焦点恢复和基础无障碍。
6. 使用 mock preload 编写组件测试。

用户资源:
请提供产品基础色、Logo 和伙伴称呼;缺失时使用中性 Indigo 主题、文字 Logo 和“伙伴”占位称呼。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 长消息、代码块、错误、取消和空历史布局正常。
- [ ] 模型不可用时有明确修复入口。
- [ ] UI 不直接调用 fetch、SQLite 或 Node API。
- [ ] 组件测试不依赖 Electron 真进程。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T13

Prompt Registry 与基础上下文组装

feat/13-prompt-registry
依赖:T10、T04 并行:可与 T11、T12 并行 文件所有权:packages/prompt-registry、packages/application/context

目标:集中管理基础系统指令、版本和 Token 预算,防止 Prompt 散落在 UI 或模型适配器。

实现要求与验收
实现要求
  1. 定义 PromptTemplate、PromptVersion、ContextSection、ContextBudget。
  2. 系统指令拆分为安全规则、伙伴基础风格、当前会话和用户输入。
  3. 实现字符/Token 估算接口;超预算时只裁剪旧消息。
  4. 每次 ModelRun 保存 promptVersion 和使用的上下文章节 ID,不保存密钥。
  5. Prompt 内容放独立文件并带测试快照。
  6. 为后续记忆、目标、关系预留明确 Section Slot。
验收
  • 同一输入可确定性组装上下文。
  • 安全规则和当前输入不会被预算裁剪。
  • Prompt 更新可通过版本追踪回归。
  • 不在本阶段模拟长期记忆。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 1:文本对话 MVP
- 任务编号:T13
- 任务名称:Prompt Registry 与基础上下文组装
- 建议分支:feat/13-prompt-registry
- 前置依赖:T10、T04
- 并行说明:可与 T11、T12 并行
- 文件所有权:packages/prompt-registry、packages/application/context

目标:
集中管理基础系统指令、版本和 Token 预算,防止 Prompt 散落在 UI 或模型适配器。

实现要求:
1. 定义 PromptTemplate、PromptVersion、ContextSection、ContextBudget。
2. 系统指令拆分为安全规则、伙伴基础风格、当前会话和用户输入。
3. 实现字符/Token 估算接口;超预算时只裁剪旧消息。
4. 每次 ModelRun 保存 promptVersion 和使用的上下文章节 ID,不保存密钥。
5. Prompt 内容放独立文件并带测试快照。
6. 为后续记忆、目标、关系预留明确 Section Slot。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 同一输入可确定性组装上下文。
- [ ] 安全规则和当前输入不会被预算裁剪。
- [ ] Prompt 更新可通过版本追踪回归。
- [ ] 不在本阶段模拟长期记忆。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P1 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 1:文本对话 MVP 的集成分支。待检查任务分支:
feat/10-conversation-core, feat/11-conversation-ipc, feat/12-chat-ui, feat/13-prompt-registry

阶段目标:
完成可稳定使用的本地文本对话闭环,为记忆与目标提供可靠入口。

阶段退出标准:
用户可选择本地模型、创建会话、流式对话、取消生成、重启后恢复历史;模型失败有明确降级。

集成任务:
合并 T10、T11、T12、T13 后,完成文本对话端到端集成。使用 FakeModel 跑自动化测试,再使用用户提供的 Ollama 模型做手工 smoke test。重点检查:取消、模型离线、重启恢复、流式乱序、长对话预算、IPC 安全和数据库一致性。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P2

阶段 2:可信长期记忆

实现候选、证据、确认、冲突、召回和删除完整闭环。该阶段是数字伙伴的核心。

本阶段需要你提供

  • 20~50 条“应该记住/不应该记住”样例
  • 敏感信息边界
  • 偏好变化和事实冲突样例
  • 是否允许自动晋升一般偏好

退出标准

正式记忆均可追溯;错误推断不会静默写入;混合召回可解释;删除后所有索引无法再召回。

T20

Memory 领域模型与持久化

feat/20-memory-domain
依赖:阶段 1 完成 并行:不可与依赖 Memory Schema 的任务并行提交;先完成 文件所有权:packages/domain-memory、application/memory、SQLite memory migrations

目标:实现候选与正式记忆的生命周期、证据、时间有效性、冲突和版本。

实现要求与验收
实现要求
  1. 定义 MemoryItem、MemoryEvidence、MemoryRelation、MemoryStatus、Sensitivity。
  2. 状态支持 proposed、pending_review、confirmed、rejected、superseded、expired、deleted。
  3. 正式事实必须包含 evidence;支持 validFrom、validTo、supersededBy。
  4. 实现 propose、confirm、reject、correct、supersede、expire、delete 命令。
  5. 修正事实不能覆盖历史;必须创建新版本并关闭旧有效期。
  6. 创建 SQLite 表、索引、Repository 与事务测试。
验收
  • 非法状态转换被拒绝。
  • Confirmed 记忆无证据时不能保存。
  • 修正后可查询当前事实和历史事实。
  • 删除事件会进入 Outbox,供索引清理消费。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 2:可信长期记忆
- 任务编号:T20
- 任务名称:Memory 领域模型与持久化
- 建议分支:feat/20-memory-domain
- 前置依赖:阶段 1 完成
- 并行说明:不可与依赖 Memory Schema 的任务并行提交;先完成
- 文件所有权:packages/domain-memory、application/memory、SQLite memory migrations

目标:
实现候选与正式记忆的生命周期、证据、时间有效性、冲突和版本。

实现要求:
1. 定义 MemoryItem、MemoryEvidence、MemoryRelation、MemoryStatus、Sensitivity。
2. 状态支持 proposed、pending_review、confirmed、rejected、superseded、expired、deleted。
3. 正式事实必须包含 evidence;支持 validFrom、validTo、supersededBy。
4. 实现 propose、confirm、reject、correct、supersede、expire、delete 命令。
5. 修正事实不能覆盖历史;必须创建新版本并关闭旧有效期。
6. 创建 SQLite 表、索引、Repository 与事务测试。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 非法状态转换被拒绝。
- [ ] Confirmed 记忆无证据时不能保存。
- [ ] 修正后可查询当前事实和历史事实。
- [ ] 删除事件会进入 Outbox,供索引清理消费。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T21

记忆候选抽取与晋升策略

feat/21-memory-extraction
依赖:T20、T13 并行:可与 T22、T23、T24 并行 文件所有权:application/memory/extraction、prompt-registry/memory

目标:从消息和领域事件中生成结构化候选,但不直接写正式记忆。

实现要求与验收
实现要求
  1. 定义 MemoryProposal Schema:类型、内容、主体、时间、置信度、敏感级别、证据引用、理由。
  2. 模型抽取后执行确定性过滤:助手推测、玩笑、临时情绪、无证据内容不得自动确认。
  3. 用户明确说“记住”时可走确定性确认路径。
  4. 一般偏好进入候选池;重复独立证据达到策略阈值后才可建议晋升。
  5. 敏感和身份类事实默认 pending_review。
  6. 抽取失败进入重试队列,不影响主对话。
验收
  • 测试覆盖明确记住、否定、反讽、偏好变化、助手自说自话和敏感事实。
  • 任何模型输出都先经过 Zod 和规则层。
  • 同一证据不会重复创建候选。
  • 策略参数可配置并有安全默认值。

用户资源:请提供记忆正反例 JSONL;若暂缺,Codex 先创建不少于 40 条合成中文样例,不使用真实隐私数据。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 2:可信长期记忆
- 任务编号:T21
- 任务名称:记忆候选抽取与晋升策略
- 建议分支:feat/21-memory-extraction
- 前置依赖:T20、T13
- 并行说明:可与 T22、T23、T24 并行
- 文件所有权:application/memory/extraction、prompt-registry/memory

目标:
从消息和领域事件中生成结构化候选,但不直接写正式记忆。

实现要求:
1. 定义 MemoryProposal Schema:类型、内容、主体、时间、置信度、敏感级别、证据引用、理由。
2. 模型抽取后执行确定性过滤:助手推测、玩笑、临时情绪、无证据内容不得自动确认。
3. 用户明确说“记住”时可走确定性确认路径。
4. 一般偏好进入候选池;重复独立证据达到策略阈值后才可建议晋升。
5. 敏感和身份类事实默认 pending_review。
6. 抽取失败进入重试队列,不影响主对话。

用户资源:
请提供记忆正反例 JSONL;若暂缺,Codex 先创建不少于 40 条合成中文样例,不使用真实隐私数据。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 测试覆盖明确记住、否定、反讽、偏好变化、助手自说自话和敏感事实。
- [ ] 任何模型输出都先经过 Zod 和规则层。
- [ ] 同一证据不会重复创建候选。
- [ ] 策略参数可配置并有安全默认值。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T22

FTS + 向量混合召回与上下文打包

feat/22-memory-retrieval
依赖:T20、T13、T04 并行:可与 T21、T23、T24 并行 文件所有权:application/memory/retrieval、infrastructure memory index

目标:实现可替换的混合召回、统一评分、去重、冲突过滤和 Token Budget Pack。

实现要求与验收
实现要求
  1. 定义 MemoryIndexPort、KeywordSearchPort、VectorSearchPort、MemoryRerankPort。
  2. 默认实现 SQLite FTS5;向量通过独立适配器实现,禁止业务代码绑定具体扩展。
  3. 召回结合 semantic、keyword、goalAffinity、recency、importance、accessFrequency 和惩罚项。
  4. 只返回当前有效、未删除且权限允许的记忆。
  5. 同一事实的旧版本和冲突版本不得同时作为当前事实注入。
  6. Context Pack 必须带 memoryId、evidenceId、时间和用户确认状态。
验收
  • 无 Embedding 时可退化为 FTS,不阻塞对话。
  • 删除或被替代记忆不会被召回。
  • 评分与裁剪是确定性的,可回放。
  • 提供至少 30 个召回评测用例和指标输出。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 2:可信长期记忆
- 任务编号:T22
- 任务名称:FTS + 向量混合召回与上下文打包
- 建议分支:feat/22-memory-retrieval
- 前置依赖:T20、T13、T04
- 并行说明:可与 T21、T23、T24 并行
- 文件所有权:application/memory/retrieval、infrastructure memory index

目标:
实现可替换的混合召回、统一评分、去重、冲突过滤和 Token Budget Pack。

实现要求:
1. 定义 MemoryIndexPort、KeywordSearchPort、VectorSearchPort、MemoryRerankPort。
2. 默认实现 SQLite FTS5;向量通过独立适配器实现,禁止业务代码绑定具体扩展。
3. 召回结合 semantic、keyword、goalAffinity、recency、importance、accessFrequency 和惩罚项。
4. 只返回当前有效、未删除且权限允许的记忆。
5. 同一事实的旧版本和冲突版本不得同时作为当前事实注入。
6. Context Pack 必须带 memoryId、evidenceId、时间和用户确认状态。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 无 Embedding 时可退化为 FTS,不阻塞对话。
- [ ] 删除或被替代记忆不会被召回。
- [ ] 评分与裁剪是确定性的,可回放。
- [ ] 提供至少 30 个召回评测用例和指标输出。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T23

记忆治理 UI

feat/23-memory-review-ui
依赖:T20;使用 mock API 并行:可与 T21、T22、T24 并行 文件所有权:renderer/features/memory、preload memory contracts

目标:实现用户可理解的待确认、已确认、冲突、过期和删除界面。

实现要求与验收
实现要求
  1. 列表按状态、类型、敏感级别和时间筛选。
  2. 详情展示事实、证据片段、来源时间、置信度和变化历史。
  3. 支持确认、拒绝、修正、锁定、设置过期和删除。
  4. 冲突界面并排展示新旧事实,不默认替用户选择。
  5. 删除前说明影响范围,完成后显示索引清理状态。
  6. 所有操作走 Typed IPC 和 Application Use Case。
验收
  • 用户能回答“为什么记住”和“从哪里得知”。
  • 敏感事实有清晰标识。
  • 无法从 UI 绕过非法状态转换。
  • 长证据和多版本历史布局正常。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 2:可信长期记忆
- 任务编号:T23
- 任务名称:记忆治理 UI
- 建议分支:feat/23-memory-review-ui
- 前置依赖:T20;使用 mock API
- 并行说明:可与 T21、T22、T24 并行
- 文件所有权:renderer/features/memory、preload memory contracts

目标:
实现用户可理解的待确认、已确认、冲突、过期和删除界面。

实现要求:
1. 列表按状态、类型、敏感级别和时间筛选。
2. 详情展示事实、证据片段、来源时间、置信度和变化历史。
3. 支持确认、拒绝、修正、锁定、设置过期和删除。
4. 冲突界面并排展示新旧事实,不默认替用户选择。
5. 删除前说明影响范围,完成后显示索引清理状态。
6. 所有操作走 Typed IPC 和 Application Use Case。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 用户能回答“为什么记住”和“从哪里得知”。
- [ ] 敏感事实有清晰标识。
- [ ] 无法从 UI 绕过非法状态转换。
- [ ] 长证据和多版本历史布局正常。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T24

记忆评测、删除完整性与回放工具

feat/24-memory-evaluation
依赖:T20 并行:可与 T21、T22、T23 并行 文件所有权:packages/test-fixtures/memory、tools/evaluation

目标:建立长期可复用的离线记忆质量评测,而不是只靠手工体验。

实现要求与验收
实现要求
  1. 定义 JSONL 评测格式:对话轨迹、期望候选、禁止记忆、查询、期望召回。
  2. 实现抽取 precision/recall、错误正式记忆率、Recall@K、MRR、删除完整率。
  3. 实现 7 天、30 天、90 天合成轨迹生成器。
  4. 删除测试同时检查结构化表、FTS、向量索引、摘要缓存和引用。
  5. 输出机器可读 JSON 和可读 Markdown 报告。
  6. CI 使用 FakeModel 运行稳定基线,真实模型评测手工触发。
验收
  • 指标公式有测试。
  • 同一评测集可重复运行并比较版本。
  • 故意注入已删除向量时删除完整率测试会失败。
  • 报告能定位具体失败 case。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 2:可信长期记忆
- 任务编号:T24
- 任务名称:记忆评测、删除完整性与回放工具
- 建议分支:feat/24-memory-evaluation
- 前置依赖:T20
- 并行说明:可与 T21、T22、T23 并行
- 文件所有权:packages/test-fixtures/memory、tools/evaluation

目标:
建立长期可复用的离线记忆质量评测,而不是只靠手工体验。

实现要求:
1. 定义 JSONL 评测格式:对话轨迹、期望候选、禁止记忆、查询、期望召回。
2. 实现抽取 precision/recall、错误正式记忆率、Recall@K、MRR、删除完整率。
3. 实现 7 天、30 天、90 天合成轨迹生成器。
4. 删除测试同时检查结构化表、FTS、向量索引、摘要缓存和引用。
5. 输出机器可读 JSON 和可读 Markdown 报告。
6. CI 使用 FakeModel 运行稳定基线,真实模型评测手工触发。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 指标公式有测试。
- [ ] 同一评测集可重复运行并比较版本。
- [ ] 故意注入已删除向量时删除完整率测试会失败。
- [ ] 报告能定位具体失败 case。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P2 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 2:可信长期记忆 的集成分支。待检查任务分支:
feat/20-memory-domain, feat/21-memory-extraction, feat/22-memory-retrieval, feat/23-memory-review-ui, feat/24-memory-evaluation

阶段目标:
实现候选、证据、确认、冲突、召回和删除完整闭环。该阶段是数字伙伴的核心。

阶段退出标准:
正式记忆均可追溯;错误推断不会静默写入;混合召回可解释;删除后所有索引无法再召回。

集成任务:
在阶段 2 集成分支上运行记忆端到端回放:用户说出偏好、明确要求记住、后来改变偏好、产生敏感推断、删除某记忆,再进行相关提问。确认候选与正式记忆分离、证据可见、最新有效事实优先、历史可追溯、删除后无法召回。未达到评测基线不得进入阶段 3。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P3

阶段 3:目标、任务与承诺

让伙伴掌握项目状态和下一步,不再只依赖聊天文本猜测。

本阶段需要你提供

  • 3~5 个真实但可脱敏的项目流程
  • 任务状态与优先级偏好
  • 承诺提醒规则
  • 每日简报希望包含的栏目

退出标准

目标和任务具有明确状态机;用户与伙伴的承诺可追踪;当前目标状态可结构化注入对话。

T30

Goal 聚合与状态机

feat/30-goal-domain
依赖:阶段 2 完成 并行:先完成;其他目标任务依赖它 文件所有权:domain-goal、application/goal、SQLite goal migrations

目标:实现 Goal、Milestone、Task、Blocker、Commitment 聚合和一致性规则。

实现要求与验收
实现要求
  1. Goal 状态:draft、active、blocked、paused、completed、cancelled。
  2. Task 包含优先级、截止时间、状态、依赖和完成证据。
  3. Goal 变更必须重算进度和 nextAction。
  4. Commitment 区分 actor=user/companion,包含 promise、dueAt、status、sourceId。
  5. 模型不能直接标记完成;完成命令必须来自用户或受信工具结果。
  6. 所有状态变化写审计和领域事件。
验收
  • 非法状态迁移和循环依赖被拒绝。
  • 任务变化与目标进度在同一事务中一致。
  • 暂停/取消目标后不会生成到期承诺。
  • 历史状态可追溯。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 3:目标、任务与承诺
- 任务编号:T30
- 任务名称:Goal 聚合与状态机
- 建议分支:feat/30-goal-domain
- 前置依赖:阶段 2 完成
- 并行说明:先完成;其他目标任务依赖它
- 文件所有权:domain-goal、application/goal、SQLite goal migrations

目标:
实现 Goal、Milestone、Task、Blocker、Commitment 聚合和一致性规则。

实现要求:
1. Goal 状态:draft、active、blocked、paused、completed、cancelled。
2. Task 包含优先级、截止时间、状态、依赖和完成证据。
3. Goal 变更必须重算进度和 nextAction。
4. Commitment 区分 actor=user/companion,包含 promise、dueAt、status、sourceId。
5. 模型不能直接标记完成;完成命令必须来自用户或受信工具结果。
6. 所有状态变化写审计和领域事件。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 非法状态迁移和循环依赖被拒绝。
- [ ] 任务变化与目标进度在同一事务中一致。
- [ ] 暂停/取消目标后不会生成到期承诺。
- [ ] 历史状态可追溯。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T31

目标应用用例与 Typed IPC

feat/31-goal-application
依赖:T30、T02 并行:可与 T32、T33、T34 并行 文件所有权:application/goal use cases、main/preload goal IPC

目标:暴露创建草案、接受、更新状态、完成任务和查看时间线的安全接口。

实现要求与验收
实现要求
  1. 用例包括 CreateGoalDraft、ActivateGoal、UpdateTask、CompleteTask、BlockGoal、PauseGoal、ListGoals。
  2. 区分 draft 与 active;模型生成的拆解只能保存为 draft。
  3. IPC 参数 Zod 校验,错误映射与 Conversation 一致。
  4. 支持乐观并发 version,避免两个窗口覆盖状态。
  5. 批量更新必须事务化。
  6. 增加应用和 IPC 集成测试。
验收
  • 过期 version 返回 conflict。
  • 未经用户接受的草案不进入主动提醒。
  • 所有变更有 actor 和 source。
  • Renderer 无法直接修改数据库。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 3:目标、任务与承诺
- 任务编号:T31
- 任务名称:目标应用用例与 Typed IPC
- 建议分支:feat/31-goal-application
- 前置依赖:T30、T02
- 并行说明:可与 T32、T33、T34 并行
- 文件所有权:application/goal use cases、main/preload goal IPC

目标:
暴露创建草案、接受、更新状态、完成任务和查看时间线的安全接口。

实现要求:
1. 用例包括 CreateGoalDraft、ActivateGoal、UpdateTask、CompleteTask、BlockGoal、PauseGoal、ListGoals。
2. 区分 draft 与 active;模型生成的拆解只能保存为 draft。
3. IPC 参数 Zod 校验,错误映射与 Conversation 一致。
4. 支持乐观并发 version,避免两个窗口覆盖状态。
5. 批量更新必须事务化。
6. 增加应用和 IPC 集成测试。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 过期 version 返回 conflict。
- [ ] 未经用户接受的草案不进入主动提醒。
- [ ] 所有变更有 actor 和 source。
- [ ] Renderer 无法直接修改数据库。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T32

目标与任务 UI

feat/32-goal-ui
依赖:T30;可使用 mock API 并行:可与 T31、T33、T34 并行 文件所有权:renderer/features/goals

目标:实现目标总览、详情、下一步、阻塞、任务和承诺的操作界面。

实现要求与验收
实现要求
  1. 首页突出 active goal、nextAction 和 blocker,不做复杂项目管理器。
  2. 支持目标草案审核、任务完成、暂停、阻塞说明和历史时间线。
  3. 承诺区明确显示“你答应的”和“伙伴答应的”。
  4. 所有模型生成内容标识为建议,用户接受后才生效。
  5. 提供空状态和从对话创建目标入口。
  6. 组件测试覆盖冲突和版本过期。
验收
  • 用户三步内能找到当前下一步。
  • 草案与正式目标视觉上明确区分。
  • 暂停后界面明确提示不会主动提醒。
  • 不加入看板、甘特图或多人协作。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 3:目标、任务与承诺
- 任务编号:T32
- 任务名称:目标与任务 UI
- 建议分支:feat/32-goal-ui
- 前置依赖:T30;可使用 mock API
- 并行说明:可与 T31、T33、T34 并行
- 文件所有权:renderer/features/goals

目标:
实现目标总览、详情、下一步、阻塞、任务和承诺的操作界面。

实现要求:
1. 首页突出 active goal、nextAction 和 blocker,不做复杂项目管理器。
2. 支持目标草案审核、任务完成、暂停、阻塞说明和历史时间线。
3. 承诺区明确显示“你答应的”和“伙伴答应的”。
4. 所有模型生成内容标识为建议,用户接受后才生效。
5. 提供空状态和从对话创建目标入口。
6. 组件测试覆盖冲突和版本过期。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 用户三步内能找到当前下一步。
- [ ] 草案与正式目标视觉上明确区分。
- [ ] 暂停后界面明确提示不会主动提醒。
- [ ] 不加入看板、甘特图或多人协作。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T33

目标/承诺候选抽取与对话注入

feat/33-goal-context
依赖:T30、T13、T21 并行:可与 T31、T32、T34 并行 文件所有权:application/goal/extraction、context goal section

目标:从对话中识别目标草案、任务建议和承诺候选,并把正式状态注入上下文。

实现要求与验收
实现要求
  1. 模型只能输出 GoalDraftProposal 或 CommitmentProposal。
  2. “我明天试试”与明确承诺要区分置信度,模糊表达默认询问或仅建议。
  3. 目标上下文只注入 active goal、nextAction、blocker 和到期承诺。
  4. 用户询问历史时再检索已完成或取消目标。
  5. 避免将助手建议误认为用户承诺。
  6. 测试中文口语、否定、推迟和条件承诺。
验收
  • 正式目标事实优先于语义记忆。
  • 未接受草案不影响对话中的当前状态。
  • 来源消息可追溯。
  • 不会因模型重复抽取创建重复承诺。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 3:目标、任务与承诺
- 任务编号:T33
- 任务名称:目标/承诺候选抽取与对话注入
- 建议分支:feat/33-goal-context
- 前置依赖:T30、T13、T21
- 并行说明:可与 T31、T32、T34 并行
- 文件所有权:application/goal/extraction、context goal section

目标:
从对话中识别目标草案、任务建议和承诺候选,并把正式状态注入上下文。

实现要求:
1. 模型只能输出 GoalDraftProposal 或 CommitmentProposal。
2. “我明天试试”与明确承诺要区分置信度,模糊表达默认询问或仅建议。
3. 目标上下文只注入 active goal、nextAction、blocker 和到期承诺。
4. 用户询问历史时再检索已完成或取消目标。
5. 避免将助手建议误认为用户承诺。
6. 测试中文口语、否定、推迟和条件承诺。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 正式目标事实优先于语义记忆。
- [ ] 未接受草案不影响对话中的当前状态。
- [ ] 来源消息可追溯。
- [ ] 不会因模型重复抽取创建重复承诺。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T34

每日简报生成器

feat/34-daily-brief
依赖:T30、T22 并行:可与 T31、T32、T33 并行 文件所有权:application/brief、prompt-registry/brief

目标:生成结构化每日简报草稿,为后续主动性阶段提供内容但暂不自动通知。

实现要求与验收
实现要求
  1. 简报输入仅来自正式目标、任务、承诺、已确认记忆和明确事件。
  2. 固定栏目:今天关注、临近截止、阻塞、等待确认的记忆、建议下一步。
  3. 先生成结构化 BriefModel,再由模型润色文案。
  4. 模型失败时使用模板输出。
  5. 保存简报版本和来源实体 ID。
  6. 同一天重复生成应幂等或明确版本。
验收
  • 简报中的每个事实能跳转来源。
  • 不包含未确认敏感推断。
  • 没有目标时不会编造工作。
  • 模板降级可用。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 3:目标、任务与承诺
- 任务编号:T34
- 任务名称:每日简报生成器
- 建议分支:feat/34-daily-brief
- 前置依赖:T30、T22
- 并行说明:可与 T31、T32、T33 并行
- 文件所有权:application/brief、prompt-registry/brief

目标:
生成结构化每日简报草稿,为后续主动性阶段提供内容但暂不自动通知。

实现要求:
1. 简报输入仅来自正式目标、任务、承诺、已确认记忆和明确事件。
2. 固定栏目:今天关注、临近截止、阻塞、等待确认的记忆、建议下一步。
3. 先生成结构化 BriefModel,再由模型润色文案。
4. 模型失败时使用模板输出。
5. 保存简报版本和来源实体 ID。
6. 同一天重复生成应幂等或明确版本。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 简报中的每个事实能跳转来源。
- [ ] 不包含未确认敏感推断。
- [ ] 没有目标时不会编造工作。
- [ ] 模板降级可用。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P3 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 3:目标、任务与承诺 的集成分支。待检查任务分支:
feat/30-goal-domain, feat/31-goal-application, feat/32-goal-ui, feat/33-goal-context, feat/34-daily-brief

阶段目标:
让伙伴掌握项目状态和下一步,不再只依赖聊天文本猜测。

阶段退出标准:
目标和任务具有明确状态机;用户与伙伴的承诺可追踪;当前目标状态可结构化注入对话。

集成任务:
阶段 3 集成时,用一个完整项目轨迹测试:从对话提出目标草案、用户接受、拆任务、标记阻塞、修改下一步、作出承诺、暂停和恢复。验证状态机、并发版本、上下文注入、每日简报和审计。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P4

阶段 4:受控主动性

由规则和领域状态产生少量高价值提醒,模型只负责表达,不运行自由 Agent 循环。

本阶段需要你提供

  • 勿扰时段,默认 23:00~08:00
  • 每日主动提醒上限,默认 3 条
  • 重要提醒类型
  • 提醒语气与是否合并为简报

退出标准

主动候选有解释、评分和策略记录;勿扰、冷却、配额、反馈生效;通知不会重复轰炸。

T40

主动候选与策略引擎

feat/40-proactivity-engine
依赖:阶段 3 完成 并行:先完成核心模型;T41~T43 依赖 文件所有权:domain-proactivity、application/proactivity

目标:实现确定性的触发、评分、过滤、冷却、过期和反馈状态。

实现要求与验收
实现要求
  1. 候选来源:到期任务、阻塞、承诺、长期无进展、每日/每周回顾。
  2. 实现 importance、urgency、relevance、confidence、interruptionCost、repetitionPenalty 评分。
  3. 策略包含 quietHours、dailyQuota、typeCooldown、similarityDedup、minimumConfidence。
  4. 候选保存 reasonCode、sourceEntityIds、scoreBreakdown 和 policyResult。
  5. 模型不得创建任意新触发器;只可润色通过策略的候选。
  6. 所有时间使用 Clock Port,测试不依赖真实时间。
验收
  • 相同来源不会重复创建有效候选。
  • 勿扰和每日配额测试确定性通过。
  • 暂停目标不会产生相关候选。
  • 每个被过滤候选能解释原因。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 4:受控主动性
- 任务编号:T40
- 任务名称:主动候选与策略引擎
- 建议分支:feat/40-proactivity-engine
- 前置依赖:阶段 3 完成
- 并行说明:先完成核心模型;T41~T43 依赖
- 文件所有权:domain-proactivity、application/proactivity

目标:
实现确定性的触发、评分、过滤、冷却、过期和反馈状态。

实现要求:
1. 候选来源:到期任务、阻塞、承诺、长期无进展、每日/每周回顾。
2. 实现 importance、urgency、relevance、confidence、interruptionCost、repetitionPenalty 评分。
3. 策略包含 quietHours、dailyQuota、typeCooldown、similarityDedup、minimumConfidence。
4. 候选保存 reasonCode、sourceEntityIds、scoreBreakdown 和 policyResult。
5. 模型不得创建任意新触发器;只可润色通过策略的候选。
6. 所有时间使用 Clock Port,测试不依赖真实时间。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 相同来源不会重复创建有效候选。
- [ ] 勿扰和每日配额测试确定性通过。
- [ ] 暂停目标不会产生相关候选。
- [ ] 每个被过滤候选能解释原因。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T41

调度器、Outbox 消费与桌面通知

feat/41-scheduler-notification
依赖:T40、T03、T02 并行:可与 T42、T43 并行 文件所有权:main/scheduler、infrastructure-notification、outbox worker

目标:可靠调度主动候选并发送 Windows 桌面通知,保证重启恢复和幂等。

实现要求与验收
实现要求
  1. 使用单进程调度器和数据库租约,避免重复消费。
  2. 应用启动后补偿漏过但仍有效的任务;过期候选不补发。
  3. 通知发送记录 deliveredAt 和平台结果。
  4. 点击通知导航到对应目标、承诺或简报。
  5. 通知失败有限重试,使用 idempotencyKey。
  6. 勿扰策略在发送前再次检查。
验收
  • 应用重启不会重复发送同一通知。
  • 系统时间变化和休眠恢复有测试。
  • 通知权限拒绝时回退到应用内收件箱。
  • 调度器崩溃不损坏业务事务。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 4:受控主动性
- 任务编号:T41
- 任务名称:调度器、Outbox 消费与桌面通知
- 建议分支:feat/41-scheduler-notification
- 前置依赖:T40、T03、T02
- 并行说明:可与 T42、T43 并行
- 文件所有权:main/scheduler、infrastructure-notification、outbox worker

目标:
可靠调度主动候选并发送 Windows 桌面通知,保证重启恢复和幂等。

实现要求:
1. 使用单进程调度器和数据库租约,避免重复消费。
2. 应用启动后补偿漏过但仍有效的任务;过期候选不补发。
3. 通知发送记录 deliveredAt 和平台结果。
4. 点击通知导航到对应目标、承诺或简报。
5. 通知失败有限重试,使用 idempotencyKey。
6. 勿扰策略在发送前再次检查。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 应用重启不会重复发送同一通知。
- [ ] 系统时间变化和休眠恢复有测试。
- [ ] 通知权限拒绝时回退到应用内收件箱。
- [ ] 调度器崩溃不损坏业务事务。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T42

主动性设置、收件箱与反馈 UI

feat/42-proactivity-ui
依赖:T40;使用 mock API 并行:可与 T41、T43 并行 文件所有权:renderer/features/proactivity、settings

目标:让用户控制主动程度并理解每条提醒为何出现。

实现要求与验收
实现要求
  1. 设置勿扰、每日上限、提醒类型、合并简报和一键暂停主动性。
  2. 主动收件箱展示原因、来源、评分摘要和状态。
  3. 反馈操作:有用、稍后、无需再提醒、此类降频。
  4. 稍后必须创建明确的新时间,而不是无限延后。
  5. 设置变化写审计,立即影响后续策略。
  6. 不使用拟人化压迫文案或制造负罪感。
验收
  • 用户能关闭单类提醒或全部主动性。
  • 每条提醒可追溯源目标/任务。
  • 反馈不会直接让模型修改策略代码。
  • 无桌面通知权限时 UI 仍完整可用。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 4:受控主动性
- 任务编号:T42
- 任务名称:主动性设置、收件箱与反馈 UI
- 建议分支:feat/42-proactivity-ui
- 前置依赖:T40;使用 mock API
- 并行说明:可与 T41、T43 并行
- 文件所有权:renderer/features/proactivity、settings

目标:
让用户控制主动程度并理解每条提醒为何出现。

实现要求:
1. 设置勿扰、每日上限、提醒类型、合并简报和一键暂停主动性。
2. 主动收件箱展示原因、来源、评分摘要和状态。
3. 反馈操作:有用、稍后、无需再提醒、此类降频。
4. 稍后必须创建明确的新时间,而不是无限延后。
5. 设置变化写审计,立即影响后续策略。
6. 不使用拟人化压迫文案或制造负罪感。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 用户能关闭单类提醒或全部主动性。
- [ ] 每条提醒可追溯源目标/任务。
- [ ] 反馈不会直接让模型修改策略代码。
- [ ] 无桌面通知权限时 UI 仍完整可用。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T43

主动性回放与质量评测

feat/43-proactivity-evaluation
依赖:T40 并行:可与 T41、T42 并行 文件所有权:tools/evaluation/proactivity、test fixtures

目标:用合成时间线评估漏报、误报、重复、勿扰和配额行为。

实现要求与验收
实现要求
  1. 定义时间线输入:目标状态、任务、承诺、时间推进和用户反馈。
  2. 输出 precision、有效提醒率、重复率、勿扰违反、平均每日数量。
  3. 支持 FakeClock 快速回放 30 天。
  4. 建立保守、平衡、积极三套策略预设,但默认平衡偏保守。
  5. 产生具体失败 case 报告。
  6. CI 执行确定性策略评测,不调用真实模型。
验收
  • 同一输入结果确定。
  • 故意关闭冷却时重复率测试会失败。
  • 默认策略不超过每日配额。
  • 所有 P0/P1 场景有专门测试。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 4:受控主动性
- 任务编号:T43
- 任务名称:主动性回放与质量评测
- 建议分支:feat/43-proactivity-evaluation
- 前置依赖:T40
- 并行说明:可与 T41、T42 并行
- 文件所有权:tools/evaluation/proactivity、test fixtures

目标:
用合成时间线评估漏报、误报、重复、勿扰和配额行为。

实现要求:
1. 定义时间线输入:目标状态、任务、承诺、时间推进和用户反馈。
2. 输出 precision、有效提醒率、重复率、勿扰违反、平均每日数量。
3. 支持 FakeClock 快速回放 30 天。
4. 建立保守、平衡、积极三套策略预设,但默认平衡偏保守。
5. 产生具体失败 case 报告。
6. CI 执行确定性策略评测,不调用真实模型。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 同一输入结果确定。
- [ ] 故意关闭冷却时重复率测试会失败。
- [ ] 默认策略不超过每日配额。
- [ ] 所有 P0/P1 场景有专门测试。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P4 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 4:受控主动性 的集成分支。待检查任务分支:
feat/40-proactivity-engine, feat/41-scheduler-notification, feat/42-proactivity-ui, feat/43-proactivity-evaluation

阶段目标:
由规则和领域状态产生少量高价值提醒,模型只负责表达,不运行自由 Agent 循环。

阶段退出标准:
主动候选有解释、评分和策略记录;勿扰、冷却、配额、反馈生效;通知不会重复轰炸。

集成任务:
阶段 4 集成后用 FakeClock 回放 30 天:任务到期、用户忽略、稍后、目标暂停、应用休眠、重启和通知权限关闭。确认主动性少而准确、无重复、可解释、可关闭。模型离线时提醒仍能使用模板送达。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P5

阶段 5:伙伴人格、关系与桌面体验

在记忆和目标可靠后增加稳定的伙伴感,不以角色扮演掩盖系统缺陷。

本阶段需要你提供

  • 伙伴名字、称呼与角色边界
  • 表达风格样例
  • 不可说/不可做清单
  • Logo、头像、应用图标
  • 是否需要开机启动与托盘常驻

退出标准

人格规则版本化;关系状态由明确事件推进;跨会话和模型切换保持风格;桌面常驻体验可控。

T50

Companion Identity 与 Relationship 领域

feat/50-companion-domain
依赖:阶段 4 完成 并行:先冻结模型;T51~T53 可随后并行 文件所有权:domain-companion、application/companion、相关 migrations

目标:结构化保存人格宪法、表达参数、关系状态和短期互动状态。

实现要求与验收
实现要求
  1. Character Constitution 包含价值边界、角色边界、不可违反规则并版本化。
  2. StyleProfile 包含称呼、长度、直接程度、幽默度、关心强度等明确字段。
  3. RelationshipState 只由确认事件推进,不能由模型自由改写。
  4. InteractionState 为短期状态,带衰减和过期,不写入永久画像。
  5. 修改人格必须由用户显式命令并保留旧版本。
  6. 提供安全默认配置。
验收
  • 模型不能通过返回文本修改人格。
  • 关系状态变化有来源与审计。
  • 短期情绪过期后不影响长期关系。
  • 旧人格版本可回滚。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 5:伙伴人格、关系与桌面体验
- 任务编号:T50
- 任务名称:Companion Identity 与 Relationship 领域
- 建议分支:feat/50-companion-domain
- 前置依赖:阶段 4 完成
- 并行说明:先冻结模型;T51~T53 可随后并行
- 文件所有权:domain-companion、application/companion、相关 migrations

目标:
结构化保存人格宪法、表达参数、关系状态和短期互动状态。

实现要求:
1. Character Constitution 包含价值边界、角色边界、不可违反规则并版本化。
2. StyleProfile 包含称呼、长度、直接程度、幽默度、关心强度等明确字段。
3. RelationshipState 只由确认事件推进,不能由模型自由改写。
4. InteractionState 为短期状态,带衰减和过期,不写入永久画像。
5. 修改人格必须由用户显式命令并保留旧版本。
6. 提供安全默认配置。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 模型不能通过返回文本修改人格。
- [ ] 关系状态变化有来源与审计。
- [ ] 短期情绪过期后不影响长期关系。
- [ ] 旧人格版本可回滚。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T51

人格化上下文与一致性测试

feat/51-companion-prompt
依赖:T50、T13、T22、T33 并行:可与 T52、T53 并行 文件所有权:application/context、prompt-registry/companion、evaluation/personality

目标:把核心人格、关系、当前目标和召回记忆按严格预算组装,并验证跨模型一致性。

实现要求与验收
实现要求
  1. 上下文优先级:安全规则、人格宪法、核心用户记忆、当前目标、相关记忆、近期对话。
  2. StyleProfile 转换为明确行为约束,不使用模糊文学描述。
  3. 回复可以表达关心,但不得虚构感受、经历或已执行动作。
  4. 建立跨 20 轮对话、重启、模型切换的一致性测试。
  5. 记录使用的 constitutionVersion 和 promptVersion。
  6. 不暴露隐藏推理,只展示使用了哪些数据来源。
验收
  • 关键角色边界违反率达到方案基线。
  • 用户改变称呼后新会话生效,历史可追踪。
  • 模型切换不改变核心边界。
  • 上下文超预算时不裁剪安全和当前目标。

用户资源:请提供伙伴设定表和 10~20 条理想/不理想表达样例;缺失时使用克制、直接、低打扰的中性默认人格。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 5:伙伴人格、关系与桌面体验
- 任务编号:T51
- 任务名称:人格化上下文与一致性测试
- 建议分支:feat/51-companion-prompt
- 前置依赖:T50、T13、T22、T33
- 并行说明:可与 T52、T53 并行
- 文件所有权:application/context、prompt-registry/companion、evaluation/personality

目标:
把核心人格、关系、当前目标和召回记忆按严格预算组装,并验证跨模型一致性。

实现要求:
1. 上下文优先级:安全规则、人格宪法、核心用户记忆、当前目标、相关记忆、近期对话。
2. StyleProfile 转换为明确行为约束,不使用模糊文学描述。
3. 回复可以表达关心,但不得虚构感受、经历或已执行动作。
4. 建立跨 20 轮对话、重启、模型切换的一致性测试。
5. 记录使用的 constitutionVersion 和 promptVersion。
6. 不暴露隐藏推理,只展示使用了哪些数据来源。

用户资源:
请提供伙伴设定表和 10~20 条理想/不理想表达样例;缺失时使用克制、直接、低打扰的中性默认人格。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 关键角色边界违反率达到方案基线。
- [ ] 用户改变称呼后新会话生效,历史可追踪。
- [ ] 模型切换不改变核心边界。
- [ ] 上下文超预算时不裁剪安全和当前目标。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T52

托盘、开机启动与低打扰桌面体验

feat/52-desktop-experience
依赖:T50、T02 并行:可与 T51、T53 并行 文件所有权:Electron main desktop capabilities、renderer shell

目标:完善常驻桌面体验,但不引入 Live2D 或悬浮宠物。

实现要求与验收
实现要求
  1. 实现托盘菜单:打开、快速记录、暂停主动性、设置、退出。
  2. 开机启动默认关闭,由用户显式开启。
  3. 窗口位置与大小恢复,防止多屏切换后窗口丢失。
  4. 关闭按钮行为可配置为隐藏到托盘或退出。
  5. 展示模型/数据库健康状态和后台任务状态。
  6. 资源占用可观测,窗口隐藏后暂停不必要渲染。
验收
  • 退出与隐藏语义明确。
  • 开机启动可关闭且不会重复注册。
  • 多显示器和分辨率变化后窗口可恢复。
  • 后台不会持续高频轮询或占用 GPU。

用户资源:需提供 512×512 PNG、Windows ICO;未提供时保留占位图标,不阻塞功能开发。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 5:伙伴人格、关系与桌面体验
- 任务编号:T52
- 任务名称:托盘、开机启动与低打扰桌面体验
- 建议分支:feat/52-desktop-experience
- 前置依赖:T50、T02
- 并行说明:可与 T51、T53 并行
- 文件所有权:Electron main desktop capabilities、renderer shell

目标:
完善常驻桌面体验,但不引入 Live2D 或悬浮宠物。

实现要求:
1. 实现托盘菜单:打开、快速记录、暂停主动性、设置、退出。
2. 开机启动默认关闭,由用户显式开启。
3. 窗口位置与大小恢复,防止多屏切换后窗口丢失。
4. 关闭按钮行为可配置为隐藏到托盘或退出。
5. 展示模型/数据库健康状态和后台任务状态。
6. 资源占用可观测,窗口隐藏后暂停不必要渲染。

用户资源:
需提供 512×512 PNG、Windows ICO;未提供时保留占位图标,不阻塞功能开发。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 退出与隐藏语义明确。
- [ ] 开机启动可关闭且不会重复注册。
- [ ] 多显示器和分辨率变化后窗口可恢复。
- [ ] 后台不会持续高频轮询或占用 GPU。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T53

可解释性中心

feat/53-explainability-center
依赖:T20、T30、T40、T50 并行:可与 T51、T52 并行 文件所有权:renderer/features/explainability、application/query

目标:集中展示回复引用、记忆来源、目标状态、提醒理由和工具审计。

实现要求与验收
实现要求
  1. 对话消息可展开“使用的信息”,列出 memoryId、goalId、来源和时间。
  2. 不展示隐藏推理链,只展示输入事实、规则结果和执行记录。
  3. 主动提醒展示 scoreBreakdown 的人类可读摘要。
  4. 人格变化显示版本差异和操作者。
  5. 提供 traceId 搜索诊断视图。
  6. 敏感信息按权限遮罩。
验收
  • 用户可解释一条回复为何记起某事。
  • 不存在时明确显示“未使用长期记忆”。
  • 审计数据不可由 Renderer 篡改。
  • 诊断信息不泄露 API Key 或完整系统 Prompt。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 5:伙伴人格、关系与桌面体验
- 任务编号:T53
- 任务名称:可解释性中心
- 建议分支:feat/53-explainability-center
- 前置依赖:T20、T30、T40、T50
- 并行说明:可与 T51、T52 并行
- 文件所有权:renderer/features/explainability、application/query

目标:
集中展示回复引用、记忆来源、目标状态、提醒理由和工具审计。

实现要求:
1. 对话消息可展开“使用的信息”,列出 memoryId、goalId、来源和时间。
2. 不展示隐藏推理链,只展示输入事实、规则结果和执行记录。
3. 主动提醒展示 scoreBreakdown 的人类可读摘要。
4. 人格变化显示版本差异和操作者。
5. 提供 traceId 搜索诊断视图。
6. 敏感信息按权限遮罩。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 用户可解释一条回复为何记起某事。
- [ ] 不存在时明确显示“未使用长期记忆”。
- [ ] 审计数据不可由 Renderer 篡改。
- [ ] 诊断信息不泄露 API Key 或完整系统 Prompt。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P5 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 5:伙伴人格、关系与桌面体验 的集成分支。待检查任务分支:
feat/50-companion-domain, feat/51-companion-prompt, feat/52-desktop-experience, feat/53-explainability-center

阶段目标:
在记忆和目标可靠后增加稳定的伙伴感,不以角色扮演掩盖系统缺陷。

阶段退出标准:
人格规则版本化;关系状态由明确事件推进;跨会话和模型切换保持风格;桌面常驻体验可控。

集成任务:
阶段 5 集成时进行跨会话人格与关系测试:修改称呼、推进一个关系里程碑、重启、切换本地模型、暂停主动性,再验证表达边界、引用来源和桌面常驻行为。不要用增加 Prompt 长度掩盖状态模型问题。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P6

阶段 6:安全、数据控制、测试与发布

把开发版收敛为可长期使用、可恢复、可升级的 Windows V1。

本阶段需要你提供

  • 正式应用名与 appId
  • 正式图标
  • 隐私说明文本
  • 安装包签名证书(可后补)
  • 更新托管地址(可先关闭自动更新)

退出标准

安全基线、导出删除、备份恢复、长周期测试、Windows 安装包和升级路径通过验收。

T60

安全与 Prompt Injection 加固

feat/60-security-hardening
依赖:阶段 5 完成 并行:可与 T61、T62、T63 并行,但安全修复优先合并 文件所有权:security policies、IPC、model/tool boundaries、security tests

目标:系统性检查 Electron、IPC、模型输入、外部内容和工具权限边界。

实现要求与验收
实现要求
  1. 审查 CSP、导航、外链、协议处理、preload API 和 IPC channel。
  2. 外部文档、网页、记忆和工具结果必须标记为不可信数据。
  3. 创建 Prompt Injection 测试:要求泄露 Prompt、修改人格、删除数据、执行系统命令。
  4. 确保未实现 R2/R3 工具;R1 必须预览、审批、幂等和审计。
  5. 日志、错误和诊断信息脱敏。
  6. 依赖漏洞只修复与实际运行路径相关问题,记录不可修复风险。
验收
  • Renderer 无任意文件和 Shell 能力。
  • 恶意内容不能改变权限或人格。
  • 所有写操作可追溯到用户命令或受信事件。
  • 安全回归测试进入 CI。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 6:安全、数据控制、测试与发布
- 任务编号:T60
- 任务名称:安全与 Prompt Injection 加固
- 建议分支:feat/60-security-hardening
- 前置依赖:阶段 5 完成
- 并行说明:可与 T61、T62、T63 并行,但安全修复优先合并
- 文件所有权:security policies、IPC、model/tool boundaries、security tests

目标:
系统性检查 Electron、IPC、模型输入、外部内容和工具权限边界。

实现要求:
1. 审查 CSP、导航、外链、协议处理、preload API 和 IPC channel。
2. 外部文档、网页、记忆和工具结果必须标记为不可信数据。
3. 创建 Prompt Injection 测试:要求泄露 Prompt、修改人格、删除数据、执行系统命令。
4. 确保未实现 R2/R3 工具;R1 必须预览、审批、幂等和审计。
5. 日志、错误和诊断信息脱敏。
6. 依赖漏洞只修复与实际运行路径相关问题,记录不可修复风险。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] Renderer 无任意文件和 Shell 能力。
- [ ] 恶意内容不能改变权限或人格。
- [ ] 所有写操作可追溯到用户命令或受信事件。
- [ ] 安全回归测试进入 CI。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T61

导出、删除、备份与恢复

feat/61-data-control
依赖:阶段 5 完成 并行:可与 T60、T62、T63 并行 文件所有权:application/data-control、infrastructure backup、renderer settings/data

目标:实现用户对本地数据的完整控制和可靠恢复。

实现要求与验收
实现要求
  1. 支持导出会话、记忆、目标、设置和审计的版本化 JSON 包。
  2. 支持按会话、按记忆和全量删除;向量/FTS/缓存同步清理。
  3. 自动备份采用原子快照和保留策略,默认本地。
  4. 恢复前验证版本、校验和和迁移兼容性。
  5. 导出不得包含 API Key;敏感字段有显式选项。
  6. 提供恢复演练测试。
验收
  • 导出后可在空数据库恢复主要业务数据。
  • 全量删除后检索和备份目录无残留,除非用户选择保留备份。
  • 损坏备份不会覆盖现有数据库。
  • 跨 schema 版本恢复有明确错误。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 6:安全、数据控制、测试与发布
- 任务编号:T61
- 任务名称:导出、删除、备份与恢复
- 建议分支:feat/61-data-control
- 前置依赖:阶段 5 完成
- 并行说明:可与 T60、T62、T63 并行
- 文件所有权:application/data-control、infrastructure backup、renderer settings/data

目标:
实现用户对本地数据的完整控制和可靠恢复。

实现要求:
1. 支持导出会话、记忆、目标、设置和审计的版本化 JSON 包。
2. 支持按会话、按记忆和全量删除;向量/FTS/缓存同步清理。
3. 自动备份采用原子快照和保留策略,默认本地。
4. 恢复前验证版本、校验和和迁移兼容性。
5. 导出不得包含 API Key;敏感字段有显式选项。
6. 提供恢复演练测试。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 导出后可在空数据库恢复主要业务数据。
- [ ] 全量删除后检索和备份目录无残留,除非用户选择保留备份。
- [ ] 损坏备份不会覆盖现有数据库。
- [ ] 跨 schema 版本恢复有明确错误。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T62

E2E、长周期和故障注入测试

feat/62-system-testing
依赖:阶段 5 完成 并行:可与 T60、T61、T63 并行 文件所有权:tests/e2e、tests/scenarios、evaluation reports

目标:覆盖数字伙伴最关键的跨会话、跨时间和故障恢复场景。

实现要求与验收
实现要求
  1. Playwright Electron 覆盖首次启动、设置模型、聊天、记忆审核、目标、提醒和删除。
  2. 用 FakeClock/FakeModel 回放 7/30/90 天场景。
  3. 故障注入:模型超时、数据库锁、迁移失败、通知拒绝、应用崩溃、索引不一致。
  4. 建立性能基线:启动、首 token、检索、空闲 CPU/内存、数据库增长。
  5. 测试数据全部合成。
  6. 生成发布前验收报告。
验收
  • 关键场景无随机测试失败。
  • 崩溃后无半条正式记忆或半完成任务。
  • 性能退化有阈值告警。
  • 所有失败可定位 traceId。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 6:安全、数据控制、测试与发布
- 任务编号:T62
- 任务名称:E2E、长周期和故障注入测试
- 建议分支:feat/62-system-testing
- 前置依赖:阶段 5 完成
- 并行说明:可与 T60、T61、T63 并行
- 文件所有权:tests/e2e、tests/scenarios、evaluation reports

目标:
覆盖数字伙伴最关键的跨会话、跨时间和故障恢复场景。

实现要求:
1. Playwright Electron 覆盖首次启动、设置模型、聊天、记忆审核、目标、提醒和删除。
2. 用 FakeClock/FakeModel 回放 7/30/90 天场景。
3. 故障注入:模型超时、数据库锁、迁移失败、通知拒绝、应用崩溃、索引不一致。
4. 建立性能基线:启动、首 token、检索、空闲 CPU/内存、数据库增长。
5. 测试数据全部合成。
6. 生成发布前验收报告。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 关键场景无随机测试失败。
- [ ] 崩溃后无半条正式记忆或半完成任务。
- [ ] 性能退化有阈值告警。
- [ ] 所有失败可定位 traceId。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T63

Windows 打包、配置迁移与发布

feat/63-release-packaging
依赖:阶段 5 完成 并行:可与 T60、T61、T62 并行;最后合并 文件所有权:build/release config、installer、release docs

目标:生成可安装的 Windows V1,处理原生模块、数据目录、升级和卸载边界。

实现要求与验收
实现要求
  1. 配置 Windows 安装包、应用图标、版本信息和发布渠道。
  2. 打包验证 better-sqlite3 等原生模块与 Electron ABI。
  3. 应用升级前备份数据库并运行迁移;失败时停止升级并保留旧数据。
  4. 自动更新默认关闭,只有提供可信更新源后启用。
  5. 卸载默认不静默删除用户数据,明确提供选项。
  6. 生成 release checklist、known issues 和 rollback 文档。
验收
  • 干净 Windows 环境可安装、启动、升级和卸载。
  • 升级失败不会破坏原数据。
  • 安装包不包含 .env、测试数据库、源码映射中的敏感内容或模型文件。
  • 未签名构建有清晰开发标识;正式发布前替换证书。

用户资源:正式发布需要应用名称、appId、版本策略、PNG/ICO 和可选代码签名证书;没有签名证书时只能生成内部测试包。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 6:安全、数据控制、测试与发布
- 任务编号:T63
- 任务名称:Windows 打包、配置迁移与发布
- 建议分支:feat/63-release-packaging
- 前置依赖:阶段 5 完成
- 并行说明:可与 T60、T61、T62 并行;最后合并
- 文件所有权:build/release config、installer、release docs

目标:
生成可安装的 Windows V1,处理原生模块、数据目录、升级和卸载边界。

实现要求:
1. 配置 Windows 安装包、应用图标、版本信息和发布渠道。
2. 打包验证 better-sqlite3 等原生模块与 Electron ABI。
3. 应用升级前备份数据库并运行迁移;失败时停止升级并保留旧数据。
4. 自动更新默认关闭,只有提供可信更新源后启用。
5. 卸载默认不静默删除用户数据,明确提供选项。
6. 生成 release checklist、known issues 和 rollback 文档。

用户资源:
正式发布需要应用名称、appId、版本策略、PNG/ICO 和可选代码签名证书;没有签名证书时只能生成内部测试包。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 干净 Windows 环境可安装、启动、升级和卸载。
- [ ] 升级失败不会破坏原数据。
- [ ] 安装包不包含 .env、测试数据库、源码映射中的敏感内容或模型文件。
- [ ] 未签名构建有清晰开发标识;正式发布前替换证书。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P6 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 6:安全、数据控制、测试与发布 的集成分支。待检查任务分支:
feat/60-security-hardening, feat/61-data-control, feat/62-system-testing, feat/63-release-packaging

阶段目标:
把开发版收敛为可长期使用、可恢复、可升级的 Windows V1。

阶段退出标准:
安全基线、导出删除、备份恢复、长周期测试、Windows 安装包和升级路径通过验收。

集成任务:
执行最终发布审查:从空机器安装,连接 Ollama,完成聊天→记忆→目标→提醒→导出→删除→恢复→升级全流程。运行安全、E2E、长周期、性能和迁移测试。输出 V1 发布阻断问题、非阻断问题、回滚步骤和最终架构偏差清单。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。
P7

阶段 7:可选语音与形象扩展(V1 后)

在核心连续性通过验收后,再借鉴 Open‑LLM‑VTuber 与 AIRI 接入语音;默认不纳入 V1。

本阶段需要你提供

  • 麦克风权限
  • ASR/TTS 模型选择
  • 音色授权
  • 头像或 Live2D 授权资源
  • 语音数据保存政策

退出标准

语音模块可独立关闭、崩溃不影响文本和数据;用户可打断;不会把音频原文静默长期保存。

T70

语音能力端口与状态机

feat/70-voice-ports
依赖:V1 发布后 并行:先完成 文件所有权:contracts/voice、domain-interaction

目标:定义 ASR、VAD、TTS、播放、打断和隐私状态,不绑定具体模型。

实现要求与验收
实现要求
  1. 定义 SpeechRecognizerPort、VoiceActivityPort、SpeechSynthesizerPort、AudioPlayerPort。
  2. 状态机覆盖 idle、listening、transcribing、thinking、speaking、interrupted、error。
  3. 用户打断优先取消 TTS 和当前生成。
  4. 音频缓存有生命周期和删除策略。
  5. 文本对话仍是唯一业务真相入口。
  6. 默认不保存原始音频。
验收
  • 任一语音适配器崩溃不影响文本聊天。
  • 状态转换和取消有单元测试。
  • 权限拒绝时清晰降级。
  • 领域层不导入音频 SDK。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 7:可选语音与形象扩展(V1 后)
- 任务编号:T70
- 任务名称:语音能力端口与状态机
- 建议分支:feat/70-voice-ports
- 前置依赖:V1 发布后
- 并行说明:先完成
- 文件所有权:contracts/voice、domain-interaction

目标:
定义 ASR、VAD、TTS、播放、打断和隐私状态,不绑定具体模型。

实现要求:
1. 定义 SpeechRecognizerPort、VoiceActivityPort、SpeechSynthesizerPort、AudioPlayerPort。
2. 状态机覆盖 idle、listening、transcribing、thinking、speaking、interrupted、error。
3. 用户打断优先取消 TTS 和当前生成。
4. 音频缓存有生命周期和删除策略。
5. 文本对话仍是唯一业务真相入口。
6. 默认不保存原始音频。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 任一语音适配器崩溃不影响文本聊天。
- [ ] 状态转换和取消有单元测试。
- [ ] 权限拒绝时清晰降级。
- [ ] 领域层不导入音频 SDK。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T71

本地 ASR/VAD/TTS Sidecar

feat/71-local-voice-sidecar
依赖:T70 并行:可与 T72 并行 文件所有权:独立 voice sidecar 与 adapter;不得侵入核心领域

目标:根据设备资源接入本地语音能力,采用可监督子进程。

实现要求与验收
实现要求
  1. Sidecar 使用明确协议、健康检查、超时、重启上限和版本握手。
  2. 音频分块、VAD、ASR、TTS 均可取消。
  3. 不把 Python 依赖打入主进程。
  4. 记录延迟与错误,不记录原始音频内容。
  5. 提供无 GPU 的降级或禁用路径。
  6. 打包与升级独立版本化。
验收
  • Sidecar 不可用时应用正常启动。
  • 连续打断不会产生僵尸进程。
  • 音频临时文件会清理。
  • 资源占用可观测。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 7:可选语音与形象扩展(V1 后)
- 任务编号:T71
- 任务名称:本地 ASR/VAD/TTS Sidecar
- 建议分支:feat/71-local-voice-sidecar
- 前置依赖:T70
- 并行说明:可与 T72 并行
- 文件所有权:独立 voice sidecar 与 adapter;不得侵入核心领域

目标:
根据设备资源接入本地语音能力,采用可监督子进程。

实现要求:
1. Sidecar 使用明确协议、健康检查、超时、重启上限和版本握手。
2. 音频分块、VAD、ASR、TTS 均可取消。
3. 不把 Python 依赖打入主进程。
4. 记录延迟与错误,不记录原始音频内容。
5. 提供无 GPU 的降级或禁用路径。
6. 打包与升级独立版本化。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] Sidecar 不可用时应用正常启动。
- [ ] 连续打断不会产生僵尸进程。
- [ ] 音频临时文件会清理。
- [ ] 资源占用可观测。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。
T72

语音 UI、打断与可选形象适配

feat/72-voice-avatar-ui
依赖:T70 并行:可与 T71 并行 文件所有权:renderer voice UI、optional avatar adapter

目标:实现明确的监听/思考/说话状态和用户打断;形象只订阅状态事件。

实现要求与验收
实现要求
  1. 麦克风必须由用户明确开启,并持续显示监听状态。
  2. 支持按键说话和自动 VAD 两种模式,默认按键说话。
  3. TTS 文本来自已完成或可安全播放的回复片段。
  4. 形象适配器只接收 emotion/expression 事件,不读取数据库。
  5. 无形象资源时使用简单状态动画。
  6. 素材授权信息进入资源清单。
验收
  • 用户随时能停止监听和播放。
  • 后台监听不会静默开启。
  • 移除形象模块不影响语音和文本。
  • 应用退出后麦克风和音频设备释放。

用户资源:无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

当前任务:
- 阶段:阶段 7:可选语音与形象扩展(V1 后)
- 任务编号:T72
- 任务名称:语音 UI、打断与可选形象适配
- 建议分支:feat/72-voice-avatar-ui
- 前置依赖:T70
- 并行说明:可与 T71 并行
- 文件所有权:renderer voice UI、optional avatar adapter

目标:
实现明确的监听/思考/说话状态和用户打断;形象只订阅状态事件。

实现要求:
1. 麦克风必须由用户明确开启,并持续显示监听状态。
2. 支持按键说话和自动 VAD 两种模式,默认按键说话。
3. TTS 文本来自已完成或可安全播放的回复片段。
4. 形象适配器只接收 emotion/expression 事件,不读取数据库。
5. 无形象资源时使用简单状态动画。
6. 素材授权信息进入资源清单。

用户资源:
无额外资源;缺失配置时使用仓库内示例值和可替换占位符。

禁止事项:
不要修改任务所有权之外的模块;不要提前实现后续阶段功能。

验收清单:
- [ ] 用户随时能停止监听和播放。
- [ ] 后台监听不会静默开启。
- [ ] 移除形象模块不影响语音和文本。
- [ ] 应用退出后麦克风和音频设备释放。

验证命令:
pnpm lint
pnpm typecheck
pnpm test

执行步骤:
1. 先检查当前分支、工作区状态和前置接口是否存在;不要假设未合并代码已经存在。
2. 先写或更新测试,再实现最小满足需求的代码。
3. 对公共接口变更进行影响搜索;保持向后兼容,除非本任务明确要求冻结新接口。
4. 完成后运行所有验证命令,修复失败,不得用跳过测试或放宽类型规则规避。
5. 最终回复必须包含:变更摘要、关键设计取舍、修改文件、测试结果、未完成项、风险、建议合并顺序。

P7 阶段合并验收

集成审查 Codex 提示词
你正在开发“AI 数字伙伴”Windows 桌面应用。开始前必须阅读仓库根目录的 AGENTS.md、README.md、docs/architecture/ 和 docs/adr/。

全局架构约束:
1. 使用 pnpm workspace、Electron、React、TypeScript strict,采用模块化单体。
2. 依赖方向必须为 Renderer → Application → Domain;Infrastructure 只能实现 Port,Domain 不得导入 Electron、SQLite、HTTP、Ollama SDK、文件系统或 UI。
3. Electron 必须启用 contextIsolation,关闭 nodeIntegration;Renderer 只能调用 preload 暴露的白名单 Typed IPC。
4. 模型只能产生候选、摘要、回复和建议,不能直接修改正式记忆、目标状态、人格配置、权限或执行高风险工具。
5. 数据变更必须经过 Application Use Case;关键状态变化写入审计事件。
6. 不引入微服务、Web 服务、消息队列、Python Sidecar、图数据库、插件市场、Live2D 或语音能力,除非当前任务明确要求。
7. 不做无关重构,不修改任务范围外模块的公共接口;确有必要时先在最终说明中列出原因。
8. 所有外部输入、模型结构化输出、IPC 参数和配置必须使用 Zod 校验。
9. 新增行为必须有测试;提交前运行 lint、typecheck、unit test,以及本任务指定的验证命令。
10. Windows 11 必须可运行;路径处理不得假设 POSIX。
11. 不隐藏错误,不用空 catch,不使用 any 规避类型问题,不提交密钥、真实隐私数据或大型模型文件。
12. 任务完成后输出:变更摘要、关键设计、修改文件、验证结果、遗留风险、建议合并顺序。

你现在位于 阶段 7:可选语音与形象扩展(V1 后) 的集成分支。待检查任务分支:
feat/70-voice-ports, feat/71-local-voice-sidecar, feat/72-voice-avatar-ui

阶段目标:
在核心连续性通过验收后,再借鉴 Open‑LLM‑VTuber 与 AIRI 接入语音;默认不纳入 V1。

阶段退出标准:
语音模块可独立关闭、崩溃不影响文本和数据;用户可打断;不会把音频原文静默长期保存。

集成任务:
仅在 V1 核心指标稳定后集成阶段 7。测试语音 Sidecar 崩溃、麦克风拒绝、快速打断、模型慢响应和应用退出。任何语音问题都不得损坏文本会话、记忆或目标状态。

要求:
1. 先读取 git log、git diff、包依赖图和迁移列表,确认没有遗漏或重复实现。
2. 优先修复契约不一致、循环依赖、迁移冲突、IPC 重复注册、配置重复来源和测试夹具分叉。
3. 不顺便实现下一阶段能力。
4. 运行根目录 lint、typecheck、unit、build,以及本阶段相关 E2E/评测。
5. 输出“通过/阻断”结论;阻断问题必须给出具体文件、复现命令和修复结果。
6. 更新 docs/architecture/ 和 ADR,只记录实际发生的架构偏差与决策。

最终建议

  1. 先只启动阶段 0。阶段 0 通过后,再并行阶段 1;不要一次性把 31 个任务全部交给 Codex。
  2. 阶段 2 是发布阻断阶段。记忆候选、证据、冲突与删除完整性未达标,后续人格和主动性越强,风险越大。
  3. 阶段 4 默认保守。主动提醒的正确默认是少发,而不是证明系统“有自主性”。
  4. 语音和 Live2D 延后。它们是交互适配器,不应改变记忆、目标和权限核心。

本文档与《AI 数字伙伴 V1.1 开源项目调研增强技术方案》配套使用。技术方案解释“为什么这样设计”,本任务书定义“如何分支、实现、验证和合并”。