@fanchao8609/agent_brain_sync 1.28.6 → 1.29.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/bin/abs.js +8 -41
- package/hooks/abs-rounded-editor/format.ts +77 -22
- package/hooks/abs-rounded-editor/index.ts +14 -19
- package/hooks/abs.omp.ts +1 -2
- package/hooks/abs.pi.ts +50 -51
- package/package.json +1 -1
- package/skill/abs-agent-brain-sync/SKILL.md +68 -68
- package/src/brain/ingest.js +132 -54
- package/src/brain/layers.js +11 -5
- package/src/brain/load.js +50 -65
- package/src/brain/maintain.js +15 -2
- package/src/brain/summon.js +25 -16
- package/src/lint.js +82 -14
- package/src/note.js +7 -0
- package/src/store.js +1 -1
- package/src/text.js +42 -11
- package/src/todo/archive.js +22 -1
- package/src/todo/spec.js +6 -0
- package/src/todo/task-cmd.js +18 -0
- package/src/todo.js +1 -1
package/src/todo/task-cmd.js
CHANGED
|
@@ -33,6 +33,15 @@ export async function cmdTask({ dir, action, id, section, note, as, session, n }
|
|
|
33
33
|
const claim = `(认领 ${today()}${sid ? ' ' + sid : ''})`;
|
|
34
34
|
await ensurePersonPage(root, who); // 首次写操作即建人页(已存在不动)
|
|
35
35
|
if (action === 'start') {
|
|
36
|
+
// 格式闸(2026-11-08 用户定:不符合直接打回):只有 id 的看板行查不到、接不上。
|
|
37
|
+
// 实测:slim-skill-load-cmd 只登记了 id,面板上一行代号,隔天自己都不认识。
|
|
38
|
+
if (!String(note || '').trim()) {
|
|
39
|
+
throw new Error(
|
|
40
|
+
`✗ 任务必须有描述 —— 只有 id 的行查不到、接不上,打回。\n` +
|
|
41
|
+
` 用法: abs todo start <id> --note "一句话:做什么"\n` +
|
|
42
|
+
` 格式: 动词开头、一句话、≤40 字;进度用 abs todo note 逐条加,别塞进标题。`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
36
45
|
// 两区制:未完成一律进 Todo,行首带状态标记(默认 进行中)。
|
|
37
46
|
const st = section && TASK_STATES.includes(section) ? section : '进行中';
|
|
38
47
|
// 唯一进行中约束(2026-10-05 照 rpiv-todo):看板要能回答"现在在做什么",
|
|
@@ -205,6 +214,15 @@ export async function cmdTask({ dir, action, id, section, note, as, session, n }
|
|
|
205
214
|
if (as && !DONE_KINDS.includes(as)) {
|
|
206
215
|
throw new Error(`✗ --as 只接受: ${DONE_KINDS.join(' | ')}(收到 "${as}")`);
|
|
207
216
|
}
|
|
217
|
+
// 格式闸(2026-11-08 用户定):done 必须带结语,否则 Done 区只剩一个勾和 id,
|
|
218
|
+
// 下个会话不知道“做成了什么”。打回,让人把结论写完。
|
|
219
|
+
if (!String(note || '').trim() && !as) {
|
|
220
|
+
throw new Error(
|
|
221
|
+
`✗ done 必须带结语 —— 打回。只有勾没有结论的 Done 不可信。\n` +
|
|
222
|
+
` 用法: abs todo done <id> --as 落地|否决|仅方案 "一句话结论"\n` +
|
|
223
|
+
` 例: abs todo done <id> --as 落地 "821 测试全绿,已装到 ~/.pi"`,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
208
226
|
// 结语 = note(MCP 路径)或位置参数(CLI 路径)。坑(2026-09-16 实测):
|
|
209
227
|
// MCP abs_task schema 无 as,AI 按旧 SKILL.md 传 note 会被静默丢弃、行上默认盖【落地】
|
|
210
228
|
// —— 状态失真且无声。现在 note 也当结语;note 里自带【落地/否决/仅方案】时它就是 kind。
|
package/src/todo.js
CHANGED
|
@@ -6,6 +6,6 @@ export { TODO_MAX_LINES, LOG_MAX_LINES, INDEX_MAX_LINES, today, localStamp, SEC,
|
|
|
6
6
|
export { LEGACY_SECTION_RENAMES, TODO_SECTIONS, TODO_SUBSECTIONS, isAllowedTodoSub, INDEX_SECTIONS, INDEX_LINK_SECTIONS, LOG_KINDS, H1_TO_FILE, ENTRY_SHAPES, TASK_STATES, RETIRED_SECTIONS, BREAKPOINT_MAX, TASK_LINE_MAX, DONE_KINDS, ARCHIVE_SECTION } from './todo/spec.js';
|
|
7
7
|
export { todoTemplate, rebuildStructure, dropRetiredSections, enforceBrainFormat, normalizeTodo, ensureStateMark, stateOfTaskLine, stripStateMark, checkTaskBox } from './todo/structure.js';
|
|
8
8
|
export { checkFileShape, violationSignatures, assertNoStrayBlank, assertTodoContent } from './todo/validate.js';
|
|
9
|
-
export { doneDateOf, doneKindOf, withDoneKind, collapseDone, archiveDoneInText, renderArchiveBody, upsertArchiveSection, groupDoneSection, insertDoneGrouped } from './todo/archive.js';
|
|
9
|
+
export { doneDateOf, doneKindOf, withDoneKind, collapseDone, archiveDoneInText, renderArchiveBody, upsertArchiveSection, groupDoneSection, insertDoneGrouped, archiveBrief } from './todo/archive.js';
|
|
10
10
|
export { readTodo, ensureTodo, setStateMark, addTask, upsertTask, idOfTaskLine, findTaskLine, setBreakpoint, setBreakpointDone, setMemo, readMemo, boardText } from './todo/tasks.js';
|
|
11
11
|
export { migrateLegacyChild, isTaskLine, isChildLine, CHILD_INDENT } from './todo/common.js';
|