publish-and-reuse · v2.0.0 · 2026-09-03 · sha256 9de2aedf25103b4b

publish-and-reuse v2.0.0A

Immutable. This exact content is served forever at /api/v1/blob/9de2aedf25103b4b.

---
name: publish-and-reuse
description: Personal AI Infrastructure 多设备生命周期同步总入口:一句“同步一下我的 Personal AI”自动判断 PULL/MERGE/NO ACTION/REVIEW/BLOCKED(AUTO_SYNC),覆盖 agent-tools、personal-ai-state(curated + Dynamic Memory 合并)、项目仓库、runtime refresh 与新设备 Fresh Restore;同时保留 DSH 四层环境上传/更新/体检/复现作为子步骤。只自动处理确定安全的变更,冲突与 dirty 一律留给人工;commit/push 受 canonical ownership lease 与 receipt 约束。
version: 2.0.0
triggers:
  - "同步一下我的 Personal AI / 同步一下 / 更新一下这台电脑 / 让这台电脑跟另一台一致 / 把最新状态同步过来"
  - "把这台机器的变化同步出去 / 只上传"
  - "只检查同步状态 / 只拉远端 / 只上传 / 在新电脑恢复我的 Personal AI"
  - "一键上传环境 / 上传环境 / 备份环境 / 同步到 GitHub / 推送环境配置"
  - "一键更新环境 / 从 GitHub 同步 / 同步到 DSH / 刷新环境 / 拉取环境"
  - "一键检查环境 / 环境体检 / 检查四层一致性 / 对比环境差异"
  - "在新设备复现 / 安装我的环境"
  - "发布 Skill / 脚本 / 插件 / 整个仓库 / 跑发布门禁"
not_for:
  - "在非 skills/agent-tools 仓库的其他业务工作区中执行环境同步、更新或上传(本 skill 仅在 agent-tools 仓库本体生效)"
  - "修改具体业务代码或单个 Skill 的内部逻辑实现(交给 minimal-implementation)"
  - "日常代码编写与单点 Bug 修复"
depends_on:
  - skill-repository-maintainer
  - dsh-config-sync
  - environment-bootstrap
---

# Personal AI 生命周期同步(publish-and-reuse)

## 定位

本 skill 是 **Personal AI Infrastructure 长期、多设备、增量生命周期同步的最高层入口**。
用户平时只需要说“同步一下我的 Personal AI”,系统自动判断本次应该
PULL / PUSH / MERGE / NO ACTION / REVIEW / BLOCKED——用户不负责判断方向。
Fresh Restore 只是 `local canonical missing` 时的特殊 SYNC。

旧的 DSH 四层能力(Skills / 插件 / MCP / DSH 配置的上传、更新、体检、新设备复现)保留,但作为整体同步中的子步骤。

复杂协议、SYNC_OWNERSHIP_MATRIX、方向规则、Memory 合并契约、RESTORE 全流程:
`references/personal-ai-lifecycle-sync.md`(先读它再执行非常规场景)。

## 不适用(负向边界)

- 在非 agent-tools 仓库的其他业务工作区执行环境同步/上传/覆盖。
- 修改具体业务代码或单个 Skill 的内部实现(交给 `minimal-implementation`)。
- 日常代码编写与单点 Bug 修复。
- 用本入口同步 secrets、sessions、broker sqlite、device-local 路径或派生索引——这些永不进入 git 生命周期同步。

## 模式路由

| 用户说 | 进入模式 |
|---|---|
| 同步一下 / 同步我的 Personal AI / 更新一下这台电脑 / 让两台电脑一致 | `SYNC`(AUTO_SYNC,自动判方向) |
| 把变化同步出去 / 只上传 | `PUSH`(显式上传,必须有 ownership receipt) |
| 只检查 | `CHECK`(只读) |
| 只拉远端 | `PULL`(禁止 push/merge) |
| 只上传 | `PUSH`(禁止 pull/merge) |
| 在新电脑恢复 | `RESTORE` |
| 上传环境 / 更新环境 / 环境体检 / 新设备复现(旧表达) | 继续工作,映射到 PUSH / PULL / CHECK / RESTORE 子流程 |

## 高层工作流

编排器(薄,只 inspect/classify/调用既有工具/排序/报告):

```powershell
python scripts\personal_ai_sync.py check      # 只读分类,连 checkpoint 都只读更新
python scripts\personal_ai_sync.py sync       # AUTO_SYNC 默认日常入口
python scripts\personal_ai_sync.py sync --detail   # 下钻
python scripts\personal_ai_sync.py restore    # Fresh/缺失恢复
```

内部顺序(防数据丢失):fetch all → classify all(git ancestry,禁止 mtime/last-write-wins)→ action plan → 只执行确定安全动作 → 受影响面判定 → 受影响 Harness `aic apply`(generated-only,snapshot+post-diff+rollback)→ 受影响 derived 增量 refresh → validate → 写 machine-local checkpoint(`~/.dsh/.personal-ai-sync/status.json`)→ 短输出。

确定安全的自动动作(其余一律 REVIEW):锁内 clean FF pull、显式 push 模式下有 ownership receipt 且验证通过的 FF push、不同设备新增 record/revision 的 Memory 确定性合并(复用 MemoryProvider.import_bundle 契约)、派生索引 rebuild、runtime diff/refresh。`SYNC` 不隐式 commit/push。

## 安全规则(铁律)

1. **方向判定只用 git ancestry**,禁止 mtime / last-write-wins / timestamp 覆盖。
2. **LOCAL_DIRTY 一律 UNTOUCHED**:禁止自动 add/commit/stash/reset/checkout/overwrite。
3. **DIVERGED 默认 REVIEW**:禁止自动 merge/rebase/force push 基础设施 canonical;唯一例外是 memory-only 且路径不相交的确定性合并,且 curated state(identity/preferences/goals)双端修改永远 CONFLICT_REVIEW。
4. **secrets 绝不进 git sync**:只检测引用 AVAILABLE/MISSING/NOT_REQUIRED;optional 缺失不阻塞整体。
5. **device-local / derived 永不同步**:路径、GPU、端口、索引、projcache、node_modules——每设备 `aic discover` / 本地 rebuild。
6. **raw history 不走 git sync**:sessions/traces/broker sqlite 继续走 Durability。
7. **凭据绝对不出包**:`.credentials.yaml`、`sessions/`、`storages/` 永远排除。
8. **不破坏目标端无关文件**:所有 apply 仅增量覆盖,不清理未登记文件。
9. 已知外部 blocker(BACKUP_KEY_CUSTODY / NOVEL_REPO_DURABILITY)状态未变只报 `known external blocker, unchanged`,不重复建议解决。
10. public 项目 push 前必须 privacy scan,命中即 BLOCKED_PRIVACY(NOVEL_REPO_DURABILITY 继续保持)。
11. canonical 写操作必须先取得 machine-local mutation lease;dirty、foreign lock、unknown lock 或 scope 未验证时一律 REVIEW/DEFER。
12. commit 只能 stage 声明的 owned paths,并写出 machine-local ownership receipt;禁止 `git add -A`、隐式 push 和非 canonical restore 注册 Scheduler。

## 输出契约

默认短输出(用户说“展开”才下钻 git 日志/diff/governance 细节):

```text
Personal AI Sync

agent-tools          IN_SYNC / PULLED / PUSHED
personal-ai-state    IN_SYNC / PULLED / PUSHED / MERGED
projects             <简要汇总>
memory               <新增/合并/冲突数量>
runtime              NO DRIFT / refreshed
secrets              READY / PARTIAL
external blockers    known external blocker, unchanged

Result: PASS / REVIEW / BLOCKED
```

冲突时先把确定安全的部分同步完,只把真正冲突留给人工(不问“要不要同步其他没冲突的”)。

## 旧能力:DSH 四层子流程(保留)

- **体检**:`python scripts\sync_skills.py --destination "$env:USERPROFILE\.dsh\skills" --plugins-destination "$env:USERPROFILE\.dsh\profiles\web\plugins" --dsh-config-dir dsh-config --mcp-cordis "$env:USERPROFILE\.dsh\profiles\web\cordis.patch.yml" --profile full --check`
- **上传(Push)**:仅显式 `push` 模式;每个 ahead commit 必须有 ownership receipt,再执行 `git diff --check` + `validate_repo --strict` + `quality_report --strict` + 仓库回归 + `publish_check.py` → `git push` → 四层体检确认。
- **更新(Pull)**:`git pull --ff-only` → 门禁 → 同体检命令 `--apply` → 逐层 `sync_dsh_config.py apply` → 重启 DSH 生效。
- **新设备复现(Install)**:RESTORE 流程(见 reference §14),幂等、可重复执行。

权威细节:`references/personal-ai-lifecycle-sync.md`、`docs/publishing.md`、`docs/sync-ongoing.md`。

## 验证

本 skill 变更后必须全绿:

```text
python scripts/validate_repo.py --strict
python skills/skill-quality-gate/scripts/quality_report.py --root . --strict
python -m unittest discover -s tests -v
python scripts/publish_check.py
```

同步执行后验收:`aic validate = VALID` + 已安装 Harness `aic diff = NO DRIFT` + personal_status 无新增异常。