mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-12 22:30:51 +08:00
清理综合模式中的 Wiki/记忆遗留逻辑并完善自治技能文档。
彻底移除 manager_memory 与 wiki 注入写入分支,收敛网关分发路径和测试用例,同时补齐并中文化 session-bootstrap / wiki-first-autonomy / self-improvement 的 Wiki-first 规范,保证行为与提示词一致。 Made-with: Cursor
This commit is contained in:
parent
8b8265eb46
commit
3122b8a16c
23 changed files with 948 additions and 1093 deletions
|
|
@ -1,22 +1,22 @@
|
|||
---
|
||||
name: self-improvement
|
||||
description: "Injects self-improvement reminder during agent bootstrap"
|
||||
description: "在智能体启动阶段注入自我改进提醒"
|
||||
metadata: {"oclaw":{"emoji":"🧠","events":["agent:bootstrap"]}}
|
||||
---
|
||||
|
||||
# Self-Improvement Hook
|
||||
# 自我改进 Hook
|
||||
|
||||
Injects a reminder to evaluate learnings during agent bootstrap.
|
||||
在 `agent:bootstrap` 阶段注入“学习沉淀提醒”。
|
||||
|
||||
## What It Does
|
||||
## 功能说明
|
||||
|
||||
- Fires on `agent:bootstrap` (before workspace files are injected)
|
||||
- Adds a reminder block to check `.learnings/` for relevant entries
|
||||
- Prompts the agent to log corrections, errors, and discoveries
|
||||
- 在 `agent:bootstrap` 触发(工作区文件注入前)
|
||||
- 注入提醒块,引导将学习写入 Wiki 路径
|
||||
- 提示智能体记录纠错、错误与新发现
|
||||
|
||||
## Configuration
|
||||
## 配置方式
|
||||
|
||||
No configuration needed. Enable with:
|
||||
无需额外配置,启用命令:
|
||||
|
||||
```bash
|
||||
oclaw hooks enable self-improvement
|
||||
|
|
|
|||
|
|
@ -1,38 +1,37 @@
|
|||
/**
|
||||
* Self-Improvement Hook for Oclaw
|
||||
*
|
||||
* Injects a reminder to evaluate learnings during agent bootstrap.
|
||||
* Fires on agent:bootstrap event before workspace files are injected.
|
||||
* Oclaw 自我改进 Hook
|
||||
*
|
||||
* 在 agent:bootstrap 阶段注入学习沉淀提醒。
|
||||
*/
|
||||
|
||||
const REMINDER_NAME = 'SELF_IMPROVEMENT_REMINDER.md';
|
||||
const REMINDER_PATH = REMINDER_NAME;
|
||||
|
||||
const REMINDER_CONTENT = `
|
||||
## Self-Improvement Reminder
|
||||
## 自我改进提醒
|
||||
|
||||
After completing tasks, evaluate whether any learnings should be captured.
|
||||
任务完成后,请评估是否产生可沉淀学习。
|
||||
|
||||
Only log if this repo or workspace is using the self-improvement skill.
|
||||
仅在当前仓库/工作区启用 self-improvement 技能时记录。
|
||||
|
||||
Before logging:
|
||||
- Create only missing \`.learnings/\` files; never overwrite existing content
|
||||
- Do not log secrets, tokens, private keys, environment variables, or raw transcripts
|
||||
- Prefer short summaries or redacted excerpts over full command output
|
||||
记录前:
|
||||
- 使用 memory_wiki_* 工具写入 \`improvement/\` 下的 Wiki 笔记
|
||||
- 不记录密钥、令牌、私钥、环境变量或原始对话全文
|
||||
- 优先使用简短摘要或脱敏片段,避免完整命令输出
|
||||
|
||||
**Log when:**
|
||||
- User corrects you → \`.learnings/LEARNINGS.md\`
|
||||
- Command/operation fails → \`.learnings/ERRORS.md\`
|
||||
- User wants missing capability → \`.learnings/FEATURE_REQUESTS.md\`
|
||||
- You discover your knowledge was wrong → \`.learnings/LEARNINGS.md\`
|
||||
- You find a better approach → \`.learnings/LEARNINGS.md\`
|
||||
**以下情况应记录:**
|
||||
- 用户纠正你 → \`improvement/learnings.md\`
|
||||
- 命令/操作失败 → \`improvement/errors.md\`
|
||||
- 用户提出缺失能力 → \`improvement/feature-requests.md\`
|
||||
- 发现认知错误 → \`improvement/learnings.md\`
|
||||
- 发现更优做法 → \`improvement/learnings.md\`
|
||||
|
||||
**Promote when pattern is proven:**
|
||||
- Behavioral patterns → \`SOUL.md\`
|
||||
- Workflow improvements → \`AGENTS.md\`
|
||||
- Tool gotchas → \`TOOLS.md\`
|
||||
**当模式被验证后进行提升:**
|
||||
- 行为模式 → \`SOUL.md\`
|
||||
- 工作流改进 → \`AGENTS.md\`
|
||||
- 工具易错点 → \`TOOLS.md\`
|
||||
|
||||
Keep entries simple: date, title, what happened, and what to do differently.
|
||||
条目保持简洁:时间、标题、发生了什么、后续应如何做。
|
||||
`.trim();
|
||||
|
||||
function isObject(value) {
|
||||
|
|
@ -51,30 +50,28 @@ function isInjectedReminderFile(value) {
|
|||
}
|
||||
|
||||
const handler = async (event) => {
|
||||
// Safety checks for event structure
|
||||
// 事件结构安全检查
|
||||
if (!event || typeof event !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Only handle agent:bootstrap events
|
||||
// 仅处理 agent:bootstrap 事件
|
||||
if (event.type !== 'agent' || event.action !== 'bootstrap') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Safety check for context
|
||||
// context 安全检查
|
||||
if (!event.context || typeof event.context !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip sub-agent sessions to avoid bootstrap issues
|
||||
// Sub-agents have sessionKey patterns like "agent:main:subagent:..."
|
||||
// 跳过子代理会话,避免引导污染
|
||||
const sessionKey = event.sessionKey || '';
|
||||
if (sessionKey.includes(':subagent:')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Inject the reminder as a virtual bootstrap file
|
||||
// Check that bootstrapFiles is an array before pushing
|
||||
// 以虚拟 bootstrap 文件注入提醒
|
||||
if (Array.isArray(event.context.bootstrapFiles)) {
|
||||
const occupiedByOtherFile = event.context.bootstrapFiles.some(
|
||||
(file) => isObject(file) && file.path === REMINDER_PATH && !isInjectedReminderFile(file),
|
||||
|
|
|
|||
|
|
@ -5,30 +5,30 @@ from typing import Any
|
|||
REMINDER_NAME = "SELF_IMPROVEMENT_REMINDER.md"
|
||||
REMINDER_PATH = REMINDER_NAME
|
||||
|
||||
REMINDER_CONTENT = """## Self-Improvement Reminder
|
||||
REMINDER_CONTENT = """## 自我改进提醒
|
||||
|
||||
After completing tasks, evaluate whether any learnings should be captured.
|
||||
任务完成后,请评估是否产生可沉淀学习。
|
||||
|
||||
Only log if this repo or workspace is using the self-improvement skill.
|
||||
仅在当前仓库/工作区启用 self-improvement 技能时记录。
|
||||
|
||||
Before logging:
|
||||
- Create only missing `.learnings/` files; never overwrite existing content
|
||||
- Do not log secrets, tokens, private keys, environment variables, or raw transcripts
|
||||
- Prefer short summaries or redacted excerpts over full command output
|
||||
记录前:
|
||||
- 使用 memory_wiki_* 工具写入 `improvement/` 下的 Wiki 笔记
|
||||
- 不记录密钥、令牌、私钥、环境变量或原始对话全文
|
||||
- 优先使用简短摘要或脱敏片段,避免完整命令输出
|
||||
|
||||
**Log when:**
|
||||
- User corrects you → `.learnings/LEARNINGS.md`
|
||||
- Command/operation fails → `.learnings/ERRORS.md`
|
||||
- User wants missing capability → `.learnings/FEATURE_REQUESTS.md`
|
||||
- You discover your knowledge was wrong → `.learnings/LEARNINGS.md`
|
||||
- You find a better approach → `.learnings/LEARNINGS.md`
|
||||
**以下情况应记录:**
|
||||
- 用户纠正你 → `improvement/learnings.md`
|
||||
- 命令/操作失败 → `improvement/errors.md`
|
||||
- 用户提出缺失能力 → `improvement/feature-requests.md`
|
||||
- 发现认知错误 → `improvement/learnings.md`
|
||||
- 发现更优做法 → `improvement/learnings.md`
|
||||
|
||||
**Promote when pattern is proven:**
|
||||
- Behavioral patterns → `SOUL.md`
|
||||
- Workflow improvements → `AGENTS.md`
|
||||
- Tool gotchas → `TOOLS.md`
|
||||
**当模式被验证后进行提升:**
|
||||
- 行为模式 → `SOUL.md`
|
||||
- 工作流改进 → `AGENTS.md`
|
||||
- 工具易错点 → `TOOLS.md`
|
||||
|
||||
Keep entries simple: date, title, what happened, and what to do differently."""
|
||||
条目保持简洁:时间、标题、发生了什么、后续应如何做。"""
|
||||
|
||||
|
||||
def _is_record(value: object) -> bool:
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
/**
|
||||
* Self-Improvement Hook for Oclaw
|
||||
*
|
||||
* Injects a reminder to evaluate learnings during agent bootstrap.
|
||||
* Fires on agent:bootstrap event before workspace files are injected.
|
||||
* Oclaw 自我改进 Hook
|
||||
*
|
||||
* 在 agent:bootstrap 阶段注入学习沉淀提醒。
|
||||
*/
|
||||
|
||||
import type { HookHandler } from 'oclaw/hooks';
|
||||
|
|
@ -10,30 +9,30 @@ import type { HookHandler } from 'oclaw/hooks';
|
|||
const REMINDER_NAME = 'SELF_IMPROVEMENT_REMINDER.md';
|
||||
const REMINDER_PATH = REMINDER_NAME;
|
||||
|
||||
const REMINDER_CONTENT = `## Self-Improvement Reminder
|
||||
const REMINDER_CONTENT = `## 自我改进提醒
|
||||
|
||||
After completing tasks, evaluate whether any learnings should be captured.
|
||||
任务完成后,请评估是否产生可沉淀学习。
|
||||
|
||||
Only log if this repo or workspace is using the self-improvement skill.
|
||||
仅在当前仓库/工作区启用 self-improvement 技能时记录。
|
||||
|
||||
Before logging:
|
||||
- Create only missing \`.learnings/\` files; never overwrite existing content
|
||||
- Do not log secrets, tokens, private keys, environment variables, or raw transcripts
|
||||
- Prefer short summaries or redacted excerpts over full command output
|
||||
记录前:
|
||||
- 使用 memory_wiki_* 工具写入 \`improvement/\` 下的 Wiki 笔记
|
||||
- 不记录密钥、令牌、私钥、环境变量或原始对话全文
|
||||
- 优先使用简短摘要或脱敏片段,避免完整命令输出
|
||||
|
||||
**Log when:**
|
||||
- User corrects you → \`.learnings/LEARNINGS.md\`
|
||||
- Command/operation fails → \`.learnings/ERRORS.md\`
|
||||
- User wants missing capability → \`.learnings/FEATURE_REQUESTS.md\`
|
||||
- You discover your knowledge was wrong → \`.learnings/LEARNINGS.md\`
|
||||
- You find a better approach → \`.learnings/LEARNINGS.md\`
|
||||
**以下情况应记录:**
|
||||
- 用户纠正你 → \`improvement/learnings.md\`
|
||||
- 命令/操作失败 → \`improvement/errors.md\`
|
||||
- 用户提出缺失能力 → \`improvement/feature-requests.md\`
|
||||
- 发现认知错误 → \`improvement/learnings.md\`
|
||||
- 发现更优做法 → \`improvement/learnings.md\`
|
||||
|
||||
**Promote when pattern is proven:**
|
||||
- Behavioral patterns → \`SOUL.md\`
|
||||
- Workflow improvements → \`AGENTS.md\`
|
||||
- Tool gotchas → \`TOOLS.md\`
|
||||
**当模式被验证后进行提升:**
|
||||
- 行为模式 → \`SOUL.md\`
|
||||
- 工作流改进 → \`AGENTS.md\`
|
||||
- 工具易错点 → \`TOOLS.md\`
|
||||
|
||||
Keep entries simple: date, title, what happened, and what to do differently.`;
|
||||
条目保持简洁:时间、标题、发生了什么、后续应如何做。`;
|
||||
|
||||
function isObject(value: unknown): value is Record<string, unknown> {
|
||||
return !!value && typeof value === 'object';
|
||||
|
|
@ -51,30 +50,28 @@ function isInjectedReminderFile(value: unknown): boolean {
|
|||
}
|
||||
|
||||
const handler: HookHandler = async (event) => {
|
||||
// Safety checks for event structure
|
||||
// 事件结构安全检查
|
||||
if (!event || typeof event !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Only handle agent:bootstrap events
|
||||
// 仅处理 agent:bootstrap 事件
|
||||
if (event.type !== 'agent' || event.action !== 'bootstrap') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Safety check for context
|
||||
// context 安全检查
|
||||
if (!event.context || typeof event.context !== 'object') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip sub-agent sessions to avoid bootstrap issues
|
||||
// Sub-agents have sessionKey patterns like "agent:main:subagent:..."
|
||||
// 跳过子代理会话,避免引导污染
|
||||
const sessionKey = event.sessionKey || '';
|
||||
if (sessionKey.includes(':subagent:')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Inject the reminder as a virtual bootstrap file
|
||||
// Check that bootstrapFiles is an array before pushing
|
||||
// 以虚拟 bootstrap 文件注入提醒
|
||||
if (Array.isArray(event.context.bootstrapFiles)) {
|
||||
const occupiedByOtherFile = event.context.bootstrapFiles.some(
|
||||
(file) => isObject(file) && file.path === REMINDER_PATH && !isInjectedReminderFile(file),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue