@shgroup/opencode-serenity-plugin 0.3.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +98 -78
  2. package/dist/activation.d.ts.map +1 -1
  3. package/dist/activation.js +26 -1
  4. package/dist/activation.js.map +1 -1
  5. package/dist/config-schema.d.ts +2 -1
  6. package/dist/config-schema.d.ts.map +1 -1
  7. package/dist/config-schema.js +1 -0
  8. package/dist/config-schema.js.map +1 -1
  9. package/dist/git/cc-git-tool.d.ts +19 -0
  10. package/dist/git/cc-git-tool.d.ts.map +1 -0
  11. package/dist/git/cc-git-tool.js +170 -0
  12. package/dist/git/cc-git-tool.js.map +1 -0
  13. package/dist/git/index.d.ts +2 -0
  14. package/dist/git/index.d.ts.map +1 -0
  15. package/dist/git/index.js +2 -0
  16. package/dist/git/index.js.map +1 -0
  17. package/dist/hooks/compacting.d.ts.map +1 -1
  18. package/dist/hooks/compacting.js +38 -1
  19. package/dist/hooks/compacting.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +3 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/init/init-wizard.d.ts +19 -13
  25. package/dist/init/init-wizard.d.ts.map +1 -1
  26. package/dist/init/init-wizard.js +247 -123
  27. package/dist/init/init-wizard.js.map +1 -1
  28. package/dist/skills/template-loader.d.ts +3 -1
  29. package/dist/skills/template-loader.d.ts.map +1 -1
  30. package/dist/skills/template-loader.js +6 -5
  31. package/dist/skills/template-loader.js.map +1 -1
  32. package/dist/state.d.ts +2 -0
  33. package/dist/state.d.ts.map +1 -1
  34. package/dist/state.js +6 -0
  35. package/dist/state.js.map +1 -1
  36. package/dist/types/index.d.ts +4 -0
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/dist/types/index.js +2 -0
  39. package/dist/types/index.js.map +1 -1
  40. package/package.json +2 -2
package/README.md CHANGED
@@ -1,129 +1,149 @@
1
- # @shgroup/opencode-serenity-plugin
1
+ # Serenity(宁静号)
2
2
 
3
- > **Serenity(宁静号)** 为 OpenCode Agent 提供受控工作空间的插件。
3
+ > **给 AI 一个它不能逃逸、但可以自由思考的工作空间。**
4
4
  >
5
- > 安装后,Agent 自动获得安全文件操作、可审计命令执行、工作会话追踪等能力。
6
- > 所有这些能力被限定在一个有明确边界的"认知容器"内——根内自由,根外隔离。
5
+ > 不是安全沙箱,是认知容器。
7
6
 
8
7
  ---
9
8
 
10
- ## 这是什么
9
+ ## 你遇到的可能是同一个问题
11
10
 
12
- Serenity 是一个 [OpenCode](https://github.com/open-code-ai/opencode) 平台插件。它的核心资产是**认知容器**(Cognitive Container):
11
+ 你用 OpenCode + Claude / DeepSeek 写代码。它很聪明——但聪明也意味着危险。
13
12
 
14
- | 概念 | 是什么 | 怎么用 |
15
- |------|--------|--------|
16
- | 认知容器 | 一个 `.serenity` 标记的 git 目录。Agent 在该目录内拥有受控的工作权限。 | 每个项目创建一个。`home-serenity/` 是家庭管理用,`my-project-serenity/` 是开发用。 |
17
- | 本插件 | 认知容器的"蓝图"。定义了容器有什么能力、遵守什么约束。 | `npm install` + `install`,一次配置,所有容器共用。 |
13
+ 有一天你发现 Agent 改了你不该改的文件。或者它跑了 `rm -rf`。或者三周后你忘了它当时做了什么决策、改了哪些文件、为什么那样改。
18
14
 
19
- 类比:插件是操作系统,认知容器是用户目录——装一次 OS,在各个目录下工作。
15
+ 你开始犹豫:到底该给它多大权限?
20
16
 
21
- ### 为什么需要认知容器
17
+ Serenity 的回答:**不给权限——给它一个容器。**
22
18
 
23
- OpenCode Agent 原生的 `bash`、`read`、`edit`、`write` 可以访问整个文件系统。Serenity 加上一层边界:
19
+ ---
24
20
 
25
- | 无 Serenity | 有 Serenity |
26
- |-------------|------------|
27
- | Agent 可以读写任何路径 | 读写限制在容器根内(P3 权限二分) |
28
- | `bash` 执行不可审计 | `msm_exec` 执行可追踪、可审查 |
29
- | 没有工作记录 | 每次多步工作自动创建 SESSION |
30
- | 没有上下文持久化 | SKILL.md 自动注入 Agent 对话 |
21
+ ## 认知容器:不是牢笼,是工作室
31
22
 
32
- ---
23
+ 一个 Serenity 容器是一个 `.serenity` 标记的 git 目录。Agent 在这个目录内:
33
24
 
34
- ## 三个硬约束
25
+ | 在容器里,它可以 | 出了容器,什么都不能 |
26
+ |------------------|---------------------|
27
+ | 自由读写任何文件 | 读写被硬阻断(P3) |
28
+ | 注册和执行 MSM 工具 | 裸 `bash` 降级为高危后备(D19) |
29
+ | 创建会话、记录决策 | — |
30
+ | 加载技能、自动注入上下文 | — |
35
31
 
36
- 每个认知容器遵守三条原则,由插件自动执行:
32
+ 类比:你给一个木匠一把钥匙。这把钥匙只能打开**他的工作间**。工作间里有所有他需要的工具。出了门,钥匙失效。
37
33
 
38
- | # | 原则 | 含义 | 谁执行 |
39
- |---|------|------|--------|
40
- | P1 | **有根** | 容器有且仅有一个 `.serenity` 标记的根目录 | `cc-fs` 工具 |
41
- | P2 | **git 管** | 根目录必须在 git 管理下,所有变更可追溯 | 激活检查 + `msm_admin` 自动 commit |
42
- | P3 | **权限二分** | 根内完全读写,根外零权限 | `permission-guards` hook(RR5) |
34
+ 这不是限制——这是**专注**。
43
35
 
44
36
  ---
45
37
 
46
- ## 8 个工具
38
+ ## 为什么不是又一个安全工具
39
+
40
+ Serenity 的边界不止于"禁止写入外部路径"。它建立了一套**可成长的工作环境**:
41
+
42
+ ```
43
+ 你的项目/
44
+ ├── .serenity ← 容器标记:这里是边界
45
+ ├── AGENT_SESSIONS/ ← 每次多步工作自动生成 SESSION.md
46
+ ├── .opencode/skills/ ← 容器专属技能(自动加载到 Agent 对话)
47
+ │ └── mech-registry.json ← 容器专属工具注册表
48
+ └── (你的代码和文件) ← Agent 在此自由工作
49
+ ```
47
50
 
48
- 安装后 Agent 获得以下工具,替代裸 bash 和原生文件操作:
51
+ 每当你启动一次多步任务,Agent 自动创建会话记录——目标、决策、进度、产出物。两周后回头看,仍然知道当时发生了什么。
49
52
 
50
- | 工具 | 作用 |
51
- |------|------|
52
- | `msm_list` | 查看当前容器已注册的可执行操作(MSM)。**任何 shell 操作前先调这个。** |
53
- | `msm_exec` | 容器唯一标准执行路径。替代裸 bash。自动注入 `SERENITY_ROOT` / `SERENITY_CCC` / `SERENITY_VERSION` 到子进程。 |
54
- | `msm_admin` | 向容器注册新的 MSM。注册表变更自动 git commit。 |
55
- | `cc-fs` | 安全文件操作。12 个子命令:`root` / `resolve` / `exists` / `list` / `tree` / `relative` / `mkdir` / `rm` / `mv` / `cp` / `touch` / `append`。写操作限定在容器根内。 |
56
- | `session` | 工作会话全周期管理。`create` / `list` / `show` / `health` / `qa` / `archive` / `summary`。CCCs 应注册 `session-tool` MSM 包装 `session`。 |
57
- | `cc-ck` | 容器健康检查。验证 P1(`.serenity` 存在)、P2(git 仓库)、P3(`opencode.json` 配置完整)。 |
58
- | `eap` | EAP 认知质量框架 | 认知容器建立在 EAP 理论基础上——"思维的功能价值与其外部可重建性成正比"。提供完整的诊断方法论和实践指南 |
59
- | `neat` | Neat 设计协作协议 | EAP 的实践方法论——小步对齐、显式决策、文档驱动。设计/需求对齐时的结构化协作流程 |
53
+ 每当你需要一个新的可重复操作,注册一个 MSM——它变成可审计、可追踪、可复现的工具,而不是一段消失在 bash 历史里的命令。
54
+
55
+ **这是一个会随着你的使用而变强的环境。**
60
56
 
61
57
  ---
62
58
 
63
- ## 安装
59
+ ## 开箱即用:8 个内置工具
64
60
 
65
- ```bash
66
- # 前置:Node >= 20,OpenCode >= 1.16
67
- npm install @shgroup/opencode-serenity-plugin
68
- npx opencode-serenity-plugin install
69
- ```
61
+ 安装后 Agent 直接获得以下能力,不用写一行代码:
62
+
63
+ ### 核心三角
64
+
65
+ | 工具 | 回答什么问题 |
66
+ |------|-------------|
67
+ | `msm_list` | 当前容器有哪些可执行的操作? |
68
+ | `msm_exec` | 安全执行一个已注册的操作。替代裸 bash。 |
69
+ | `msm_admin` | 为容器注册新操作。自动 git commit。 |
70
+
71
+ ### 工作支撑
72
+
73
+ | 工具 | 回答什么问题 |
74
+ |------|-------------|
75
+ | `cc-fs` | 如何在容器内安全地操作文件?(12 个子命令:`root` `resolve` `exists` `list` `tree` `relative` `mkdir` `rm` `mv` `cp` `touch` `append`) |
76
+ | `session` | 多步工作的目标、决策、进度在哪? |
77
+ | `cc-ck` | 容器健康吗?P1 / P2 / P3 还正常吗? |
70
78
 
71
- `install` 写入两处配置:
79
+ ### 认知质量
72
80
 
73
- | 目标 | 路径 | 作用 |
74
- |------|------|------|
75
- | 项目级 | 当前目录 `opencode.json` | 注册 8 个工具 |
76
- | 全局级 | `~/.config/opencode/tui.json` | 注册 `/serenity-init` slash command |
81
+ | 工具 | 回答什么问题 |
82
+ |------|-------------|
83
+ | `eap` | 如何确保你的表达外部可重建?——完整 EAP 理论框架 |
84
+ | `neat` | 如何小步对齐、显式决策、文档驱动?——结构化协作方法论 |
85
+
86
+ 这不是"8 个独立功能"——这是一个**工作系统**。每个工具各司其职,互相引用。
77
87
 
78
88
  ---
79
89
 
80
- ## 创建认知容器
90
+ ## 开始
81
91
 
82
92
  ```bash
83
- # 1. 进入 git 管理的目录
84
- mkdir my-project && cd my-project && git init
85
-
86
- # 2. 在 OpenCode 中输入
87
- /serenity-init
93
+ npm install @shgroup/opencode-serenity-plugin
94
+ npx opencode-serenity-plugin install
88
95
  ```
89
96
 
90
- TUI 会询问容器前缀(如 `my-project`)和一句话描述。确认后自动创建:
97
+ 然后在任何 git 仓库中,输入 slash command:
91
98
 
92
99
  ```
93
- my-project-serenity/
94
- ├── .serenity ← 容器标记文件
95
- ├── AGENT_SESSIONS/ ← 工作会话记录
96
- ├── .opencode/skills/
97
- │ └── my-project-serenity/
98
- │ ├── SKILL.md ← 容器主入口文档
99
- │ └── references/
100
- │ └── mech-registry.json
100
+ /serenity-init
101
101
  ```
102
102
 
103
- 初始化后立即可用:
103
+ TUI 会问你容器名(如 `my-project`)和一句话描述。确认后自动创建容器骨架——即刻可用。
104
104
 
105
- ```
106
- msm_list # 查看已注册 MSM
107
- cc-ck # 验证容器健康状态
108
- session create --desc "my-first-task"
109
- cc-fs tree --path src/
105
+ ```bash
106
+ 同一个插件可以管理多个容器。家目录一个,工作项目一个,实验一个。
107
+ 每个容器独立,互不干扰。
110
108
  ```
111
109
 
112
110
  ---
113
111
 
114
- ## 概念模型(深入阅读)
112
+ ## 它为什么泛用
115
113
 
116
- 如果你关心"为什么这样设计",Serenity 的底层模型是 **ACC/CCC 分层**:
114
+ Serenity 不绑定任何领域。你说它是给什么的?
115
+
116
+ | 场景 | 容器就是 |
117
+ |------|---------|
118
+ | 管理家庭数字系统(服务器、网络、NAS) | 家庭运维中枢 |
119
+ | 开发一个软件项目 | 受控开发环境 |
120
+ | 做 AI 实验、跑模型、记录结果 | 可复现实验舱 |
121
+ | 写字幕、做翻译、处理媒体文件 | 内容工作台 |
122
+
123
+ 容器的**形状**取决于你注册什么 MSM、写什么 SKILL.md——Serenity 的**骨架**始终是一样的:边界 + 工具系统 + 会话记录 + 认知质量框架。
124
+
125
+ ---
126
+
127
+ ## 内在哲学:ACC/CCC 模型
128
+
129
+ 如果你关心"为什么这样设计",这里有一张图:
117
130
 
118
131
  ```
119
- ACC (Abstract Cognitive Container) → 本插件(持久源,定义"什么是容器")
120
- └── CCC (Concrete Cognitive Container) → 每个 `xxx-serenity/` 目录(可操作实例,可从 ACC 重建)
132
+ ACC (Abstract Cognitive Container) 本插件
133
+ 定义"认知容器应该有什么"
134
+ │ 8 个内置工具 + 6 个安全 hook + TUI
135
+
136
+ ├── CCC (Concrete Cognitive Container) home-serenity/
137
+ ├── CCC my-project-serenity/
138
+ └── CCC experiment-serenity/
121
139
  ```
122
140
 
123
- 关系:ACC 是蓝图,CCC 是建筑。修改插件(ACC) → build + install → 所有 CCC 自动获得新能力。
141
+ ACC 是蓝图,CCC 是建筑。修改蓝图,build + install,所有建筑自动获得新功能。
142
+
143
+ 这套模型的理论基础是 **EAP**(Explicit Abstraction Principle,显式抽象原则)——"思维的功能价值与其外部可重建性成正比"。Serenity 的每一个设计决策都从这句话推导而来。
124
144
 
125
- 日常使用时不需要这些术语——"Serenity" 或"认知容器"就够了。
145
+ 日常使用时不需要这些术语。记住"Serenity"就够了。
126
146
 
127
147
  ---
128
148
 
129
- **版本**: v0.2.2
149
+ > **版本**: v0.3.4  |  **许可**: MIT  |  **前置**: Node ≥ 20, OpenCode ≥ 1.16
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAyBrF"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQvD,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,GAAG,IAAI,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAyBrF"}
@@ -18,7 +18,8 @@
18
18
  import { findGitRoot } from './util/git.js';
19
19
  import { readSerenityFile } from './util/serenity-file.js';
20
20
  import { buildSkillPath, validateSkillExists } from './util/path.js';
21
- import { readFileSync } from 'node:fs';
21
+ import { readFileSync, existsSync } from 'node:fs';
22
+ import { join } from 'node:path';
22
23
  import { setState, markReady, markDisabled, getReadyMachine } from './state.js';
23
24
  import { log } from './util/log.js';
24
25
  import { checkSerenityConfig } from './util/init-check.js';
@@ -89,6 +90,28 @@ async function activateAsync(cwdRoot, getClient) {
89
90
  const detail = err instanceof Error ? err.message : String(err);
90
91
  log.warn('phase2', 'SKILL.md read failed; will skip system.transform injection', { detail, skillPath });
91
92
  }
93
+ // Phase 2 骨架检测 — SKILL.md 含骨架标记 → 需要 Agent 深度访谈
94
+ let needsPhase2 = false;
95
+ let phase2Prompt = null;
96
+ if (skillContent && skillContent.includes('<!-- Phase 2 Agent:')) {
97
+ const promptPath = join(cwdRoot, '.opencode', 'skills', cccName, 'scripts', 'generate-root-skill.prompt.md');
98
+ if (existsSync(promptPath)) {
99
+ try {
100
+ phase2Prompt = readFileSync(promptPath, 'utf8');
101
+ needsPhase2 = true;
102
+ log.info('phase2', 'skeleton detected — Phase 2 interview pending', { promptPath });
103
+ }
104
+ catch (err) {
105
+ log.warn('phase2', 'Phase 2 prompt read failed; skipping interview trigger', {
106
+ promptPath,
107
+ error: err instanceof Error ? err.message : String(err),
108
+ });
109
+ }
110
+ }
111
+ else {
112
+ log.warn('phase2', 'Phase 2 prompt file missing; skeleton detected but cannot trigger interview', { promptPath });
113
+ }
114
+ }
92
115
  // 成功 — 写 state + mark ready
93
116
  const state = Object.freeze({
94
117
  activated: true,
@@ -96,6 +119,8 @@ async function activateAsync(cwdRoot, getClient) {
96
119
  cccName,
97
120
  skillPath,
98
121
  skillContent,
122
+ needsPhase2,
123
+ phase2Prompt,
99
124
  });
100
125
  setState(state);
101
126
  markReady();
@@ -1 +1 @@
1
- {"version":3,"file":"activation.js","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activation.js","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ import { z, type ZodError } from 'zod';
30
30
  *
31
31
  * 维护规则:新增 hook 时先在此处加常量,再在 createXxxHooks 工厂里用。
32
32
  */
33
- export declare const HOOK_NAMES: readonly ["shell.env", "tool.execute.before", "tool.definition", "experimental.chat.system.transform", "experimental.session.compacting"];
33
+ export declare const HOOK_NAMES: readonly ["shell.env", "tool.execute.before", "tool.definition", "experimental.chat.system.transform", "experimental.chat.messages.transform", "experimental.session.compacting"];
34
34
  /** hook 名类型(HOOK_NAMES 元素的 union) */
35
35
  export type HookName = (typeof HOOK_NAMES)[number];
36
36
  /**
@@ -232,6 +232,7 @@ export type RegistryFile = z.infer<typeof registryFileSchema>;
232
232
  export declare const hookConfigSchema: z.ZodObject<{
233
233
  "tool.execute.before"?: z.ZodOptional<z.ZodBoolean> | undefined;
234
234
  "shell.env"?: z.ZodOptional<z.ZodBoolean> | undefined;
235
+ "experimental.chat.messages.transform"?: z.ZodOptional<z.ZodBoolean> | undefined;
235
236
  "experimental.chat.system.transform"?: z.ZodOptional<z.ZodBoolean> | undefined;
236
237
  "experimental.session.compacting"?: z.ZodOptional<z.ZodBoolean> | undefined;
237
238
  "tool.definition"?: z.ZodOptional<z.ZodBoolean> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvC;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,2IAMsB,CAAC;AAE9C,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAInD;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;mBAYzB,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsC1B,CAAC;AAEH,+CAA+C;AAC/C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,mBAAmB;AACnB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAOjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,gDAAgD;AAChD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB;;;;;;iBAMuD,CAAC;AAErF,eAAe;AACf,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAwB7B,CAAC;AAEH,eAAe;AACf,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAExD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAExC,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAE7E;AAID,6CAA6C;AAC7C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAEvF;AAED,qBAAqB;AACrB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAEzE;AAID,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAE3E"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGvC;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,mLAOsB,CAAC;AAE9C,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAInD;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;mBAYzB,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsC1B,CAAC;AAEH,+CAA+C;AAC/C,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,mBAAmB;AACnB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAOjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,gDAAgD;AAChD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB;;;;;;;iBAMuD,CAAC;AAErF,eAAe;AACf,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAwB7B,CAAC;AAEH,eAAe;AACf,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAExD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAExC,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAE7E;AAID,6CAA6C;AAC7C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAEvF;AAED,qBAAqB;AACrB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAEzE;AAID,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAE3E"}
@@ -35,6 +35,7 @@ export const HOOK_NAMES = [
35
35
  'tool.execute.before',
36
36
  'tool.definition',
37
37
  'experimental.chat.system.transform',
38
+ 'experimental.chat.messages.transform',
38
39
  'experimental.session.compacting',
39
40
  ];
40
41
  // ── MechEntry (msm.ts 内迁移) ──
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * cc-git-tool.ts — CCC git 管理工具(ACC 内置 tool)
3
+ *
4
+ * 提供无 bash 依赖的 git 操作,覆盖最频繁的无风险操作。
5
+ * pull/merge/rebase/conflict resolution 不 Mech 化 — Agent 协调 + bash 人工决策。
6
+ *
7
+ * 子命令:
8
+ * status — git status --porcelain(返回 JSON)
9
+ * commit — git add -A && git commit -m <msg>
10
+ * push — git push origin <current-branch>
11
+ * log — git log --oneline [-n <count>]
12
+ *
13
+ * 冲突约定(设计文档 §8.4):
14
+ * - push 被 non-fast-forward 拒绝时输出 [REJECTED] + 操作建议
15
+ * - push 成功时输出简洁摘要
16
+ */
17
+ import { type ToolDefinition } from '@opencode-ai/plugin';
18
+ export declare const ccGitTool: ToolDefinition;
19
+ //# sourceMappingURL=cc-git-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-git-tool.d.ts","sourceRoot":"","sources":["../../src/git/cc-git-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA6ChE,eAAO,MAAM,SAAS,EAAE,cAwItB,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * cc-git-tool.ts — CCC git 管理工具(ACC 内置 tool)
3
+ *
4
+ * 提供无 bash 依赖的 git 操作,覆盖最频繁的无风险操作。
5
+ * pull/merge/rebase/conflict resolution 不 Mech 化 — Agent 协调 + bash 人工决策。
6
+ *
7
+ * 子命令:
8
+ * status — git status --porcelain(返回 JSON)
9
+ * commit — git add -A && git commit -m <msg>
10
+ * push — git push origin <current-branch>
11
+ * log — git log --oneline [-n <count>]
12
+ *
13
+ * 冲突约定(设计文档 §8.4):
14
+ * - push 被 non-fast-forward 拒绝时输出 [REJECTED] + 操作建议
15
+ * - push 成功时输出简洁摘要
16
+ */
17
+ import { execFileSync } from 'node:child_process';
18
+ import { tool } from '@opencode-ai/plugin';
19
+ import { z } from 'zod';
20
+ import { findSerenityRoot } from '../fs/resolve-path.js';
21
+ import pkg from '../../package.json' with { type: 'json' };
22
+ const VERSION = pkg.version;
23
+ const SUBCOMMANDS = ['status', 'commit', 'push', 'log'];
24
+ // ── 内部 helper ──
25
+ function execGit(args, cwd) {
26
+ try {
27
+ const stdout = execFileSync('git', args, {
28
+ cwd,
29
+ encoding: 'utf8',
30
+ stdio: ['ignore', 'pipe', 'pipe'],
31
+ maxBuffer: 1024 * 1024, // 1MB
32
+ });
33
+ return { stdout: stdout.trimEnd(), stderr: '' };
34
+ }
35
+ catch (err) {
36
+ const stderr = err.stderr?.toString() || '';
37
+ const stdout = err.stdout?.toString() || '';
38
+ return { stdout: stdout.trimEnd(), stderr: stderr.trimEnd() };
39
+ }
40
+ }
41
+ function getCurrentBranch(root) {
42
+ const { stdout } = execGit(['rev-parse', '--abbrev-ref', 'HEAD'], root);
43
+ if (!stdout)
44
+ throw new Error('cc-git: cannot determine current branch');
45
+ return stdout;
46
+ }
47
+ function hasChanges(root) {
48
+ const { stdout } = execGit(['status', '--porcelain'], root);
49
+ return stdout.length > 0;
50
+ }
51
+ function hasRemote(root) {
52
+ const { stdout } = execGit(['remote'], root);
53
+ return stdout.length > 0;
54
+ }
55
+ // ── Tool 定义 ──
56
+ export const ccGitTool = tool({
57
+ description: `Serenity git utility (v${VERSION}). ` +
58
+ `Git operations for the CCC (Concrete Cognitive Container). ` +
59
+ `Subcommands: status (porcelain status), commit (git add -A + commit), push (push to origin), log (oneline history). ` +
60
+ `Use this for git operations when bash is not available. ` +
61
+ `Conflict resolution is NOT automated — use bash for merges and rebases.`,
62
+ args: {
63
+ subcommand: z
64
+ .enum(SUBCOMMANDS)
65
+ .describe('Operation: status (git status --porcelain), ' +
66
+ 'commit (git add -A + commit -m <msg>), ' +
67
+ 'push (git push origin HEAD), ' +
68
+ 'log (git log --oneline)'),
69
+ message: z
70
+ .string()
71
+ .optional()
72
+ .describe('Commit message (required for commit subcommand)'),
73
+ n: z
74
+ .number()
75
+ .int()
76
+ .min(1)
77
+ .max(100)
78
+ .optional()
79
+ .default(10)
80
+ .describe('Number of commits for log subcommand (default: 10, max: 100)'),
81
+ },
82
+ execute: async (input, ctx) => {
83
+ const root = findSerenityRoot(ctx.directory);
84
+ const sub = input.subcommand;
85
+ // ── status ──
86
+ if (sub === 'status') {
87
+ const { stdout } = execGit(['status', '--porcelain'], root);
88
+ // Parse porcelain output
89
+ const lines = stdout ? stdout.split('\n') : [];
90
+ const entries = lines.map((line) => {
91
+ // porcelain format: XY filename (X=staging, Y=worktree)
92
+ const status = line.slice(0, 2).trim() || '??';
93
+ const file = line.slice(3);
94
+ return { status, file };
95
+ });
96
+ return JSON.stringify({
97
+ clean: entries.length === 0,
98
+ files: entries,
99
+ summary: entries.length === 0 ? '(clean)' : `${entries.length} file(s) with changes`,
100
+ }, null, 2);
101
+ }
102
+ // ── commit ──
103
+ if (sub === 'commit') {
104
+ if (!input.message || input.message.trim() === '') {
105
+ throw new Error('cc-git commit: missing required arg "message"');
106
+ }
107
+ if (!hasChanges(root)) {
108
+ return '(nothing to commit — working tree clean)';
109
+ }
110
+ const addResult = execGit(['add', '-A'], root);
111
+ if (addResult.stderr) {
112
+ throw new Error(`cc-git commit: git add failed\n${addResult.stderr}`);
113
+ }
114
+ try {
115
+ const commitResult = execGit(['commit', '-m', input.message], root);
116
+ if (commitResult.stderr && commitResult.stderr.includes('nothing to commit')) {
117
+ return '(nothing to commit — working tree clean)';
118
+ }
119
+ // git commit outputs to stderr by convention; include both
120
+ const output = commitResult.stdout || commitResult.stderr || 'committed';
121
+ return output.trimEnd();
122
+ }
123
+ catch (err) {
124
+ const stderr = err.stderr?.toString() || err.message || '';
125
+ throw new Error(`cc-git commit: git commit failed\n${stderr}`);
126
+ }
127
+ }
128
+ // ── push ──
129
+ if (sub === 'push') {
130
+ if (!hasRemote(root)) {
131
+ throw new Error('cc-git push: no remote configured. Add one with:\n' +
132
+ ' git remote add origin <url>');
133
+ }
134
+ const branch = getCurrentBranch(root);
135
+ // Check if there are commits to push
136
+ try {
137
+ execGit(['fetch', 'origin', branch], root);
138
+ }
139
+ catch {
140
+ // fetch failure is not fatal — proceed with push
141
+ }
142
+ const { stdout, stderr } = execGit(['push', 'origin', branch], root);
143
+ // Success
144
+ if (!stderr || stderr.includes('->') || stderr === '') {
145
+ return stdout || `Pushed to origin/${branch}`;
146
+ }
147
+ // Non-fast-forward rejection
148
+ if (stderr.includes('non-fast-forward') || stderr.includes('rejected') || stderr.includes('[rejected]')) {
149
+ return `[REJECTED] Push to origin/${branch} was rejected (non-fast-forward).\n\n远程有新的提交,本地落后。操作建议:
150
+ 1. 先用 bash: git fetch origin ${branch}
151
+ 2. 查看远程变更: git log HEAD..origin/${branch}
152
+ 3. 合并或变基: git merge origin/${branch} 或 git rebase origin/${branch}
153
+ 4. 有冲突则手动解决后: git add ... && git commit
154
+ 5. 再次推送: cc-git push`;
155
+ }
156
+ // Other errors
157
+ throw new Error(`cc-git push failed:\n${stderr}`);
158
+ }
159
+ // ── log ──
160
+ if (sub === 'log') {
161
+ const n = input.n ?? 10;
162
+ const { stdout } = execGit(['log', '--oneline', `-n`, String(n)], root);
163
+ if (!stdout)
164
+ return '(no commits)';
165
+ return stdout;
166
+ }
167
+ throw new Error(`cc-git: unknown subcommand "${sub}"`);
168
+ },
169
+ });
170
+ //# sourceMappingURL=cc-git-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-git-tool.js","sourceRoot":"","sources":["../../src/git/cc-git-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ccGitTool } from './cc-git-tool.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ccGitTool } from './cc-git-tool.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compacting.d.ts","sourceRoot":"","sources":["../../src/hooks/compacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AA2I5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAsBzE"}
1
+ {"version":3,"file":"compacting.d.ts","sourceRoot":"","sources":["../../src/hooks/compacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAkL5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CA4BzE"}