@fanchao8609/agent_brain_sync 1.20.0 → 1.21.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.
- package/README.md +6 -0
- package/bin/abs.js +39 -0
- package/hooks/abs.omp.ts +2 -0
- package/hooks/abs.pi.ts +4 -5
- package/package.json +1 -1
- package/skill/abs-agent-brain-sync/SKILL.md +122 -98
- package/src/brain/capture.js +170 -0
- package/src/brain/db-cmd.js +244 -0
- package/src/brain/db.js +406 -0
- package/src/brain/gate.js +19 -0
- package/src/brain/init.js +135 -0
- package/src/brain/layers.js +112 -0
- package/src/brain/load.js +273 -0
- package/src/brain/maintain.js +199 -0
- package/src/brain/rules.js +98 -0
- package/src/brain/shape.js +102 -0
- package/src/brain/summon-cmd.js +62 -0
- package/src/brain/summon.js +236 -0
- package/src/note.js +15 -0
- package/src/store.js +36 -1104
- package/src/text.js +21 -1
- package/src/todo/spec.js +0 -2
- package/src/todo/task-cmd.js +274 -0
package/README.md
CHANGED
|
@@ -117,6 +117,12 @@ abs todo done TASK-1
|
|
|
117
117
|
abs note "一句话经验" --tags 坑,docker # 经验暂存 → sources/
|
|
118
118
|
abs log "完成 X" # 记一行流水;abs log 无参 = 查看
|
|
119
119
|
abs query <词> # 检索图谱(多词 OR);已被推翻的经验默认隐藏(--all 可看)
|
|
120
|
+
abs capture [--layer 1-7] "一句话" # 按七层判层后直接落到位(不传 = L4 认知)
|
|
121
|
+
abs db rebuild # 扫所有登记项目 → 建图数据库(~/.abs/graph.db)
|
|
122
|
+
abs db search <词> # 走库检索:FTS 拿种子 + 亮度扩散,L1 铁律恒在最前
|
|
123
|
+
abs db status # 库体检:七层分布 / 悬挂链接 / 已入库项目
|
|
124
|
+
abs db add # 把当前项目登记进 ~/.abs/projects.json
|
|
125
|
+
abs summon [--mark|--status] # 会话总结托底:列出未总结 / 有更新的会话(不写盘)
|
|
120
126
|
abs resolve <页名或id> # 反查页面路径(页改名后 id 不变)
|
|
121
127
|
abs supersede <页名> [--by <新页>] # 标记经验已失效(不删文件,保留历史;query 默认不再返回)
|
|
122
128
|
abs status # 当前项目 + 图谱概要
|
package/bin/abs.js
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
// abs <cmd> [args]
|
|
4
4
|
// 命令: init / board / status / load / task / install / uninstall / help
|
|
5
5
|
import { cmdInit, cmdStatus, cmdLoad, cmdTask, cmdLog, cmdQuery, cmdLint, cmdNote, cmdConcept, cmdShow, cmdRepair, cmdWrapup, cmdRule, cmdTeardownCheck, cmdTodoArchive, cmdResolve, cmdSupersede, cmdReview } from '../src/store.js';
|
|
6
|
+
import { cmdDbRebuild, cmdDbSearch, cmdDbStatus, addProject } from '../src/brain/db-cmd.js';
|
|
7
|
+
import { cmdCapture } from '../src/brain/capture.js';
|
|
8
|
+
import { cmdSummon } from '../src/brain/summon-cmd.js';
|
|
6
9
|
import { setUser, getUser, userConfigPath } from '../src/userconfig.js';
|
|
7
10
|
import { runInstall, runUninstall } from '../src/install.js';
|
|
8
11
|
import { readFileSync } from 'node:fs';
|
|
@@ -101,6 +104,13 @@ const FLAG_SPEC = {
|
|
|
101
104
|
'session': { type: 'string' },
|
|
102
105
|
'payload': { type: 'string' },
|
|
103
106
|
'tags': { type: 'string' },
|
|
107
|
+
// db search 用:最多返回几页(亮度排序后的截断)。未声明会被静默吞成 true。
|
|
108
|
+
'limit': { type: 'string' },
|
|
109
|
+
// capture 用:1-7 的层号。未声明会被静默吞成 true。
|
|
110
|
+
'layer': { type: 'string' },
|
|
111
|
+
// summon 用:布尔开关。未声明会被静默吞成 true(--mark 会变成真值即生效,但 --status 同理)。
|
|
112
|
+
'mark': { type: 'boolean' },
|
|
113
|
+
'status': { type: 'boolean' },
|
|
104
114
|
'port': { type: 'string' },
|
|
105
115
|
// note 的触发条件(何时该读这条经验)—— 供 load 的相关页推荐匹配。
|
|
106
116
|
'when': { type: 'string' },
|
|
@@ -198,6 +208,10 @@ function parseArgv(args) {
|
|
|
198
208
|
all: !!values.all,
|
|
199
209
|
payload: values.payload,
|
|
200
210
|
tags: values.tags,
|
|
211
|
+
limit: values.limit === undefined ? undefined : Number(values.limit),
|
|
212
|
+
layer: values.layer,
|
|
213
|
+
mark: !!values.mark,
|
|
214
|
+
status: !!values.status,
|
|
201
215
|
title: values.title,
|
|
202
216
|
desc: values.desc,
|
|
203
217
|
help: !!values.help,
|
|
@@ -231,8 +245,11 @@ const usage = `abs — 跨会话记忆工具(.brain/ 图谱)
|
|
|
231
245
|
todo 任务看板 (add/note/state/done/archive)
|
|
232
246
|
index | log | status 索引 / 流水 / 概要
|
|
233
247
|
note <经验> [--tags a,b] 经验暂存 → sources/
|
|
248
|
+
capture [--layer 1-7] "…" 按七层判定落点后直接写入 (不传=L4)
|
|
249
|
+
summon [--mark|--status] 会话总结托底: 列出未总结/有更新的会话 (不写盘)
|
|
234
250
|
concept <slug> --title … 建概念页骨架
|
|
235
251
|
query <词…> [--all] 检索知识页 (多词 OR)
|
|
252
|
+
db rebuild|search|status 图数据库: 建库 / 亮度搜索 / 体检
|
|
236
253
|
resolve <页名…> 反查页面路径
|
|
237
254
|
supersede <页名> [--by 页] 标经验已失效
|
|
238
255
|
review [--accept 页…|--reject 页…] 待确认页队列 (draft 升 active/否决)
|
|
@@ -512,6 +529,14 @@ async function main() {
|
|
|
512
529
|
console.log(await cmdTask({ dir: opts.dir, action, id, section: opts.section, note: opts.note, as: opts.as, session: opts.session }));
|
|
513
530
|
break;
|
|
514
531
|
}
|
|
532
|
+
case 'summon': {
|
|
533
|
+
console.log(await cmdSummon({ dir: opts.dir, mark: !!opts.mark, full: !!opts.full, status: !!opts.status, limit: Number(opts.limit) || 15 }));
|
|
534
|
+
break;
|
|
535
|
+
}
|
|
536
|
+
case 'capture': {
|
|
537
|
+
console.log(await cmdCapture({ dir: opts.dir, text: opts._.join(' '), layer: opts.layer, tags: opts.tags, title: opts.title }));
|
|
538
|
+
break;
|
|
539
|
+
}
|
|
515
540
|
case 'note': {
|
|
516
541
|
console.log(await cmdNote({ dir: opts.dir, text: opts._.join(' '), tags: opts.tags, when: opts.when, impact: opts.impact, type: opts.type }));
|
|
517
542
|
break;
|
|
@@ -550,6 +575,20 @@ async function main() {
|
|
|
550
575
|
console.log(await cmdRule({ dir: opts.dir, action: isAdd ? 'add' : 'list', text: rest3.join(' ') }));
|
|
551
576
|
break;
|
|
552
577
|
}
|
|
578
|
+
case 'db': {
|
|
579
|
+
const sub = opts._[0];
|
|
580
|
+
const rest = opts._.slice(1);
|
|
581
|
+
if (sub === 'rebuild') { console.log(await cmdDbRebuild({ dir: opts.dir })); break; }
|
|
582
|
+
if (sub === 'search') { console.log(await cmdDbSearch({ query: rest.join(' '), limit: Number(opts.limit) || 8 })); break; }
|
|
583
|
+
if (sub === 'status') { console.log(await cmdDbStatus()); break; }
|
|
584
|
+
if (sub === 'add') {
|
|
585
|
+
const r = await addProject(opts.dir || process.cwd());
|
|
586
|
+
console.log(`✓ 已登记项目: ${r}\n 建库: abs db rebuild`);
|
|
587
|
+
break;
|
|
588
|
+
}
|
|
589
|
+
console.log('用法: abs db rebuild | search <词> | status | add [--dir <项目根>]');
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
553
592
|
case 'query': {
|
|
554
593
|
console.log(await cmdQuery({ dir: opts.dir, terms: opts._, includeSuperseded: opts.all }));
|
|
555
594
|
break;
|
package/hooks/abs.omp.ts
CHANGED
|
@@ -193,6 +193,8 @@ const TODO_GUIDELINES = [
|
|
|
193
193
|
'Never mark a task "done" when tests are failing, the implementation is partial, or an error is unresolved — keep it in progress and add a task for the blocker instead.',
|
|
194
194
|
'Keep exactly one task in "进行中" at a time; when the user switches direction or drops a task, use action "state" with 搁置 (dropped/not doing it); 滞留中 for still-wanted-but-stuck; 讨论中 for still-open. If you finish one and another is ready, promote it explicitly.',
|
|
195
195
|
'When completing, pick the honest conclusion via the `as` field: 落地 (built and verified) / 否决 (decided against, or built then reverted) / 仅方案 (designed only). A wrong conclusion makes the next session treat "considered" as "completed".',
|
|
196
|
+
// 文档精简九条(用户 2026-10-22 定,原文见 skill 的「文档精简」一节):管每一行写进 .brain 的文字。
|
|
197
|
+
'Every line you write into .brain/ (todo rows, log rows, knowledge pages, session snapshots) must pass the nine-bullet doc-slimming rule in the abs skill: only what serves the topic (drop the rest), no unverified summaries, ordered and layered, plain declarative wording (no rhetorical questions, no guessing), no duplication (cite the other doc instead), terse prohibitions, nothing the user did not ask for, plain Chinese.',
|
|
196
198
|
]
|
|
197
199
|
|
|
198
200
|
/** 从 skill 里挑出的【硬规则】—— 只第一轮送, 与 load 同机会(同 pi 版方案 B)。 */
|
package/hooks/abs.pi.ts
CHANGED
|
@@ -228,6 +228,9 @@ const TODO_GUIDELINES = [
|
|
|
228
228
|
'Keep exactly one task in "进行中" at a time; when the user switches direction or drops a task, use action "state" with 搁置 (dropped/not doing it); 滞留中 for still-wanted-but-stuck; 讨论中 for still-open. If you finish one and another is ready, promote it explicitly.',
|
|
229
229
|
// ⑥ 结语要真实:三种结语各有含义,别一律写落地。
|
|
230
230
|
'When completing, pick the honest conclusion via the `as` field: 落地 (built and verified) / 否决 (decided against, or built then reverted) / 仅方案 (designed only). A wrong conclusion makes the next session treat "considered" as "completed".',
|
|
231
|
+
// ⑦ 文档精简九条(用户 2026-10-22 定,原文见 skill 的「文档精简」一节):
|
|
232
|
+
// 管每一行写进 .brain 的文字;与上面六条行为规则不重叠,故不合并。
|
|
233
|
+
'Every line you write into .brain/ (todo rows, log rows, knowledge pages, session snapshots) must pass the nine-bullet doc-slimming rule in the abs skill: only what serves the topic (drop the rest), no unverified summaries, ordered and layered, plain declarative wording (no rhetorical questions, no guessing), no duplication (cite the other doc instead), terse prohibitions, nothing the user did not ask for, plain Chinese.',
|
|
231
234
|
]
|
|
232
235
|
|
|
233
236
|
/** 当前项目是否有 .brain 图谱 —— 有才加指引(没图谱的项目里这指引是噪音)。
|
|
@@ -1158,11 +1161,7 @@ export default function absPiHook(pi: ExtensionAPI): void {
|
|
|
1158
1161
|
}
|
|
1159
1162
|
if (rulesOn) openingRulesLogged = true
|
|
1160
1163
|
}
|
|
1161
|
-
|
|
1162
|
-
// 真实环境里 agent_brain_sync 从未 load_delivered 却 still skip → 与「按 cwd 分」矛盾。
|
|
1163
|
-
// 靠这行区分:Set 空(→ 判断写错)vs Set 里已有该 cwd(→ 有东西提前加进去了)。
|
|
1164
|
-
// 定位并修好后删掉这行。
|
|
1165
|
-
logHook(`before_agent_start todo_guide=${ok ? 'on' : 'off'} load_guide=${loadState} opening_rules=${openingRulesLogged ? 'on' : 'skip'} seen=[${[...loadInjected].join(',')}] pending=[${loadPending}] cwd=${cwd}`).catch(() => {})
|
|
1164
|
+
logHook(`before_agent_start todo_guide=${ok ? 'on' : 'off'} load_guide=${loadState} opening_rules=${openingRulesLogged ? 'on' : 'skip'} cwd=${cwd}`).catch(() => {})
|
|
1166
1165
|
|
|
1167
1166
|
// 自动登记已整体移除(2026-10-05 用户实报两点):
|
|
1168
1167
|
// ① 卡顿 —— agent_end 每轮 spawn 一个 node 进程
|
package/package.json
CHANGED
|
@@ -5,179 +5,203 @@ description: "USE FOR abs / agent-brain-sync 跨会话记忆与任务续接。
|
|
|
5
5
|
|
|
6
6
|
# abs — 跨会话记忆 (agent-brain-sync)
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## 触发器
|
|
9
9
|
|
|
10
|
-
**关键词不是触发器,意图才是。**句子里出现
|
|
10
|
+
**关键词不是触发器,意图才是。**句子里出现 todo / 沉淀 / load / note 这些词,若是谈论、提问、定规则,只回应不执行。
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- 拿不准**先问**。规则变更("以后简短点")写入本文,不执行动作;输出简短(收尾/提示/todo 一两句)。
|
|
12
|
+
唯一例外:用户直接输入 `abs`(单独一个词,或 `abs` + 命令,如 `abs 开工`)—— 这是明确要用 abs,直接执行;无子命令时走开工续接。
|
|
15
13
|
|
|
16
14
|
## 命令速查
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
完整帮助 `abs help`。读写优先走 MCP(`abs_load`/`abs_task`/`abs_note`/`abs_query`/`abs_lint`/`abs_rule`),比 CLI 快;`abs wrapup`/`abs teardown-check` 是 hook 内部命令。分工:hook 记技术日志;CLI/MCP 实时落盘;skill 负责深提炼 + 收尾 + 修 index。
|
|
19
17
|
|
|
20
18
|
```bash
|
|
21
|
-
abs load #
|
|
22
|
-
abs
|
|
23
|
-
abs
|
|
24
|
-
abs
|
|
19
|
+
abs load # 开机读状态
|
|
20
|
+
abs query <词> # 检索;abs resolve <页名> 反查路径
|
|
21
|
+
abs todo add <id> --note "做什么" # 登记;note/memo/state/done 见「进行中」
|
|
22
|
+
abs capture [--layer 1-7] "…" # 按七层判定落点后直接写入(不传=L4)
|
|
23
|
+
abs note "经验" [--tags a,b] # 暂存经验(一律 L7 混沌层)
|
|
24
|
+
abs concept <slug> --title "…" # 建概念页骨架
|
|
25
|
+
abs rule add "一句话" # 加 Rules;abs lint 体检;abs init 建图谱
|
|
25
26
|
```
|
|
26
27
|
|
|
27
|
-
##
|
|
28
|
+
## 文档精简(硬规则,写 todo / 知识库文档必须遵守)
|
|
29
|
+
|
|
30
|
+
1. 所有内容必须服务于主题目标,与主题目标无关的直接去掉。
|
|
31
|
+
2. 不允许盲目总结,没有经过验证的经验和总结,直接去掉。
|
|
32
|
+
3. 文档永远保持秩序,提高可阅读性,层次分明。
|
|
33
|
+
4. 清爽的文字风格,禁止反转反问、猜测。
|
|
34
|
+
5. 加快运行速度,提高运行效率。
|
|
35
|
+
6. 拒绝重复,其他文档存在的方法优先引用,拒绝反反复复写。
|
|
36
|
+
7. 禁令内容不要唠叨,直接了当。
|
|
37
|
+
8. 不要过度揣测:用户没说的不要替他补,给了要求就做要求内的。
|
|
38
|
+
9. 说中文,说人话;表达通畅、有前因后果,不堆抽象名词、不自造新词。已经说过、已经确定的事不重复。
|
|
28
39
|
|
|
29
|
-
|
|
40
|
+
写入 `.brain/` 的 todo 行、log 行、知识页、sessions 快照,生成时按上面九条自检。
|
|
30
41
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
## 入口:先找图谱再分流
|
|
43
|
+
|
|
44
|
+
1. **找图谱**:只看**当前目录**是否含 `.brain/`,先 cd 到项目根。不向上搜索(会命中 `~/.brain`,把项目挂错)。
|
|
45
|
+
2. **没有图谱**:意图是沉淀或即将开工的长期任务("帮我做 X / 开工 / 修 X")→ 先 `abs init`;闲聊、一次性问句、明说不要建档、只读目录 → 不建档。
|
|
46
|
+
3. **分流**:
|
|
34
47
|
|
|
35
48
|
| 用户意图 | 走哪 |
|
|
36
49
|
|---|---|
|
|
37
|
-
| 总结经验 / 结束了 / "把这次记下来" |
|
|
38
|
-
| 查询坑 / "我上次怎么解决 X" | `abs query`
|
|
50
|
+
| 总结经验 / 结束了 / "把这次记下来" | 收尾循环 |
|
|
51
|
+
| 查询坑 / "我上次怎么解决 X" | `abs query` |
|
|
39
52
|
| 体检图谱 | `abs lint` |
|
|
40
|
-
| 开新任务 / 继续开发
|
|
41
|
-
| 报 bug / 要求加功能 |
|
|
42
|
-
| 意图不明
|
|
43
|
-
|
|
44
|
-
**主心骨**:意图不明且项目有 `.brain/` 时,默认**续 todo**。
|
|
53
|
+
| 开新任务 / 继续开发 | 开场 Init Sync |
|
|
54
|
+
| 报 bug / 要求加功能 | 受理协议 |
|
|
55
|
+
| 意图不明 | 续 todo |
|
|
45
56
|
|
|
46
|
-
|
|
57
|
+
意图不明且项目有 `.brain/` 时,默认续 todo。
|
|
47
58
|
|
|
48
|
-
|
|
59
|
+
## 新需求受理协议(先方案 → 再登记 → 问开工)
|
|
49
60
|
|
|
50
|
-
|
|
51
|
-
2. **登记 todo**:`abs todo add <id> --note "<需求+关键约束>"`;根因/取舍用 `abs todo note <id>` 追加到任务下当子项。
|
|
52
|
-
3. **问是否开工**:明确问一句,**等确认再改代码**。
|
|
61
|
+
用户报 bug 或要求加功能时先别动代码:
|
|
53
62
|
|
|
54
|
-
|
|
63
|
+
1. **总结方案**(一屏内):准确复述需求(不确定就写明假设);bug 给根因,功能给做法;要改哪些文件、怎么验证。
|
|
64
|
+
2. **登记 todo**:`abs todo add <id> --note "<需求+关键约束>"`;根因/取舍用 `abs todo note <id>` 追加成子项。
|
|
65
|
+
3. **问是否开工**:明确问一句,等确认再改代码。
|
|
55
66
|
|
|
56
|
-
|
|
67
|
+
**例外(可直接开工,回复里说明援引哪一条)**:用户已说"开工/直接做/修它";一行级修字、纯查询、纯收尾沉淀;同一需求已登记且用户确认过。
|
|
57
68
|
|
|
58
69
|
## `.brain/` 怎么组织
|
|
59
70
|
|
|
71
|
+
`.brain/` 放项目根,一个项目一份,`abs status` 显示当前定位。
|
|
72
|
+
|
|
60
73
|
| 位置 | 放什么 | 硬约束 |
|
|
61
74
|
|---|---|---|
|
|
62
|
-
| `index.md` | `## Rules` 铁律 + 各类页清单 | Rules
|
|
63
|
-
| `log.md` | 成果流水,倒序一行 |
|
|
64
|
-
| `todo.md` |
|
|
65
|
-
| `entities/` `concepts/` | 具名事物(`Docker.md`)/ 可复用规律坑(`docker-prisma-429.md`) |
|
|
66
|
-
| `sources/` `syntheses/` |
|
|
67
|
-
| `sessions/` | 会话快照 + 当日归档段 |
|
|
75
|
+
| `index.md` | `## Rules` 铁律 + 各类页清单 | Rules 一句一条不带链接,只有「违反会丢数据/静默失效/白干活」级才进,>42 字符或含链接被拒;清单每页一行 `- [[slug]] — 一句话` |
|
|
76
|
+
| `log.md` | 成果流水,倒序一行 | 只记成果,不记工具动作 |
|
|
77
|
+
| `todo.md` | 活看板 | 只有 `## Todo`/`## Done`;Done 必带 `【落地/否决/仅方案】`+`(完成 YYYY-MM-DD)` |
|
|
78
|
+
| `entities/` `concepts/` | 具名事物(`Docker.md`)/ 可复用规律坑(`docker-prisma-429.md`) | 拿不准默认进 `concepts/` |
|
|
79
|
+
| `sources/` `syntheses/` | 经验暂存 / 横向选型取舍 | sources 是暂存,提炼后删 |
|
|
80
|
+
| `sessions/` | 会话快照 + 当日归档段 | **一天只允许一个 `log-<日期>.md`**,多主题写多个 `##` 段 |
|
|
68
81
|
|
|
69
|
-
`todo.md` 行形态:`- [ ] [进行中] <id> [[认领人]] — 说明 (认领 YYYY-MM-DD)`(标记还有 `[讨论中]`/`[滞留中]`;`[[认领人]]`
|
|
82
|
+
`todo.md` 行形态:`- [ ] [进行中] <id> [[认领人]] — 说明 (认领 YYYY-MM-DD)`(标记还有 `[讨论中]`/`[滞留中]`;`[[认领人]]` 是使用者名)。`abs todo done <id>` 勾选并归位到 Done 日期组顶部,已勾子项随迁;超 3 天**且整天已完成**的组由 `abs wrapup` 迁进当天快照归档段(任一天还有未完成则整天不归档)。
|
|
70
83
|
|
|
71
|
-
`sessions/`
|
|
84
|
+
`sessions/` 快照 = 正文 + `## 关联连接` + `## 🪝 Next Session Hook`(强制)+ `## 📦 任务归档`(机器写勿手改)。归档唯一动作 `abs todo archive`:已有快照只替换归档段,段外逐字保留;那天没有快照就建一个只含归档段的页;同日重复归档在段内追加。
|
|
72
85
|
|
|
73
86
|
### 容量纪律(写任何页之前过四关)
|
|
74
87
|
|
|
75
|
-
|
|
88
|
+
① **再命中** —— 下会话不知道这条会踩同坑/重做同决定?不会就不存,grep 得到的不记。② **单页上限** —— `entities/concepts/syntheses` 单页 <150 行且 <8KB,超了拆或外链。③ **sources 是暂存** —— 提炼后删并清引用。④ 能用一行链接代替新增整页吗?
|
|
76
89
|
|
|
77
90
|
## 开场:Init Sync(开工 / 默认续 todo)
|
|
78
91
|
|
|
79
|
-
|
|
92
|
+
1. **读状态**:`abs load`(MCP `abs_load`)读 Rules + 图谱计数 + todo + 最近 log,**先看 `## Rules`**。输出已折叠,全量明细用 `abs todo --full` / `abs index`。
|
|
93
|
+
2. **对账滞留(强制)**:顶部出现 `⏳ 上会话滞留` 说明上会话断了,先收尾再开工 —— 做完的 `abs todo done <id>`;没做完的 `abs todo note <id> --note "接到哪"`。
|
|
94
|
+
3. **读命中页**:`abs query <词>` → `abs resolve <页名或id>` 拿路径,**只读命中那几页**,绝不通读 `.brain/`;多文件汇总交 `ctx_execute` 在沙箱处理,只打印结论。
|
|
95
|
+
4. **续 todo**:把顶部未完成项当当前任务开做;有新任务而 todo 没有 → `abs todo add <id> --note 做什么` 再动工。
|
|
96
|
+
|
|
97
|
+
## 按七层总结(总结前必读)
|
|
98
|
+
|
|
99
|
+
七层不是分类好看,是**检索权重不同**:L1 永不衰减,L7 几乎不参与。所以总结时必须先判层,判完直接落到位 —— 一律塞 sources/ 会让 44% 的知识按错误的权重参与检索。
|
|
80
100
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
101
|
+
| 层 | 判据 | 落点 | 怎么落 |
|
|
102
|
+
|---|---|---|---|
|
|
103
|
+
| L1 铁律 | 违反就必须停下 | index 的 `## Rules` | `abs capture --layer 1`(≤42 字、禁链接) |
|
|
104
|
+
| L2 规则 | 这个项目要遵守的做法 | `concepts/` + `layer: 2` | `abs capture --layer 2` |
|
|
105
|
+
| L3 工具 | 某工具怎么用、有什么坑 | `concepts/` + `layer: 3` | `abs capture --layer 3` |
|
|
106
|
+
| L4 认知 | 踩坑的根因与解法 | `concepts/` + `layer: 4` | `abs capture "…"`(默认) |
|
|
107
|
+
| L5 会话 | 这次做了什么 | `log.md` / `sessions/` | `abs log` / `abs todo done` |
|
|
108
|
+
| L6 断点 | 双链词 | 不立页,机器自动抽 | 不接手写 |
|
|
109
|
+
| L7 混沌 | 还没想清的碎片 | `sources/` | `abs capture --layer 7` |
|
|
110
|
+
|
|
111
|
+
判据不明时用 L4 —— 但**知道是工具经验就写 L3**:实测算过,本仓 52 页 concepts 里 23 页其实是 L3。
|
|
112
|
+
|
|
113
|
+
`abs capture` 之后跑 `abs db rebuild` 让图数据库收录,否则检索拿不到它。
|
|
85
114
|
|
|
86
115
|
## 进行中:什么时候动它
|
|
87
116
|
|
|
88
|
-
|
|
117
|
+
todo 是随改随写的活看板,和 git commit 同反射。
|
|
89
118
|
|
|
90
119
|
| 时机 | `abs_task` action | 落到哪 |
|
|
91
120
|
|---|---|---|
|
|
92
121
|
| 认领新任务 | `start` + note 做什么 | Todo `[进行中]` |
|
|
93
122
|
| 只讨论没动手 / 卡住等人等数据 | `state` + note 讨论中\|滞留中 | 原地改标记 |
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
| 子任务做完 | `done` + note 结语 + as 落地\|否决\|仅方案 | Done
|
|
97
|
-
| 总结出经验/坑/规律 |
|
|
123
|
+
| 被打断 / 干到一半 | `note` + 改到哪个文件哪一步 | 任务下追加一条子项(**一句话**) |
|
|
124
|
+
| 干活中随手记多句发现 | `memo` + 原文 | `sessions/` 当日笔记,**不上看板** |
|
|
125
|
+
| 子任务做完 | `done` + note 结语 + as 落地\|否决\|仅方案 | Done |
|
|
126
|
+
| 总结出经验/坑/规律 | `abs capture --layer N`(先按上表判层) | 按层落到位 |
|
|
127
|
+
|
|
128
|
+
**四个落点的区别**:
|
|
98
129
|
|
|
99
|
-
|
|
100
|
-
- `
|
|
101
|
-
- `
|
|
102
|
-
- `
|
|
103
|
-
- `abs log` = 一轮干完的**成果流水**行(带 kind),不上看板。
|
|
130
|
+
- `note` = **子项**,一句话**追加式**(每次多一条,不覆盖),上看板。
|
|
131
|
+
- `memo` = **随手记**,可多句**追加式**,不占看板。
|
|
132
|
+
- `abs_note` = 提炼过的**经验/坑**,一句话结论 → `sources/` 待提炼。
|
|
133
|
+
- `abs log` = 一轮干完的**成果流水**行,不占看板。
|
|
104
134
|
|
|
105
|
-
|
|
135
|
+
过程随手记走 `memo`,别塞 `todo.md`(Todo 区有**白名单闸门**:只收任务行、缩进子项、空行、标题,其余拒写报错)。
|
|
106
136
|
|
|
107
137
|
```bash
|
|
108
138
|
abs todo memo <id> "第一句:根因是判据极性。第二句:改成白名单就不漏了。" # 记(可多句)
|
|
109
|
-
abs todo memo <id>
|
|
139
|
+
abs todo memo <id> # 查看
|
|
110
140
|
```
|
|
111
|
-
任务 `done` 后笔记文件留在 `sessions/`(随当日归档)。
|
|
112
141
|
|
|
113
|
-
|
|
142
|
+
任务 `done` 后笔记文件留在 `sessions/`,随当日归档。
|
|
114
143
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
144
|
+
**开工前三条硬规则**:
|
|
145
|
+
|
|
146
|
+
1. **开工前先登记** —— 认领任何要动文件/跑命令的任务,第一步是 `abs_task` action=start,然后才读第一个文件。名字想不到就先起粗糙的(`fix-hook-nudge`):名字可事后改,**未登记的开工补不回来**。
|
|
147
|
+
- 登记只能由你主动做(hook 看不到"这是件什么事");别抄用户原话。
|
|
148
|
+
- 改 id:`abs todo rename <旧id> --note "<新id>"`。
|
|
149
|
+
2. **一段活儿干完立刻 done** —— 不等整个需求收尾。宁可拆 5 条小的,别攒 1 条大的。
|
|
119
150
|
3. **超过两三轮还没登记 = 已在失控路上** —— 立刻补 `start`。
|
|
120
151
|
|
|
121
|
-
|
|
122
|
-
**跨会话任务只用 abs todo,别用宿主原生 todo**(TodoWrite / todo-list / `/list`)—— 那些是会话内临时,不写 `.brain/todo.md`,下会话接不上。
|
|
152
|
+
经验刚冒出来就 `abs_note` 暂存(幂等去重),宁少勿滥。**跨会话任务只用 abs todo**,别用宿主原生 todo(TodoWrite / `/list`),那些不写 `.brain/todo.md`,下会话接不上。
|
|
123
153
|
|
|
124
154
|
## 收尾循环(用户明确要求收尾时才走)
|
|
125
155
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
4. **判教训够不够格进 Rules** → 是否「违反会丢数据/静默失效/白干活」级?够格就提议(Rules 是唯一每次 load 全量送达的通道,差这一步下次就不送达):
|
|
132
|
-
- **够格 → 提议,不直写**:输出一行 `[Rules 提议] <一句话>` 问用户要不要加,确认后才 `abs rule add "<一句话>"`(短句,不带链接/解释)。
|
|
133
|
-
- 不够格 → 不提,普通经验留在概念页。
|
|
134
|
-
5. **更新 index/log/todo** → 新页同步进 index;`abs log "完成 X:..."` 记一行成果;`abs lint` 确认自洽。
|
|
156
|
+
1. **读 todo**:`abs load`,看还有哪些没完成。
|
|
157
|
+
2. **对账**:按「进行中」四个落点补记 —— 漏登记的 `done`、做一半的补 `note` 子项、卡住的转 `滞留中`。
|
|
158
|
+
3. **沉淀经验**(值得才沉淀):坑/可复用技巧 → `abs note` 暂存;值得深提炼的走 Teardown。
|
|
159
|
+
4. **判教训够不够格进 Rules**:是否「违反会丢数据/静默失效/白干活」级?够格就输出一行 `[Rules 提议] <一句话>` 问用户,确认后才 `abs rule add "<一句话>"`;不够格不提。
|
|
160
|
+
5. **更新 index/log/todo**:新页同步进 index;`abs log "完成 X:..."`;`abs lint` 确认自洽。
|
|
135
161
|
|
|
136
|
-
**完成标准**:看板反映真实状态(Done
|
|
162
|
+
**完成标准**:看板反映真实状态(Done 无滞留半成品)、该沉淀已落、够格教训已提议、index/log/todo 与事实一致。
|
|
137
163
|
|
|
138
|
-
Stop 时 hook 把「未完成 + 子项」快照进 `~/.abs/log/wrapup.log`,下会话 `abs load`
|
|
164
|
+
Stop 时 hook 把「未完成 + 子项」快照进 `~/.abs/log/wrapup.log`,下会话 `abs load` 自动顶到顶部。不往对话里插收尾提醒。
|
|
139
165
|
|
|
140
|
-
## 收尾:Teardown Sync
|
|
166
|
+
## 收尾:Teardown Sync(深提炼)
|
|
141
167
|
|
|
142
|
-
|
|
168
|
+
把**真实发生**的写回图谱,只写做过/跑过/测过的事实。按序:
|
|
143
169
|
|
|
144
170
|
1. **暂存线索**:`abs note` 记做了什么、改了哪些文件、验证命令。
|
|
145
|
-
2. **抽规律**:`abs concept <slug> --title "…"`
|
|
146
|
-
3. **查推翻**:旧页有被推翻的说法 → `abs supersede <旧页> --by
|
|
147
|
-
4. **沉淀实体 / 综合**:重要未记录的事物 → `entities/<TitleCase>.md
|
|
171
|
+
2. **抽规律**:`abs concept <slug> --title "…"` 建页(自动带四段骨架)再填;四段别缺,尤其末尾「验证」段(`abs lint` 报 NO-TAIL)。留不留、新建还是并入由你判断;核实过的 `status` 改 `active`。
|
|
172
|
+
3. **查推翻**:旧页有被推翻的说法 → `abs supersede <旧页> --by <新页>`,别删页。
|
|
173
|
+
4. **沉淀实体 / 综合**:重要未记录的事物 → `entities/<TitleCase>.md`;选型取舍 → `syntheses/`。
|
|
148
174
|
5. **收拢 sources**:提炼成规律的删 source,**同步清指向它的引用**(防死链)。
|
|
149
|
-
6. **修 index + 记 log**:新页同步 index
|
|
150
|
-
7. **留接力棒**:`sessions/log-YYYY-MM-DD.md`
|
|
175
|
+
6. **修 index + 记 log**:新页同步 index;过门槛的规律加进 `## Rules`。
|
|
176
|
+
7. **留接力棒**:`sessions/log-YYYY-MM-DD.md` 写 `## 🪝 Next Session Hook`。
|
|
151
177
|
|
|
152
178
|
## 知识页格式
|
|
153
179
|
|
|
154
180
|
统一 frontmatter:`tags / author / updated / status`。`tags` 首标签 ∈ `entity|concept|source|synthesis|session-log`;`author` 与 `entities/<name>.md` 同名。
|
|
155
181
|
|
|
156
|
-
**`status`
|
|
182
|
+
**`status` 只有三个值**:`active` 当前有效(缺字段默认);`draft` 待核实(`abs note` 默认,展示标 `[draft 未核实]`);`superseded` 已被推翻,别再依据(`query` 默认隐藏)。推翻用 `abs supersede <页名> --by <新页>`(写 `superseded-by`;不写 `--by` = 单纯弃用;指向不存在的页会被拒)。历史必须留,核实后仍有效就改回 `active`。
|
|
157
183
|
|
|
158
|
-
- **每页必须有 `## 关联连接`**,用 `[[页面名]]`
|
|
159
|
-
- **命名即链接**:`[[Docker]]` → `entities/Docker.md
|
|
160
|
-
- **知识冲突**:不静默覆盖,加 `##
|
|
184
|
+
- **每页必须有 `## 关联连接`**,用 `[[页面名]]` 链相关页,解释写在 `—` 后(`[[x]] — 节流判据要对齐真收尾`),只写链点等于没链。
|
|
185
|
+
- **命名即链接**:`[[Docker]]` → `entities/Docker.md`,`[[docker-prisma-429]]` → `concepts/`。不建别名层。
|
|
186
|
+
- **知识冲突**:不静默覆盖,加 `## 知识冲突`,两版都留、标来源时间,交人工裁决。
|
|
161
187
|
- 概念页骨架:`触发场景 / ❌表现(贴报错) / 🛠解法(根因+修复+验证命令) / 关联连接`。
|
|
162
188
|
|
|
163
189
|
## 维护:query / lint
|
|
164
190
|
|
|
165
|
-
- `abs query <词>` → 读命中页 → 答用 `[[页面名]]`
|
|
166
|
-
- `abs lint`
|
|
191
|
+
- `abs query <词>` → 读命中页 → 答用 `[[页面名]]` 标来源。代码问题(符号在哪/谁调用)不在 `.brain`,直接读源码;已推翻经验默认不返回(`--all` 可看)。
|
|
192
|
+
- `abs lint` 报错码:`NO-INBOUND` / `SOURCE-UNDISTILLED` / `SUPERSEDED-DANGLING` / `DRAFT-STALE` / `NO-TAIL`。
|
|
167
193
|
|
|
168
194
|
## ⛔ 禁止做
|
|
169
195
|
|
|
170
|
-
1.
|
|
171
|
-
2.
|
|
172
|
-
3.
|
|
173
|
-
4.
|
|
174
|
-
5.
|
|
175
|
-
6.
|
|
176
|
-
7.
|
|
177
|
-
8.
|
|
196
|
+
1. 禁止手工建骨架 / 手工登记任务 —— 用 `abs init` / `abs todo add`。
|
|
197
|
+
2. 禁止由关键词直接触发动作 —— 拿不准先问。
|
|
198
|
+
3. 禁止通读 `.brain/` —— 要状态用 `abs load`,要主题用 `abs query`,要单页用 `abs resolve` 后只读那页。
|
|
199
|
+
4. 禁止删知识页表达"已失效" —— 用 `abs supersede`。
|
|
200
|
+
5. 禁止归档单独建文件 / 一天拆多个快照 / 手工搬大文件 —— 用 `abs todo archive`;一天只有一个 `log-<日期>.md`;大文件进 `sources/` 或摘规律进 `concepts/`。
|
|
201
|
+
6. 禁止编造没跑过的验证结论 —— 只写做过/跑过/测过的事实。
|
|
202
|
+
7. 禁止直写 Rules —— 先 `[Rules 提议]` 问用户,确认后才 `abs rule add`。
|
|
203
|
+
8. 禁止用宿主原生 todo 承载跨会话任务 —— 用 `abs_task`。
|
|
178
204
|
|
|
179
205
|
## 自我约束
|
|
180
206
|
|
|
181
|
-
|
|
182
|
-
- 双链/frontmatter/index 必须自洽 —— 坏链 = 掰断接力棒。
|
|
183
|
-
|
|
207
|
+
只读写 `.brain/` 与目标代码,不动全局配置(一次性接入除外);双链、frontmatter、index 必须自洽,坏链等于掰断接力棒。
|