diff --git a/.codex/skills/gourmet-organizer/SKILL.md b/.codex/skills/gourmet-organizer/SKILL.md index 9a0c3bf1..d1ec9852 100644 --- a/.codex/skills/gourmet-organizer/SKILL.md +++ b/.codex/skills/gourmet-organizer/SKILL.md @@ -17,7 +17,7 @@ Use this skill when the user: ### 1. Find the right landing spot -1. Run `python3 Notes/snippets/markdown_toc.py Notes/Gourmet.md` to see the file structure. +1. Run `python3 snippets/markdown_toc.py Notes/Gourmet.md` to see the file structure. 2. Search for the restaurant and nearby cuisine sections with `rg -n "||" Notes/Gourmet.md`. 3. Prefer updating an existing restaurant section. 4. If the restaurant already exists, preserve prior visits and split the notes by visit, date, or menu type rather than blending everything together. diff --git a/.trae/documents/Codex-TODO-System-v2.md b/.trae/documents/Codex-TODO-System-v2.md index 513363df..50177c26 100644 --- a/.trae/documents/Codex-TODO-System-v2.md +++ b/.trae/documents/Codex-TODO-System-v2.md @@ -102,7 +102,7 @@ 空队列时按这个顺序找下一批: 1. **复盘近期 completed TODO**:优先看最近 3-5 条完成项,判断是否需要沉淀到 AGENTS.md、skill、脚本、oncall 文档或材料流程。 -2. **优化本仓库工作系统**:检查 `.trae/`、`Notes/snippets/`、`.codex/skills/`、`.openclaw-memory/`、`.local` 索引和近期笔记结构,找能降低后续摩擦的小改动。 +2. **优化本仓库工作系统**:检查 `.trae/`、`snippets/`、`.codex/skills/`、`.openclaw-memory/`、`.local` 索引和近期笔记结构,找能降低后续摩擦的小改动。 3. **只优化素材探索机制,不默认消费材料**:可以改进 trusted sources、读取工具、候选库治理、Unread/fallback 规则;不要把 `.local/LEARNING_MATERIAL_CANDIDATES.md` 当前阅读队列里的具体材料默认转成私有卡片。 4. **只新增明确小切口**:新 TODO 必须有可验证产物,例如 schema、脚本、文档、转发稿、实验设计或笔记落点;不要新增“继续优化系统”这类空任务。 5. **允许明确报告队列为空**:如果没有真实小切口,应直接告诉用户当前 TODO 队列为空,并给出最小触发条件,例如“读完某材料后再触发 `读完`”或“agent-harness 有新回复后再推进”。 @@ -111,15 +111,15 @@ ## 当前保留的工具 -- `Notes/snippets/codex_todo_triage.py`:生成 Codex 视角的 TODO triage index,并可写入 `codex_triage` 元数据。 - - `python3 Notes/snippets/codex_todo_triage.py`:刷新 `.local/CODEX_TODO_TRIAGE_INDEX.md`。 - - `python3 Notes/snippets/codex_todo_triage.py --user-actions`:只打印当前 pending 阻塞任务的用户动作队列。 - - `python3 Notes/snippets/codex_todo_triage.py --next-action`:只打印当前最推荐的一个用户动作,并附带轻量 blocker 检查结果。 - - `python3 Notes/snippets/codex_todo_triage.py --batch-plan`:输出下一轮 `推进TODO` 的推荐批次;如果没有 Codex-owned active TODO,即使仍有 user-blocked 项,也优先建议流程沉淀、机制优化、效率优化、素材探索能力、笔记重构、脚本/skill 改进和索引治理,不默认消费具体材料队列。 - - `python3 Notes/snippets/codex_todo_triage.py --check-blockers`:对已知阻塞项做轻量本机检查,例如 `gh auth status`、`trae` CLI、`ssh`、搜索脚本是否可用。 +- `snippets/codex_todo_triage.py`:生成 Codex 视角的 TODO triage index,并可写入 `codex_triage` 元数据。 + - `python3 snippets/codex_todo_triage.py`:刷新 `.local/CODEX_TODO_TRIAGE_INDEX.md`。 + - `python3 snippets/codex_todo_triage.py --user-actions`:只打印当前 pending 阻塞任务的用户动作队列。 + - `python3 snippets/codex_todo_triage.py --next-action`:只打印当前最推荐的一个用户动作,并附带轻量 blocker 检查结果。 + - `python3 snippets/codex_todo_triage.py --batch-plan`:输出下一轮 `推进TODO` 的推荐批次;如果没有 Codex-owned active TODO,即使仍有 user-blocked 项,也优先建议流程沉淀、机制优化、效率优化、素材探索能力、笔记重构、脚本/skill 改进和索引治理,不默认消费具体材料队列。 + - `python3 snippets/codex_todo_triage.py --check-blockers`:对已知阻塞项做轻量本机检查,例如 `gh auth status`、`trae` CLI、`ssh`、搜索脚本是否可用。 - `.local/CODEX_TODO_TRIAGE_INDEX.md`:本地私有索引,不提交、不公开。 - `.trae/documents/Codex-TODO-User-Action-Queue.md`:剩余 user-blocked TODO 的用户动作队列,把每个阻塞任务压缩成一个命令、一个问题或一个明确选择。 -- `Notes/snippets/generate-ai-hotspots-daily.sh` 等 launchd 脚本:作为“可落地自动化任务”的示例。 +- `snippets/generate-ai-hotspots-daily.sh` 等 launchd 脚本:作为“可落地自动化任务”的示例。 ## 暂不推进 diff --git a/.trae/documents/Codex-TODO-Web-Manager-v2.md b/.trae/documents/Codex-TODO-Web-Manager-v2.md index 88eef78b..f7581597 100644 --- a/.trae/documents/Codex-TODO-Web-Manager-v2.md +++ b/.trae/documents/Codex-TODO-Web-Manager-v2.md @@ -27,9 +27,9 @@ 首页只展示四块: - TODO 总览:pending / completed / feedback_required 数量。 -- Next Action:复用 `python3 Notes/snippets/codex_todo_triage.py --next-action`。 -- User Action Queue:复用 `python3 Notes/snippets/codex_todo_triage.py --user-actions`。 -- Blocker Checks:复用 `python3 Notes/snippets/codex_todo_triage.py --check-blockers`。 +- Next Action:复用 `python3 snippets/codex_todo_triage.py --next-action`。 +- User Action Queue:复用 `python3 snippets/codex_todo_triage.py --user-actions`。 +- Blocker Checks:复用 `python3 snippets/codex_todo_triage.py --check-blockers`。 这比完整 CRUD 更符合当前合作模式:Codex 先判断,再推进一个真实小切口。 @@ -71,9 +71,9 @@ GET /api/codex/check-blockers 实现方式优先调用或复用: ```bash -python3 Notes/snippets/codex_todo_triage.py --next-action -python3 Notes/snippets/codex_todo_triage.py --user-actions -python3 Notes/snippets/codex_todo_triage.py --check-blockers +python3 snippets/codex_todo_triage.py --next-action +python3 snippets/codex_todo_triage.py --user-actions +python3 snippets/codex_todo_triage.py --check-blockers ``` 返回 JSON 时可以先用简单结构: diff --git a/.trae/documents/GitHub-Agent-Memory-Research-Seeds.md b/.trae/documents/GitHub-Agent-Memory-Research-Seeds.md index 0b8b4d97..df9a1e42 100644 --- a/.trae/documents/GitHub-Agent-Memory-Research-Seeds.md +++ b/.trae/documents/GitHub-Agent-Memory-Research-Seeds.md @@ -7,13 +7,13 @@ 已完成: ```bash -Notes/snippets/github-search.sh status -Notes/snippets/github-search.sh repos "agent memory llm" 3 -Notes/snippets/github-search.sh repos "llm agent" 3 -Notes/snippets/github-search.sh repos "agent memory eval" 10 -Notes/snippets/github-search.sh issues "memory" openai/codex 3 -Notes/snippets/github-search.sh issues "memory" mem0ai/mem0 5 -Notes/snippets/github-search.sh issues "memory" langchain-ai/langgraph 5 +snippets/github-search.sh status +snippets/github-search.sh repos "agent memory llm" 3 +snippets/github-search.sh repos "llm agent" 3 +snippets/github-search.sh repos "agent memory eval" 10 +snippets/github-search.sh issues "memory" openai/codex 3 +snippets/github-search.sh issues "memory" mem0ai/mem0 5 +snippets/github-search.sh issues "memory" langchain-ai/langgraph 5 ``` 结论: diff --git a/.trae/documents/GitHub-Search-GH-Setup.md b/.trae/documents/GitHub-Search-GH-Setup.md index 63238fe3..d3fa43ce 100644 --- a/.trae/documents/GitHub-Search-GH-Setup.md +++ b/.trae/documents/GitHub-Search-GH-Setup.md @@ -6,7 +6,7 @@ - `gh` 已通过 Homebrew 安装:`gh version 2.86.0`。 - 用户已完成 `gh auth login`。 -- `Notes/snippets/github-search.sh status` 已验证登录成功。 +- `snippets/github-search.sh status` 已验证登录成功。 - repo / issue 搜索已完成烟测并返回结构化 JSON。 ## 一次性授权 @@ -24,7 +24,7 @@ gh auth login 登录状态验证: ```bash -Notes/snippets/github-search.sh status +snippets/github-search.sh status ``` ## Codex / 本仓库可用搜索入口 @@ -32,23 +32,23 @@ Notes/snippets/github-search.sh status 封装脚本: ```bash -Notes/snippets/github-search.sh +snippets/github-search.sh ``` 示例: ```bash # 搜开源仓库 -Notes/snippets/github-search.sh repos "agent memory llm" 10 +snippets/github-search.sh repos "agent memory llm" 10 # 在指定仓库里搜代码 -Notes/snippets/github-search.sh code "memory router" openai/codex 10 +snippets/github-search.sh code "memory router" openai/codex 10 # 搜 issue -Notes/snippets/github-search.sh issues "memory" openai/codex 10 +snippets/github-search.sh issues "memory" openai/codex 10 # 搜 PR -Notes/snippets/github-search.sh prs "eval" openai/codex 10 +snippets/github-search.sh prs "eval" openai/codex 10 ``` 脚本行为: @@ -70,8 +70,8 @@ Notes/snippets/github-search.sh prs "eval" openai/codex 10 如果未来换机器、token 过期或搜索异常,重新执行: ```bash -Notes/snippets/github-search.sh status -Notes/snippets/github-search.sh repos "agent memory llm" 3 +snippets/github-search.sh status +snippets/github-search.sh repos "agent memory llm" 3 ``` 如果返回 JSON,说明 GitHub 搜索能力可用。 diff --git "a/.trae/documents/OpenClaw\351\205\215\347\275\256\344\274\230\345\214\226\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265.md" "b/.trae/documents/OpenClaw\351\205\215\347\275\256\344\274\230\345\214\226\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265.md" index f0c5f1f4..13b7d998 100644 --- "a/.trae/documents/OpenClaw\351\205\215\347\275\256\344\274\230\345\214\226\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265.md" +++ "b/.trae/documents/OpenClaw\351\205\215\347\275\256\344\274\230\345\214\226\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265.md" @@ -108,7 +108,7 @@ 5. ❌ 不要绑定到公网 IP(`0.0.0.0`) ### Git 操作最佳实践 -1. ✅ 使用 `Notes/snippets/todo-push.sh` 和 `Notes/snippets/todo-pull.sh` 作为标准 git 操作流程 +1. ✅ 使用 `snippets/todo-push.sh` 和 `snippets/todo-pull.sh` 作为标准 git 操作流程 2. ✅ todo-push.sh 白名单机制:仅允许 `Notes/`、`.trae/`、`创作/` 三个文件夹 3. ✅ todo-push.sh 黑名单机制:绝对禁止 `公司项目/` 文件夹 4. ✅ 在 commit 前检查 `git status` diff --git "a/.trae/documents/OpenClaw\351\233\206\346\210\220\346\226\271\346\241\210.md" "b/.trae/documents/OpenClaw\351\233\206\346\210\220\346\226\271\346\241\210.md" index f4fccfa9..d00587d5 100644 --- "a/.trae/documents/OpenClaw\351\233\206\346\210\220\346\226\271\346\241\210.md" +++ "b/.trae/documents/OpenClaw\351\233\206\346\210\220\346\226\271\346\241\210.md" @@ -209,7 +209,7 @@ python main.py "这是一条测试任务" #### todo-sync Skill -**目标**: 调用 `Notes/snippets/todo-sync.sh`,从 Git 拉取最新代码并扫描新任务 +**目标**: 调用 `snippets/todo-sync.sh`,从 Git 拉取最新代码并扫描新任务 **目录结构**: ``` @@ -221,15 +221,15 @@ cs-notes-todo-sync/ #### todo-push Skill -**目标**: 调用 `Notes/snippets/todo-push.sh` 和 `todo-push-commit.sh`,将本地更改推送到 Git +**目标**: 调用 `snippets/todo-push.sh` 和 `todo-push-commit.sh`,将本地更改推送到 Git #### todo-prompt Skill -**目标**: 调用 `Notes/snippets/todo-prompt.py`,生成任务执行的 prompt +**目标**: 调用 `snippets/todo-prompt.py`,生成任务执行的 prompt #### todo-manager Skill -**目标**: 调用 `Notes/snippets/todo-manager.py`,管理 todos 的状态 +**目标**: 调用 `snippets/todo-manager.py`,管理 todos 的状态 ## 完整闭环流程设计 diff --git a/.trae/documents/PROJECT_CONTEXT.md b/.trae/documents/PROJECT_CONTEXT.md index 7e73a9a1..33264eef 100644 --- a/.trae/documents/PROJECT_CONTEXT.md +++ b/.trae/documents/PROJECT_CONTEXT.md @@ -30,7 +30,7 @@ ### Pull(拉取) - 指令:“pull” 或 “拉取” -- 执行:`./Notes/snippets/todo-pull.sh` +- 执行:`./snippets/todo-pull.sh` - 功能: - git pull 最新代码 - 扫描 Inbox 新任务 @@ -39,10 +39,10 @@ ### Push(推送) - 指令:“push” 或 “推送” - 执行: - 1. `./Notes/snippets/todo-push.sh`(生成变更摘要) + 1. `./snippets/todo-push.sh`(生成变更摘要) 2. AI 分析变更摘要,生成 commit message 3. 向用户展示:commit message + 变更文件列表 - 4. 用户确认后执行:`./Notes/snippets/todo-push-commit.sh ""` + 4. 用户确认后执行:`./snippets/todo-push-commit.sh ""` - 隐私保护: - 仅允许:Notes/、.trae/、创作/ - 绝对禁止:公司项目/ diff --git a/.trae/documents/Todos-Web-Manager-Process-Oncall.md b/.trae/documents/Todos-Web-Manager-Process-Oncall.md index d501fd73..b6106315 100644 --- a/.trae/documents/Todos-Web-Manager-Process-Oncall.md +++ b/.trae/documents/Todos-Web-Manager-Process-Oncall.md @@ -31,22 +31,22 @@ - 默认 `WEB_MANAGER_DEBUG=0` - 仅当显式设置 `WEB_MANAGER_DEBUG=1` 时开启 debug/reloader -- `Notes/snippets/todos-web-manager/start.sh` +- `snippets/todos-web-manager/start.sh` - 统一本地启动入口 - 启动前检查 `flask` / `flask_cors` 是否存在 - 默认只绑定 localhost - 日志目录:`.local/todos-web-manager/logs/` -- `Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist` +- `snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist` - `RunAtLoad=true` - `KeepAlive.SuccessfulExit=false` - `ThrottleInterval=30` - stdout/stderr 固定写入 `.local/todos-web-manager/logs/` -- `Notes/snippets/todos-web-manager/install-launchd.sh` +- `snippets/todos-web-manager/install-launchd.sh` - 安装并加载 LaunchAgent -- `Notes/snippets/todos-web-manager/uninstall-launchd.sh` +- `snippets/todos-web-manager/uninstall-launchd.sh` - 卸载 LaunchAgent ## 使用方式 @@ -54,13 +54,13 @@ 手动前台启动: ```bash -Notes/snippets/todos-web-manager/start.sh +snippets/todos-web-manager/start.sh ``` 安装为 macOS 登录后常驻服务: ```bash -Notes/snippets/todos-web-manager/install-launchd.sh +snippets/todos-web-manager/install-launchd.sh ``` 查看状态: @@ -75,7 +75,7 @@ tail -f .local/todos-web-manager/logs/launchd.err.log 卸载: ```bash -Notes/snippets/todos-web-manager/uninstall-launchd.sh +snippets/todos-web-manager/uninstall-launchd.sh ``` ## 后续建议 diff --git "a/.trae/documents/Todos-\347\256\241\347\220\206\347\263\273\347\273\237-\346\236\266\346\236\204\344\270\216\350\203\275\345\212\233.md" "b/.trae/documents/Todos-\347\256\241\347\220\206\347\263\273\347\273\237-\346\236\266\346\236\204\344\270\216\350\203\275\345\212\233.md" index 8c2d5e48..d4f5b019 100644 --- "a/.trae/documents/Todos-\347\256\241\347\220\206\347\263\273\347\273\237-\346\236\266\346\236\204\344\270\216\350\203\275\345\212\233.md" +++ "b/.trae/documents/Todos-\347\256\241\347\220\206\347\263\273\347\273\237-\346\236\266\346\236\204\344\270\216\350\203\275\345\212\233.md" @@ -174,20 +174,20 @@ Lark 通知完成 ### 3. 命令行工具 -- `Notes/snippets/todo-push.sh` - Git push 标准操作流程 -- `Notes/snippets/todo-pull.sh` - Git pull 标准操作流程 -- `Notes/snippets/todo-push-commit.sh` - 带 commit message 的 push 脚本 -- `Notes/snippets/todo_migrator.py` - Markdown → JSON 迁移工具 -- `Notes/snippets/todo_sync.py` - JSON→Markdown 同步功能 -- `Notes/snippets/add_todo_to_json.py` - 添加 todo 到 JSON 的工具 +- `snippets/todo-push.sh` - Git push 标准操作流程 +- `snippets/todo-pull.sh` - Git pull 标准操作流程 +- `snippets/todo-push-commit.sh` - 带 commit message 的 push 脚本 +- `snippets/todo_migrator.py` - Markdown → JSON 迁移工具 +- `snippets/todo_sync.py` - JSON→Markdown 同步功能 +- `snippets/add_todo_to_json.py` - 添加 todo 到 JSON 的工具 ### 4. 任务执行能力 -- `Notes/snippets/task_executor.py` - Task Executor,支持结构化日志输出、任务状态管理、阶段追踪、产物沉淀、指标计算 -- `Notes/snippets/blog_monitor.py` - 博主监控脚本 -- `Notes/snippets/context_completer.py` - 自动补全上下文脚本 -- `Notes/snippets/speech_to_text.py` - 语音转文字脚本 -- `Notes/snippets/voice_task_parser.py` - 语音任务解析器 +- `snippets/task_executor.py` - Task Executor,支持结构化日志输出、任务状态管理、阶段追踪、产物沉淀、指标计算 +- `snippets/blog_monitor.py` - 博主监控脚本 +- `snippets/context_completer.py` - 自动补全上下文脚本 +- `snippets/speech_to_text.py` - 语音转文字脚本 +- `snippets/voice_task_parser.py` - 语音任务解析器 ### 5. Plan Mode 能力 diff --git a/.trae/documents/Trae-CLI-Proactive-Research-Brief.md b/.trae/documents/Trae-CLI-Proactive-Research-Brief.md index 44cc47e6..43892a26 100644 --- a/.trae/documents/Trae-CLI-Proactive-Research-Brief.md +++ b/.trae/documents/Trae-CLI-Proactive-Research-Brief.md @@ -74,7 +74,7 @@ trae chat [options] [prompt] - `.trae/documents/trae-agent-评估报告.md` - `.trae/documents/OpenClaw-vs-Trae-Agent-对比报告.md` - `.trae/documents/我和trae-agent公平对比报告.md` -- `Notes/snippets/code-reading-trae-agent.md` +- `snippets/code-reading-trae-agent.md` 旧评估中的 `trae-agent` 与当前 Trae App CLI 不一定是同一个产品形态,但有两个判断仍然重要: diff --git "a/.trae/documents/\345\244\261\350\264\245\345\260\235\350\257\225\350\256\260\345\275\225.md" "b/.trae/documents/\345\244\261\350\264\245\345\260\235\350\257\225\350\256\260\345\275\225.md" index 7ba1bc7d..4fbfb7db 100644 --- "a/.trae/documents/\345\244\261\350\264\245\345\260\235\350\257\225\350\256\260\345\275\225.md" +++ "b/.trae/documents/\345\244\261\350\264\245\345\260\235\350\257\225\350\256\260\345\275\225.md" @@ -36,7 +36,7 @@ pip install playwright --break-system-packages playwright install chromium # 运行 Playwright 抓取脚本 -python3 Notes/snippets/playwright_simple.py "https://www.zhihu.com/question/1999487395494588876/answer/2000362433332660070?share_code=HGYNzglkEV8h&utm_psn=2000559952910099841" --save-html /tmp/zhihu-article.html --output /tmp/zhihu-result.json +python3 snippets/playwright_simple.py "https://www.zhihu.com/question/1999487395494588876/answer/2000362433332660070?share_code=HGYNzglkEV8h&utm_psn=2000559952910099841" --save-html /tmp/zhihu-article.html --output /tmp/zhihu-result.json ``` **错误信息:** diff --git a/.trae/openclaw-skills/_docs/README.md b/.trae/openclaw-skills/_docs/README.md index 0d5a6d3c..50e9c6ad 100644 --- a/.trae/openclaw-skills/_docs/README.md +++ b/.trae/openclaw-skills/_docs/README.md @@ -47,7 +47,7 @@ Todo 管理 - 管理 CS-Notes 项目中的 todo 任务。 **使用方法:** ```bash -cd /root/.openclaw/workspace/CS-Notes/Notes/snippets/ +cd /root/.openclaw/workspace/CS-Notes/snippets/ python3 todo-manager.py ``` diff --git a/.trae/openclaw-skills/cs-notes-todo-sync/README.md b/.trae/openclaw-skills/cs-notes-todo-sync/README.md index 6390c548..4c3541db 100644 --- a/.trae/openclaw-skills/cs-notes-todo-sync/README.md +++ b/.trae/openclaw-skills/cs-notes-todo-sync/README.md @@ -4,7 +4,7 @@ OpenClaw Skill,用于拉取 Git、扫描任务、生成执行提示。 ## 功能 -- 调用 `Notes/snippets/todo-pull.sh` +- 调用 `snippets/todo-pull.sh` - 拉取 Git 最新代码 - 扫描 Inbox 中的新任务 - 生成待执行任务提示清单 diff --git a/.trae/openclaw-skills/todo-manager/SKILL.md b/.trae/openclaw-skills/todo-manager/SKILL.md index c7fee27c..c8d9940e 100644 --- a/.trae/openclaw-skills/todo-manager/SKILL.md +++ b/.trae/openclaw-skills/todo-manager/SKILL.md @@ -18,7 +18,7 @@ description: Todo 管理 - 管理 CS-Notes 项目中的 todo 任务,包括任 ### 运行 Todo 管理 ```bash -cd /root/.openclaw/workspace/CS-Notes/Notes/snippets/ +cd /root/.openclaw/workspace/CS-Notes/snippets/ python3 todo-manager.py ``` diff --git a/.trae/openclaw-skills/top-lean-ai-monitor/SKILL.md b/.trae/openclaw-skills/top-lean-ai-monitor/SKILL.md index ea2a9323..ced55fab 100644 --- a/.trae/openclaw-skills/top-lean-ai-monitor/SKILL.md +++ b/.trae/openclaw-skills/top-lean-ai-monitor/SKILL.md @@ -18,7 +18,7 @@ description: Top Lean AI 榜单监控 - 监控 Top Lean AI 榜单的变化,记 ### 运行监控 ```bash -cd /root/.openclaw/workspace/CS-Notes/Notes/snippets/ +cd /root/.openclaw/workspace/CS-Notes/snippets/ python3 top_lean_ai_monitor.py ``` diff --git a/.trae/rules/project_rules.md b/.trae/rules/project_rules.md index 103d5aac..1fb393e0 100644 --- a/.trae/rules/project_rules.md +++ b/.trae/rules/project_rules.md @@ -39,7 +39,7 @@ - 拿到任务后第一时间标记为 in-progress - 新建 session 不会再次选择这个任务 * **【强制】任务执行可观测闭环**: - - **所有任务执行必须使用 task_execution_logger**(`Notes/snippets/task_execution_logger.py`) + - **所有任务执行必须使用 task_execution_logger**(`snippets/task_execution_logger.py`) - 开始任务前:调用 `logger.start_task(task_id)` - 执行中:记录关键步骤日志(`logger.log_info`、`logger.log_debug` 等) - 完成任务:调用 `logger.complete_task(task_id)` @@ -52,7 +52,7 @@ - **OpenClaw**:独立的 AI 助手系统,有自己的记忆(`.openclaw-memory/`)和规则(`.openclaw-memory/AGENTS.md`),主要用于自主推进 todo - **共享资源**:两者共享同一个工作空间,包括 todos.json、task_execution_logger 等 - **统一数据源**:都使用 `.trae/todos/todos.json` 作为任务数据源 - - **统一日志系统**:都使用 `Notes/snippets/task_execution_logger.py` 记录执行日志和指标 + - **统一日志系统**:都使用 `snippets/task_execution_logger.py` 记录执行日志和指标 - **避免冲突**:priority-task-reader 保证只返回 pending 状态的任务,拿到任务后第一时间标记为 in-progress * **OpenClaw 的核心价值**: - 可以在后台自主推进任务,不阻塞用户与 Trae 的交互 @@ -67,7 +67,7 @@ - 向用户报告进度,不要等待用户询问 - 进度报告要包含:百分比、预估剩余时间 * **Git 操作 SOP(第一原则:公司项目文档绝对不能 push 到 git)**: - - **公用 Skill 能力**:使用 `Notes/snippets/todo-push.sh` 和 `Notes/snippets/todo-pull.sh` 作为标准 git 操作流程 + - **公用 Skill 能力**:使用 `snippets/todo-push.sh` 和 `snippets/todo-pull.sh` 作为标准 git 操作流程 - **todo-push.sh 白名单机制**:仅允许 `Notes/`、`.trae/`、`创作/` 三个文件夹 - **todo-push.sh 黑名单机制**:绝对禁止 `公司项目/` 文件夹 - **todo-push.sh 排除模式**:排除 `.trae/logs/`、`*.pyc`、`__pycache__/`、`.DS_Store` @@ -180,7 +180,7 @@ - 支持任务筛选、搜索、排序 - 支持导出任务 JSON * **可用工具**: - - `Notes/snippets/todo_migrator.py` - Markdown → JSON 迁移工具(已完成迁移) + - `snippets/todo_migrator.py` - Markdown → JSON 迁移工具(已完成迁移) - `.trae/web-manager/simple-server.py` - 简单 HTTP 服务器(无需 Flask) - `.trae/web-manager/server.py` - Flask 后端(待修复 blinker 包冲突) * **JSON 数据结构**: diff --git a/.trae/todos/archive/2026-02.json b/.trae/todos/archive/2026-02.json index 8eccc819..233dc8d8 100644 --- a/.trae/todos/archive/2026-02.json +++ b/.trae/todos/archive/2026-02.json @@ -57,7 +57,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.626308", "links": [ - "`.trae/openclaw-skills/plan-generator/`、`.trae/openclaw-skills/plan-executor/`、`.trae/openclaw-skills/hybrid-executor/`、`Notes/snippets/task_executor.py`、`.trae/documents/Plan-Generator-Hybrid-Executor-验证报告.md`" + "`.trae/openclaw-skills/plan-generator/`、`.trae/openclaw-skills/plan-executor/`、`.trae/openclaw-skills/hybrid-executor/`、`snippets/task_executor.py`、`.trae/documents/Plan-Generator-Hybrid-Executor-验证报告.md`" ], "definition_of_done": [ "测试 Plan Generator", @@ -268,7 +268,7 @@ "http://xhslink.com/o/8rKN7celDGn、https://arxiv.org/html/2602.11664v1", "https://mp.weixin.qq.com/s/Mkbbqdvxh-95pVlnLv9Wig、`Notes/AI-Agent-Product&PE.md`", "`/Users/bytedance/CS-Notes/创作/公司项目/`、`.trae/documents/todos管理系统.md`", - "`Notes/snippets/todo-manager.py`、`Notes/snippets/todo-sync.sh`、`Notes/snippets/todo-prompt.py`、`.trae/documents/INBOX.md`、`.trae/documents/todos管理系统.md`、`Notes/AI-Agent-Product&PE.md`(OpenClaw)、`.trae/documents/OpenClaw集成方案.md`", + "`snippets/todo-manager.py`、`snippets/todo-sync.sh`、`snippets/todo-prompt.py`、`.trae/documents/INBOX.md`、`.trae/documents/todos管理系统.md`、`Notes/AI-Agent-Product&PE.md`(OpenClaw)、`.trae/documents/OpenClaw集成方案.md`", "`公司项目/01-公司项目创作pipeline.md`", "`公司项目/01-公司项目创作pipeline.md`", "[https://zhuanlan.zhihu.com/p/2000634266720161814、https://openviking.ai/、联网搜索 OpenViking](https://zhuanlan.zhihu.com/p/2000634266720161814、https://openviking.ai/、`公司项目/03.01)", @@ -276,8 +276,8 @@ "`.trae/documents/OpenClaw集成方案.md`、`.trae/documents/INBOX.md`", "`.trae/documents/OpenClaw集成方案.md`", "`.trae/documents/OpenClaw集成方案.md`、、`Notes/AI-Agent-Product&PE.md:390-466`", - "`Notes/snippets/todo-sync.sh`", - "`Notes/snippets/todo-pull.sh`、`Notes/snippets/todo-push.sh`、`Notes/snippets/todo-push-commit.sh`、`.trae/documents/PROJECT_CONTEXT.md`", + "`snippets/todo-sync.sh`", + "`snippets/todo-pull.sh`、`snippets/todo-push.sh`、`snippets/todo-push-commit.sh`、`.trae/documents/PROJECT_CONTEXT.md`", "`.trae/documents/OpenClaw集成方案.md`、`Notes/AI-Agent-Product&PE.md:390-466`", "飞书机器人对话", "https://mp.weixin.qq.com/s/gyEbK_UaUO3AeQvuhhRZ6g" @@ -352,7 +352,7 @@ "started_at": "2026-02-17", "completed_at": "2026-02-17", "links": [ - "session-management-optimization.md、.trae/documents/SESSION-OPTIMIZER-USAGE.md、Notes/snippets/session-monitor.py、Notes/snippets/session-optimizer.py" + "session-management-optimization.md、.trae/documents/SESSION-OPTIMIZER-USAGE.md、snippets/session-monitor.py、snippets/session-optimizer.py" ], "definition_of_done": [ "设计具体的 session 管理优化方案", @@ -391,7 +391,7 @@ "started_at": "2026-02-17", "completed_at": "2026-02-17", "links": [ - "Notes/snippets/speech_to_text.py" + "snippets/speech_to_text.py" ], "definition_of_done": [ "创建 speech-to-text 工具", @@ -587,7 +587,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.624400", "links": [ - "`.trae/openclaw-skills/plan-generator/`、`.trae/openclaw-skills/plan-executor/`、`.trae/openclaw-skills/hybrid-executor/`、`Notes/snippets/task_executor.py`、`.trae/documents/Plan-Generator-Hybrid-Executor-验证报告.md`" + "`.trae/openclaw-skills/plan-generator/`、`.trae/openclaw-skills/plan-executor/`、`.trae/openclaw-skills/hybrid-executor/`、`snippets/task_executor.py`、`.trae/documents/Plan-Generator-Hybrid-Executor-验证报告.md`" ], "definition_of_done": [ "测试 Plan Generator", @@ -705,7 +705,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.624706", "links": [ - "trae-agent/、Notes/snippets/code-reading-trae-agent.md、.trae/documents/trae-agent-评估报告.md" + "trae-agent/、snippets/code-reading-trae-agent.md、.trae/documents/trae-agent-评估报告.md" ], "definition_of_done": [ "跑通 trae-agent client", @@ -829,7 +829,7 @@ "feedback_required": false, "created_at": "2026-02-19T19:08:00.000000", "links": [ - "`Notes/snippets/session-optimizer.py`、`CS-Notes/.openclaw-session-optimizer.json`" + "`snippets/session-optimizer.py`、`CS-Notes/.openclaw-session-optimizer.json`" ], "definition_of_done": [ "分析问题根因:session-optimizer 不知道什么时候有新的 session 开始", @@ -897,7 +897,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.624436", "links": [ - "`Notes/snippets/voice_task_parser.py`" + "`snippets/voice_task_parser.py`" ], "definition_of_done": [ "实现 LLM 智能解析口述式任务模板", @@ -925,7 +925,7 @@ "feedback_required": false, "created_at": "2026-02-20T10:50:00.000000", "links": [ - "`Notes/snippets/todo-push.sh" + "`snippets/todo-push.sh" ], "definition_of_done": [ "分析 todo-push.sh 无法识别中文名的问题根因", @@ -957,7 +957,7 @@ "feedback_required": false, "created_at": "2026-02-20T09:15:00.000000", "links": [ - "`Notes/snippets/todo-push.sh`、`Notes/snippets/todo-pull.sh`" + "`snippets/todo-push.sh`、`snippets/todo-pull.sh`" ], "definition_of_done": [ "分析为什么有时不会自动push/pull了", @@ -1017,7 +1017,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.624923", "links": [ - "`.trae/documents/任务执行可观测闭环设计方案.md`、`Notes/snippets/task_execution_logger.py`" + "`.trae/documents/任务执行可观测闭环设计方案.md`、`snippets/task_execution_logger.py`" ], "definition_of_done": [ "任务执行采用结构化日志输出(如 stream-json),让调度器能识别执行阶段、失败原因、重试点与最终产物", @@ -1045,7 +1045,7 @@ "feedback_required": false, "created_at": "2026-02-19T17:50:00.000000", "links": [ - "`.trae/documents/LLM-智能解析-重新设计方案.md`、`.trae/web-manager/`、`Notes/snippets/voice_task_parser.py`" + "`.trae/documents/LLM-智能解析-重新设计方案.md`、`.trae/web-manager/`、`snippets/voice_task_parser.py`" ], "definition_of_done": [ "在 Todos Web Manager 中提供口述式任务输入界面", @@ -1614,7 +1614,7 @@ "feedback_required": false, "created_at": "2026-02-21T12:18:00.000000", "links": [ - "Notes/snippets/speech_to_text.py" + "snippets/speech_to_text.py" ], "definition_of_done": [ "查找 large turbo 模型的 pt 文件", @@ -1921,7 +1921,7 @@ "也许需要相关能力和agents.md稍微抽象和精炼一点" ], "started_at": "2026-02-23T04:46:45.977668", - "progress": "✅ 已完成!已成功通用化三个模板文件!\n\n已完成的工作:\n1. ✅ 优化 project_rules-generic.md:\n - 移除笔记库特定的内容整理原则\n - 通用化 Git 操作 SOP(移除 Notes/snippets/todo-push.sh 等特定工具)\n - 通用化目录与落盘约定(移除 Notes/、创作/、公司项目/等特定目录)\n - 移除个人文风规范、公司项目创作等笔记库特定内容\n - 保留通用的 Todo 管理、AI 助手工作流等内容\n\n2. ✅ 优化 AGENTS-generic.md:\n - 移除 \"CS-Notes 特定\" 的引用\n - 改为通用的 \"项目特定\"\n\n3. ✅ 优化 MEMORY-generic.md:\n - 移除 \"markdown-toc skill\" 等笔记库特定工具\n - 通用化内容整理流程\n - 保留通用的最佳实践、Todo 管理原则等\n\n三个通用模板现在可以适用于任意新项目(笔记、开源、闭源)!", + "progress": "✅ 已完成!已成功通用化三个模板文件!\n\n已完成的工作:\n1. ✅ 优化 project_rules-generic.md:\n - 移除笔记库特定的内容整理原则\n - 通用化 Git 操作 SOP(移除 snippets/todo-push.sh 等特定工具)\n - 通用化目录与落盘约定(移除 Notes/、创作/、公司项目/等特定目录)\n - 移除个人文风规范、公司项目创作等笔记库特定内容\n - 保留通用的 Todo 管理、AI 助手工作流等内容\n\n2. ✅ 优化 AGENTS-generic.md:\n - 移除 \"CS-Notes 特定\" 的引用\n - 改为通用的 \"项目特定\"\n\n3. ✅ 优化 MEMORY-generic.md:\n - 移除 \"markdown-toc skill\" 等笔记库特定工具\n - 通用化内容整理流程\n - 保留通用的最佳实践、Todo 管理原则等\n\n三个通用模板现在可以适用于任意新项目(笔记、开源、闭源)!", "completed_at": "2026-02-23T14:50:00.000000", "review_history": [ { @@ -1947,7 +1947,7 @@ "feedback_required": false, "created_at": "2026-02-20T00:50:00.000000", "links": [ - "`.trae/web-manager/index-enhanced.html`、`Notes/snippets/speech_to_text.py`" + "`.trae/web-manager/index-enhanced.html`、`snippets/speech_to_text.py`" ], "definition_of_done": [ "在 Todos Web Manager 的 Review 意见输入框旁边添加语音输入按钮", @@ -1981,7 +1981,7 @@ "created_at": "2026-02-25T07:06:00.000000", "started_at": "2026-02-25T07:06:00.000000", "links": [ - "Notes/snippets/speech_to_text.py", + "snippets/speech_to_text.py", ".trae/openclaw-skills/openai-whisper/" ], "definition_of_done": [ @@ -2204,7 +2204,7 @@ "started_at": "2026-02-24T20:00:00.000000", "completed_at": "2026-02-24T20:15:00.000000", "links": [ - "`Notes/snippets/todo-manager.py`", + "`snippets/todo-manager.py`", "`.trae/web-manager/`", "`.trae/todos/todos.json`" ], diff --git a/.trae/todos/todos.json b/.trae/todos/todos.json index d128a80e..64e43e1c 100644 --- a/.trae/todos/todos.json +++ b/.trae/todos/todos.json @@ -17,7 +17,7 @@ "links": [ "AGENTS.md", ".local/AGENTS.md", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/documents/Codex-TODO-System-v2.md", ".trae/documents/Codex-TODO-User-Action-Queue.md", ".local/LEARNING_MATERIAL_CANDIDATES.md", @@ -36,7 +36,7 @@ "changed_files": [ "AGENTS.md", ".local/AGENTS.md", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/documents/Codex-TODO-System-v2.md", ".trae/documents/Codex-TODO-User-Action-Queue.md", ".local/LEARNING_MATERIAL_CANDIDATES.md", @@ -63,7 +63,7 @@ "updated_at": "2026-05-07T03:00:00+0800", "completed_at": "2026-05-07T03:00:00+0800", "links": [ - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/documents/Codex-TODO-System-v2.md", ".trae/documents/Codex-TODO-User-Action-Queue.md" ], @@ -75,7 +75,7 @@ ], "progress": "✅ 已完成。`codex_todo_triage.py --batch-plan` 现在在只有 user-blocked TODO 时,也会展示 `.local/LEARNING_MATERIAL_CANDIDATES.md` 当前阅读顺序中的 Codex-owned 小切口;新增 `render_material_queue_suggestions()` 复用空队列/用户阻塞两种场景。已同步更新 `Codex-TODO-System-v2.md` 与 `Codex-TODO-User-Action-Queue.md`,明确用户阻塞项只作为提醒,不应永久卡住 Codex 批推进。", "changed_files": [ - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/documents/Codex-TODO-System-v2.md", ".trae/documents/Codex-TODO-User-Action-Queue.md", ".local/CODEX_TODO_TRIAGE_INDEX.md", @@ -100,8 +100,8 @@ "updated_at": "2026-05-07T02:05:00+0800", "links": [ "Notes/非技术知识.md#持续关注", - "Notes/snippets/blog_monitor.py", - "Notes/snippets/blogger_monitor.py", + "snippets/blog_monitor.py", + "snippets/blogger_monitor.py", ".local/LEARNING_MATERIAL_CANDIDATES.md" ], "user_requirements": [ @@ -115,7 +115,7 @@ "对读不到的平台只记录 Unread / fallback,不假装读过;必要时提示用户补正文、截图或导出", "复用或重构现有 blog_monitor.py / blogger_monitor.py,避免只做一次性手工扫描" ], - "progress": "✅ 2026-05-07 已完成。四批推进合并收敛:1) 从 `Notes/非技术知识.md#持续关注` 解析并清洗 34 个 trusted sources,形成 `.local/TRUSTED_MATERIAL_SOURCE_RADAR.md` 与 `.local/TRUSTED_MATERIAL_SOURCES.json`;2) 明确平台访问矩阵和读取边界,公众号/小红书/视频类均保留 Unread / transcript / user-export 规则;3) 抽样扫描 Lilian Weng、ezyang、GPU MODE、PyTorch Dev Discuss,并把 A129/A130/B29/B30 写入候选库;4) 新增 `Notes/snippets/trusted_source_scan.py` 与 `.local/TRUSTED_SOURCE_SCAN_PLAN_20260507.md`,后续主动调研可复用 scan plan -> actual read -> candidates writeback 流程。剩余的具体平台读取问题不再挂在本 TODO 下,后续遇到材料时按素材管线处理。", + "progress": "✅ 2026-05-07 已完成。四批推进合并收敛:1) 从 `Notes/非技术知识.md#持续关注` 解析并清洗 34 个 trusted sources,形成 `.local/TRUSTED_MATERIAL_SOURCE_RADAR.md` 与 `.local/TRUSTED_MATERIAL_SOURCES.json`;2) 明确平台访问矩阵和读取边界,公众号/小红书/视频类均保留 Unread / transcript / user-export 规则;3) 抽样扫描 Lilian Weng、ezyang、GPU MODE、PyTorch Dev Discuss,并把 A129/A130/B29/B30 写入候选库;4) 新增 `snippets/trusted_source_scan.py` 与 `.local/TRUSTED_SOURCE_SCAN_PLAN_20260507.md`,后续主动调研可复用 scan plan -> actual read -> candidates writeback 流程。剩余的具体平台读取问题不再挂在本 TODO 下,后续遇到材料时按素材管线处理。", "codex_triage": { "triaged_at": "2026-05-07", "category": "completed_recent_observe", @@ -126,8 +126,8 @@ "started_at": "2026-05-07T00:20:00+0800", "completed_at": "2026-05-07T02:05:00+0800", "changed_files": [ - "Notes/snippets/extract_trusted_material_sources.py", - "Notes/snippets/trusted_source_scan.py", + "snippets/extract_trusted_material_sources.py", + "snippets/trusted_source_scan.py", ".local/TRUSTED_MATERIAL_SOURCE_RADAR.md", ".local/TRUSTED_MATERIAL_SOURCES.json", ".local/TRUSTED_SOURCE_SCAN_20260507.md", @@ -223,14 +223,14 @@ "links": [ ".trae/documents/GitHub-Agent-Memory-Research-Seeds.md", ".local/LEARNING_MATERIAL_CANDIDATES.md", - "Notes/snippets/github-search.sh" + "snippets/github-search.sh" ], "definition_of_done": [ "使用刚接入的 GitHub 搜索能力做 repo / issue 双路线索召回", "筛掉泛泛 awesome/list,保留 agent memory eval、type-aware retrieval、framework memory/store integration 等更接近主线的线索", "沉淀成可追踪文档,并同步到本地学习材料候选库" ], - "progress": "✅ 已完成 GitHub 搜索能力的第一次价值输出。使用 `Notes/snippets/github-search.sh` 搜索 repo / issue,沉淀 `.trae/documents/GitHub-Agent-Memory-Research-Seeds.md`,并向 `.local/LEARNING_MATERIAL_CANDIDATES.md` 增补 GitHub 开源线索。高价值候选包括 verifiedstate/agent-memory-eval、mem0 type-aware memory retrieval issue、LangGraph ClawMem memory/store integration、Codex memory issues。下一步最建议调研 verifiedstate/agent-memory-eval README。", + "progress": "✅ 已完成 GitHub 搜索能力的第一次价值输出。使用 `snippets/github-search.sh` 搜索 repo / issue,沉淀 `.trae/documents/GitHub-Agent-Memory-Research-Seeds.md`,并向 `.local/LEARNING_MATERIAL_CANDIDATES.md` 增补 GitHub 开源线索。高价值候选包括 verifiedstate/agent-memory-eval、mem0 type-aware memory retrieval issue、LangGraph ClawMem memory/store integration、Codex memory issues。下一步最建议调研 verifiedstate/agent-memory-eval README。", "changed_files": [ ".trae/documents/GitHub-Agent-Memory-Research-Seeds.md", ".local/LEARNING_MATERIAL_CANDIDATES.md", @@ -253,10 +253,10 @@ "feedback_required": false, "created_at": "2026-05-04T00:20:07.520587", "links": [ - "Notes/snippets/generate-ai-hotspots-daily.sh", - "Notes/snippets/install-ai-hotspots-launchd.sh", - "Notes/snippets/uninstall-ai-hotspots-launchd.sh", - "Notes/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist" + "snippets/generate-ai-hotspots-daily.sh", + "snippets/install-ai-hotspots-launchd.sh", + "snippets/uninstall-ai-hotspots-launchd.sh", + "snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist" ], "definition_of_done": [ "确认 macOS 本地定时方案:launchd 优先,必要时对比 cron / OpenClaw cron / Codex automation", @@ -268,13 +268,13 @@ "user_requirements": [ "记一个todo,macos里想办法实现:每天定时给我生成AI热点" ], - "progress": "✅ 已完成 macOS 本地每日 AI 热点自动化。\n1. 新增生成脚本 Notes/snippets/generate-ai-hotspots-daily.sh,调用 Codex + ai-hotspots skill 生成日报。\n2. 新增 launchd plist 模板 Notes/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist,默认每天 08:30 运行。\n3. 新增 install/uninstall 脚本,并已安装到 ~/Library/LaunchAgents/com.huangrt.csnotes.ai-hotspots.plist。\n4. 手动触发验证生成 .local/ai-hotspots/reports/ai-daily-2026-05-04.html。\n5. 验证中发现 Codex 子进程可能生成报告后不退出,已给生成脚本增加 20 分钟硬超时;若报告已写入则视为 partial success,避免 launchd 长时间悬挂。\n6. 追加修正:LaunchAgent 已加入 RunAtLoad;如果当天还没有报告,登录/加载时会补跑。生成或跳过时会发 macOS 通知;脚本支持 stale lock 恢复。", + "progress": "✅ 已完成 macOS 本地每日 AI 热点自动化。\n1. 新增生成脚本 snippets/generate-ai-hotspots-daily.sh,调用 Codex + ai-hotspots skill 生成日报。\n2. 新增 launchd plist 模板 snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist,默认每天 08:30 运行。\n3. 新增 install/uninstall 脚本,并已安装到 ~/Library/LaunchAgents/com.huangrt.csnotes.ai-hotspots.plist。\n4. 手动触发验证生成 .local/ai-hotspots/reports/ai-daily-2026-05-04.html。\n5. 验证中发现 Codex 子进程可能生成报告后不退出,已给生成脚本增加 20 分钟硬超时;若报告已写入则视为 partial success,避免 launchd 长时间悬挂。\n6. 追加修正:LaunchAgent 已加入 RunAtLoad;如果当天还没有报告,登录/加载时会补跑。生成或跳过时会发 macOS 通知;脚本支持 stale lock 恢复。", "completed_at": "2026-05-04T00:34:06.819517", "changed_files": [ - "Notes/snippets/generate-ai-hotspots-daily.sh", - "Notes/snippets/install-ai-hotspots-launchd.sh", - "Notes/snippets/uninstall-ai-hotspots-launchd.sh", - "Notes/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist", + "snippets/generate-ai-hotspots-daily.sh", + "snippets/install-ai-hotspots-launchd.sh", + "snippets/uninstall-ai-hotspots-launchd.sh", + "snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist", ".trae/todos/todos.json" ], "codex_triage": { @@ -407,29 +407,29 @@ "created_at": "2026-02-25T21:56:04.098916", "links": [ ".trae/documents/GitHub-Search-GH-Setup.md", - "Notes/snippets/github-search.sh" + "snippets/github-search.sh" ], "definition_of_done": [ "gh CLI 已安装并可运行", "用户完成 gh auth login", - "Notes/snippets/github-search.sh repos \"agent memory llm\" 3 能返回 JSON", + "snippets/github-search.sh repos \"agent memory llm\" 3 能返回 JSON", "GitHub repo/code/issue/PR 搜索入口可被 Codex 复用" ], "user_requirements": [ "加一个assign给user的todo:配置gh并配置github的搜索能力" ], - "progress": "✅ GitHub 搜索能力配置完成。用户已完成 gh auth login;`Notes/snippets/github-search.sh status` 验证已登录 huangrt01;`Notes/snippets/github-search.sh repos \"agent memory llm\" 3` 返回合法 JSON;进一步用 `Notes/snippets/github-search.sh repos \"llm agent\" 3` 和 `Notes/snippets/github-search.sh issues \"memory\" openai/codex 3` 验证 repo / issue 搜索均能返回结构化 JSON。该能力后续可服务调研、开源贡献选题和 Agent infra/materials 检索。", + "progress": "✅ GitHub 搜索能力配置完成。用户已完成 gh auth login;`snippets/github-search.sh status` 验证已登录 huangrt01;`snippets/github-search.sh repos \"agent memory llm\" 3` 返回合法 JSON;进一步用 `snippets/github-search.sh repos \"llm agent\" 3` 和 `snippets/github-search.sh issues \"memory\" openai/codex 3` 验证 repo / issue 搜索均能返回结构化 JSON。该能力后续可服务调研、开源贡献选题和 Agent infra/materials 检索。", "codex_triage": { "triaged_at": "2026-05-04", "category": "completed_recent_observe", "recommended_status": "completed-observe", "judgment": "GitHub 搜索能力已接入,可被调研和开源贡献流程复用。", - "recommended_action": "后续调研 GitHub repo/issue/PR 时优先使用 Notes/snippets/github-search.sh。" + "recommended_action": "后续调研 GitHub repo/issue/PR 时优先使用 snippets/github-search.sh。" }, "changed_files": [ ".trae/documents/GitHub-Search-GH-Setup.md", ".trae/todos/todos.json", - "Notes/snippets/github-search.sh" + "snippets/github-search.sh" ], "updated_at": "2026-05-04T04:35:00.000000", "completed_at": "2026-05-04T04:35:00.000000" @@ -532,7 +532,7 @@ "started_at": "2026-02-23T17:30:00.000000", "completed_at": "2026-02-23T18:00:00.000000", "links": [ - "`Notes/snippets/task_execution_logger.py`", + "`snippets/task_execution_logger.py`", "`.trae/openclaw-skills/`" ], "definition_of_done": [ @@ -751,7 +751,7 @@ "基于 OpenClaw 现有能力,考虑配合一些新的能力", "输出完整的优化方案文档" ], - "progress": "✅ 已创建设计文档 `.trae/documents/自主推进任务机制优化方案.md`!已创建 `execution_tracker.py` 脚本(Notes/snippets/execution_tracker.py),支持:reset(用户交互时重置)、check(检查是否可以执行更多任务)、increment(递增任务计数)!配置参数:MAX_TASKS_BETWEEN_INTERVENTIONS=8!下一步可以在实际使用中验证!\n\n✅ 已观察了最近每次heartbeat后自主推进任务的情况!\n\n观察结果:\n1. 当前heartbeat机制工作良好!\n2. 在用户两次干预之间,可以自主推进多个任务!\n3. 最近的一次heartbeat,成功推进了多个todo!\n4. 用户起床后,很多todo都到了不得不依赖用户做些什么或者做决策的阶段!\n\n优化方案评估:\n- 当前方案已经很好地满足了用户需求!\n- 在用户两次干预之间主动推进任务!\n- 只有需要用户做选择题的时候才找用户确认!\n- 否则尽量自主推进一切事项!\n- 用户希望:起床后,每个todo都到了不得不依赖他做些什么或者做决策的阶段!\n\n结论:\n- 当前方案已经很好地满足了用户需求!\n- 不需要做太大的调整!\n- 继续在实际使用中验证即可!", + "progress": "✅ 已创建设计文档 `.trae/documents/自主推进任务机制优化方案.md`!已创建 `execution_tracker.py` 脚本(snippets/execution_tracker.py),支持:reset(用户交互时重置)、check(检查是否可以执行更多任务)、increment(递增任务计数)!配置参数:MAX_TASKS_BETWEEN_INTERVENTIONS=8!下一步可以在实际使用中验证!\n\n✅ 已观察了最近每次heartbeat后自主推进任务的情况!\n\n观察结果:\n1. 当前heartbeat机制工作良好!\n2. 在用户两次干预之间,可以自主推进多个任务!\n3. 最近的一次heartbeat,成功推进了多个todo!\n4. 用户起床后,很多todo都到了不得不依赖用户做些什么或者做决策的阶段!\n\n优化方案评估:\n- 当前方案已经很好地满足了用户需求!\n- 在用户两次干预之间主动推进任务!\n- 只有需要用户做选择题的时候才找用户确认!\n- 否则尽量自主推进一切事项!\n- 用户希望:起床后,每个todo都到了不得不依赖他做些什么或者做决策的阶段!\n\n结论:\n- 当前方案已经很好地满足了用户需求!\n- 不需要做太大的调整!\n- 继续在实际使用中验证即可!", "started_at": "2026-02-19", "review_history": [ { @@ -803,7 +803,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.624463", "links": [ - "`Notes/snippets/context_completer.py`" + "`snippets/context_completer.py`" ], "definition_of_done": [ "实现自动补全上下文", @@ -924,7 +924,7 @@ "feedback_required": false, "created_at": "2026-02-19T14:16:05.624950", "links": [ - "`.trae/documents/自然语言与语音任务输入方案.md`、`Notes/snippets/voice_task_parser.py`、`Notes/snippets/speech_to_text.py`", + "`.trae/documents/自然语言与语音任务输入方案.md`、`snippets/voice_task_parser.py`、`snippets/speech_to_text.py`", ".trae/documents/Codex-TODO-System-v2.md" ], "definition_of_done": [ @@ -1028,7 +1028,7 @@ "created_at": "2026-02-19T16:00:00.000000", "links": [ "https://playwright.dev/", - "`Notes/snippets/playwright_simple.py`" + "`snippets/playwright_simple.py`" ], "definition_of_done": [ "调研 Playwright 的使用方法", @@ -1042,7 +1042,7 @@ "RSSHub 也返回 403 错误", "需要使用 Playwright 模拟浏览器来绕过反爬机制" ], - "progress": "✅ 已完成!成功将playwright做成了一个skill,并将脚本从snippets移动到了新建的skill文件夹中!\\n\\n已完成的工作:\\n1. ✅ 创建了playwright-scraper skill文件夹\\n2. ✅ 创建了skill.json文件\\n3. ✅ 创建了main.py文件(将原playwright_simple.py的内容移动过去)\\n4. ✅ 创建了SKILL.md文件\\n5. ✅ 删除了原来的Notes/snippets/playwright_simple.py文件\\n6. ✅ 提交了这些更改\\n\\n现在,playwright已经作为一个独立的skill存在于.trae/openclaw-skills/playwright-scraper/文件夹中了!", + "progress": "✅ 已完成!成功将playwright做成了一个skill,并将脚本从snippets移动到了新建的skill文件夹中!\\n\\n已完成的工作:\\n1. ✅ 创建了playwright-scraper skill文件夹\\n2. ✅ 创建了skill.json文件\\n3. ✅ 创建了main.py文件(将原playwright_simple.py的内容移动过去)\\n4. ✅ 创建了SKILL.md文件\\n5. ✅ 删除了原来的snippets/playwright_simple.py文件\\n6. ✅ 提交了这些更改\\n\\n现在,playwright已经作为一个独立的skill存在于.trae/openclaw-skills/playwright-scraper/文件夹中了!", "started_at": "2026-02-19", "completed_at": "2026-02-25T23:35:48.842621", "plan": { @@ -1116,7 +1116,7 @@ "feedback_required": false, "created_at": "2026-02-19T17:50:00.000000", "links": [ - "`Notes/snippets/task_execution_logger.py`、`.trae/documents/任务执行可观测闭环设计方案.md`" + "`snippets/task_execution_logger.py`、`.trae/documents/任务执行可观测闭环设计方案.md`" ], "definition_of_done": [ "让 task_execution_logger.py 成为本仓库在各种交互方式下的默认 setting", @@ -1212,7 +1212,7 @@ "feedback_required": false, "created_at": "2026-02-19T18:47:07.445357", "links": [ - "`.trae/documents/LLM-智能解析-重新设计方案.md`、`Notes/snippets/voice_task_parser.py`", + "`.trae/documents/LLM-智能解析-重新设计方案.md`、`snippets/voice_task_parser.py`", ".trae/documents/Codex-TODO-System-v2.md" ], "definition_of_done": [ @@ -1280,7 +1280,7 @@ "feedback_required": false, "created_at": "2026-02-19T21:15:00.000000", "links": [ - "`Notes/snippets/task_execution_logger.py`、`Notes/snippets/example_task_with_logger.py`" + "`snippets/task_execution_logger.py`、`snippets/example_task_with_logger.py`" ], "definition_of_done": [ "在所有任务执行中都使用 task_execution_logger.py", @@ -1292,7 +1292,7 @@ "落地的定义是【成为了本仓库在各种交互方式下的默认setting,并体验和效果良好】,而不仅是有个设计文档和玩具代码即算落地", "尤其注意沉淀前面我希望你e2e落地的思路,并不是写了、实现了就算done,而是要用起来、用好" ], - "progress": "✅ 已完成!已创建示例任务(Notes/snippets/example_task_with_logger.py),展示如何在实际任务中使用 task_execution_logger.py!包含了完整的任务执行日志记录、任务状态机、指标收集等功能!\n\n✅ 已验证!task_execution_logger 确实能稳定调用,且能正确传入 agent 字段(openclaw)!\n\n测试验证结果:\n1. ✅ task_execution_logger 导入成功\n2. ✅ Logger 创建成功\n3. ✅ 任务开始记录成功,agent 字段正确传入为 \"openclaw\"\n4. ✅ 日志记录成功\n5. ✅ 任务完成记录成功\n6. ✅ 日志文件中正确显示了 \"agent\": \"openclaw\" 字段\n\n🎉 task_execution_logger.py 现在已经真正用起来了!", + "progress": "✅ 已完成!已创建示例任务(snippets/example_task_with_logger.py),展示如何在实际任务中使用 task_execution_logger.py!包含了完整的任务执行日志记录、任务状态机、指标收集等功能!\n\n✅ 已验证!task_execution_logger 确实能稳定调用,且能正确传入 agent 字段(openclaw)!\n\n测试验证结果:\n1. ✅ task_execution_logger 导入成功\n2. ✅ Logger 创建成功\n3. ✅ 任务开始记录成功,agent 字段正确传入为 \"openclaw\"\n4. ✅ 日志记录成功\n5. ✅ 任务完成记录成功\n6. ✅ 日志文件中正确显示了 \"agent\": \"openclaw\" 字段\n\n🎉 task_execution_logger.py 现在已经真正用起来了!", "started_at": "2026-02-19", "execution_log": [ { @@ -1321,9 +1321,9 @@ "retry_count": 0 }, "artifacts": { - "execution_summary": "✅ 已完成!已创建示例任务(Notes/snippets/example_task_with_logger.py),展示如何在实际任务中使用 task_execution_logger.py!包含了完整的任务执行日志记录、任务状态机、指标收集等功能!", + "execution_summary": "✅ 已完成!已创建示例任务(snippets/example_task_with_logger.py),展示如何在实际任务中使用 task_execution_logger.py!包含了完整的任务执行日志记录、任务状态机、指标收集等功能!", "product_links": [ - "`Notes/snippets/task_execution_logger.py`、`Notes/snippets/example_task_with_logger.py`" + "`snippets/task_execution_logger.py`、`snippets/example_task_with_logger.py`" ], "key_diffs": [], "reproduction_commands": [] @@ -1346,7 +1346,7 @@ "feedback_required": false, "created_at": "2026-02-19T21:15:00.000000", "links": [ - "`Notes/snippets/voice_task_parser.py`、`Notes/snippets/example_voice_task_parsing.py`", + "`snippets/voice_task_parser.py`、`snippets/example_voice_task_parsing.py`", ".trae/documents/Codex-TODO-System-v2.md" ], "definition_of_done": [ @@ -1445,7 +1445,7 @@ "user_requirements": [ "调研如何让openclaw记录(log)下来自己的一些关键命令行调用(比如安装依赖,比如git操作等)" ], - "progress": "✅ 已完成!OpenClaw 已经有了完整的日志功能!不需要额外实现!我们只需要:1) 查看现有日志:`openclaw logs --follow`;2) 配置日志路径和级别(如果需要);3) 使用 Control UI (web) 查看日志!OpenClaw 日志功能包括:文件日志(默认位置:`/tmp/openclaw/openclaw-YYYY-MM-DD.log`)、CLI 查看日志(`openclaw logs --follow`)、Control UI (web) 查看日志、Diagnostics + OpenTelemetry 功能!\n\n✅ 已真正落地!创建了 `Notes/snippets/command_logger.py`!\n\n已完成的工作:\n1. ✅ 创建了完整的 command_logger.py,支持:\n - 记录命令执行(log_command)\n - 运行并记录命令(run_and_log)\n - 获取最近的命令记录(get_recent_commands)\n2. ✅ 日志文件位置:`.trae/logs/commands_YYYY-MM-DD.jsonl`\n3. ✅ 测试验证成功!成功记录了 echo 和 git status 命令!\n\n测试结果:\n- ✅ 命令日志文件已记录了命令执行!\n- ✅ 包含命令字符串、工作目录、成功状态、输出、错误信息等!\n- ✅ 可以查看最近的命令记录!\n\n现在可以在涉及关键命令行调用时,主动查阅一下 log,然后通过 lark 返回给用户结果的同时,告诉用户执行了哪些命令!", + "progress": "✅ 已完成!OpenClaw 已经有了完整的日志功能!不需要额外实现!我们只需要:1) 查看现有日志:`openclaw logs --follow`;2) 配置日志路径和级别(如果需要);3) 使用 Control UI (web) 查看日志!OpenClaw 日志功能包括:文件日志(默认位置:`/tmp/openclaw/openclaw-YYYY-MM-DD.log`)、CLI 查看日志(`openclaw logs --follow`)、Control UI (web) 查看日志、Diagnostics + OpenTelemetry 功能!\n\n✅ 已真正落地!创建了 `snippets/command_logger.py`!\n\n已完成的工作:\n1. ✅ 创建了完整的 command_logger.py,支持:\n - 记录命令执行(log_command)\n - 运行并记录命令(run_and_log)\n - 获取最近的命令记录(get_recent_commands)\n2. ✅ 日志文件位置:`.trae/logs/commands_YYYY-MM-DD.jsonl`\n3. ✅ 测试验证成功!成功记录了 echo 和 git status 命令!\n\n测试结果:\n- ✅ 命令日志文件已记录了命令执行!\n- ✅ 包含命令字符串、工作目录、成功状态、输出、错误信息等!\n- ✅ 可以查看最近的命令记录!\n\n现在可以在涉及关键命令行调用时,主动查阅一下 log,然后通过 lark 返回给用户结果的同时,告诉用户执行了哪些命令!", "started_at": "2026-02-20", "review_history": [ { @@ -1465,7 +1465,7 @@ "feedback_required": false, "created_at": "2026-02-19T08:08:06.000000", "links": [ - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/todos/todos.json" ], "definition_of_done": [ @@ -1479,11 +1479,11 @@ "user_requirements": [ "你是如何考虑新增的todos要能被新的web manager下的存储形式感知到的" ], - "progress": "✅ 已按 Codex 协作模式替代完成。原任务要求 JSON ↔ Markdown 双向同步,但用户后来已表示旧方案不用做;当前推进中将其收敛为更适合 Codex 的单向 triage index。\n1. 新增 Notes/snippets/codex_todo_triage.py,从 .trae/todos/todos.json 生成 Codex 视角的 Markdown triage index。\n2. 输出到 .local/CODEX_TODO_TRIAGE_INDEX.md,按 Codex 可做、流程演进、用户阻塞、可归档、近期完成经验等分类。\n3. 不做 Markdown → JSON 双向同步,避免旧 Web Manager 形态继续扩大复杂度。\n4. 该脚本成为后续「推进TODO」前的轻量 review 入口。", + "progress": "✅ 已按 Codex 协作模式替代完成。原任务要求 JSON ↔ Markdown 双向同步,但用户后来已表示旧方案不用做;当前推进中将其收敛为更适合 Codex 的单向 triage index。\n1. 新增 snippets/codex_todo_triage.py,从 .trae/todos/todos.json 生成 Codex 视角的 Markdown triage index。\n2. 输出到 .local/CODEX_TODO_TRIAGE_INDEX.md,按 Codex 可做、流程演进、用户阻塞、可归档、近期完成经验等分类。\n3. 不做 Markdown → JSON 双向同步,避免旧 Web Manager 形态继续扩大复杂度。\n4. 该脚本成为后续「推进TODO」前的轻量 review 入口。", "started_at": "2026-02-27T05:03:47.194414", "completed_at": "2026-05-04T00:50:02.978891", "changed_files": [ - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/todos/todos.json" ] }, @@ -1864,7 +1864,7 @@ ".trae/documents/Trae-CLI-Proactive-Research-Brief.md", ".trae/documents/trae-agent-评估报告.md", ".trae/documents/OpenClaw-vs-Trae-Agent-对比报告.md", - "Notes/snippets/code-reading-trae-agent.md" + "snippets/code-reading-trae-agent.md" ], "definition_of_done": [ "确认公司内部是否存在独立 coding bash CLI 或 Trae CLI agent runner 文档/owner", @@ -1989,10 +1989,10 @@ ".trae/documents/Todos-Web-Manager-Process-Oncall.md", ".trae/documents/WebManager-Public-Port-Security-Review.md", ".trae/web-manager/server.py", - "Notes/snippets/todos-web-manager/start.sh", - "Notes/snippets/todos-web-manager/install-launchd.sh", - "Notes/snippets/todos-web-manager/uninstall-launchd.sh", - "Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist" + "snippets/todos-web-manager/start.sh", + "snippets/todos-web-manager/install-launchd.sh", + "snippets/todos-web-manager/uninstall-launchd.sh", + "snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist" ], "definition_of_done": [ "检查当前进程、5000 端口、launchd 状态和 server.log", @@ -2004,7 +2004,7 @@ "user_requirements": [ "oncall分析为啥todos web manager进程时不时就消失 不是常驻" ], - "progress": "✅ 已完成 oncall 分析与最小修复。结论:旧 Web Manager 不是 daemon 化服务,而是手动前台 Flask debug server;debug reloader + 0.0.0.0 不适合常驻,也有公网风险。已将 server.py 默认改成 127.0.0.1 + debug off;新增 start/install/uninstall launchd 脚本和 launchd plist;短启动验证 /api/tasks 通过。未自动安装常驻服务,避免把旧 Web Manager 重新变成主入口;需要时运行 Notes/snippets/todos-web-manager/install-launchd.sh。", + "progress": "✅ 已完成 oncall 分析与最小修复。结论:旧 Web Manager 不是 daemon 化服务,而是手动前台 Flask debug server;debug reloader + 0.0.0.0 不适合常驻,也有公网风险。已将 server.py 默认改成 127.0.0.1 + debug off;新增 start/install/uninstall launchd 脚本和 launchd plist;短启动验证 /api/tasks 通过。未自动安装常驻服务,避免把旧 Web Manager 重新变成主入口;需要时运行 snippets/todos-web-manager/install-launchd.sh。", "started_at": "", "completed_at": "2026-05-04T01:42:22", "commit_hash": "", @@ -2012,10 +2012,10 @@ ".trae/documents/Todos-Web-Manager-Process-Oncall.md", ".trae/documents/WebManager-Public-Port-Security-Review.md", ".trae/web-manager/server.py", - "Notes/snippets/todos-web-manager/start.sh", - "Notes/snippets/todos-web-manager/install-launchd.sh", - "Notes/snippets/todos-web-manager/uninstall-launchd.sh", - "Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist", + "snippets/todos-web-manager/start.sh", + "snippets/todos-web-manager/install-launchd.sh", + "snippets/todos-web-manager/uninstall-launchd.sh", + "snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist", ".trae/todos/todos.json" ] }, @@ -2028,11 +2028,11 @@ "feedback_required": false, "created_at": "2026-05-04T06:15:00", "links": [ - "Notes/snippets/todos-web-manager/README.md", - "Notes/snippets/todos-web-manager/start.sh", - "Notes/snippets/todos-web-manager/install-launchd.sh", - "Notes/snippets/todos-web-manager/uninstall-launchd.sh", - "Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist", + "snippets/todos-web-manager/README.md", + "snippets/todos-web-manager/start.sh", + "snippets/todos-web-manager/install-launchd.sh", + "snippets/todos-web-manager/uninstall-launchd.sh", + "snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist", ".trae/documents/Todos-Web-Manager-Process-Oncall.md" ], "definition_of_done": [ @@ -2044,16 +2044,16 @@ "user_requirements": [ "web manager相关的脚本似乎应该弄个子文件夹" ], - "progress": "✅ 已将 Todos Web Manager 启动、安装、卸载脚本迁移到 Notes/snippets/todos-web-manager/,并将对应 plist 收到子目录 launchd/。已更新 install-launchd.sh、plist、oncall 文档和 completed TODO 中的路径;新增 README 说明目录用途。", + "progress": "✅ 已将 Todos Web Manager 启动、安装、卸载脚本迁移到 snippets/todos-web-manager/,并将对应 plist 收到子目录 launchd/。已更新 install-launchd.sh、plist、oncall 文档和 completed TODO 中的路径;新增 README 说明目录用途。", "started_at": "2026-05-04T06:15:00", "completed_at": "2026-05-04T06:20:00", "commit_hash": "", "changed_files": [ - "Notes/snippets/todos-web-manager/README.md", - "Notes/snippets/todos-web-manager/start.sh", - "Notes/snippets/todos-web-manager/install-launchd.sh", - "Notes/snippets/todos-web-manager/uninstall-launchd.sh", - "Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist", + "snippets/todos-web-manager/README.md", + "snippets/todos-web-manager/start.sh", + "snippets/todos-web-manager/install-launchd.sh", + "snippets/todos-web-manager/uninstall-launchd.sh", + "snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist", ".trae/documents/Todos-Web-Manager-Process-Oncall.md", ".trae/todos/todos.json" ] @@ -2490,7 +2490,7 @@ "区分火山 OpenClaw Web Manager 旧线与 CS-Notes/Codex 自用 TODO 控制台,避免继续混淆。", "产出 Web Manager v2 设计 brief,明确本地只读、阻塞面板、next-action、user-action queue、check-blockers。", "MVP 不暴露公网、不默认提供 Git/TODO 写接口、不读取或写入公司项目。", - "后续实现时优先复用 Notes/snippets/codex_todo_triage.py,而不是重建一套任务逻辑。" + "后续实现时优先复用 snippets/codex_todo_triage.py,而不是重建一套任务逻辑。" ], "links": [ ".trae/documents/Codex-TODO-Web-Manager-v2.md", @@ -2513,7 +2513,7 @@ ".trae/documents/Codex-TODO-Web-Manager-v2.md", ".trae/web-manager/server.py", ".trae/web-manager/index-enhanced.html", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/todos/todos.json" ] }, @@ -2527,7 +2527,7 @@ "created_at": "2026-05-04T11:18:02+0800", "links": [ ".trae/documents/Codex-TODO-System-v2.md", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".local/CODEX_TODO_TRIAGE_INDEX.md" ], "definition_of_done": [ @@ -2545,7 +2545,7 @@ "commit_hash": "", "changed_files": [ ".trae/documents/Codex-TODO-System-v2.md", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/todos/todos.json", ".local/CODEX_TODO_TRIAGE_INDEX.md" ] @@ -2562,7 +2562,7 @@ "AGENTS.md", ".local/AGENTS.md", ".trae/documents/Codex-TODO-System-v2.md", - "Notes/snippets/codex_todo_triage.py" + "snippets/codex_todo_triage.py" ], "definition_of_done": [ "根 AGENTS.md 明确推进TODO默认批推进", @@ -2581,7 +2581,7 @@ "AGENTS.md", ".local/AGENTS.md", ".trae/documents/Codex-TODO-System-v2.md", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/todos/todos.json", ".local/CODEX_TODO_TRIAGE_INDEX.md" ] @@ -2658,7 +2658,7 @@ "updated_at": "2026-05-04T13:02:07+0800", "background": "用户要求“推进仓库todo(你应该batch推进吧)”。当前 .trae/todos/todos.json 没有 pending / in-progress / user-blocked TODO,因此按空队列协议,从材料队列和流程沉淀中抽取一个同目标 batch:让 batch-plan 能直接读当前材料阅读顺序,并为下一篇 S18 Fine-Mem 产出精读入口。", "links": [ - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/documents/Codex-TODO-System-v2.md", ".trae/documents/Fine-Mem-Deep-Read.md", ".local/LEARNING_MATERIAL_CANDIDATES.md", @@ -2679,7 +2679,7 @@ "commit_hash": "", "changed_files": [ ".trae/todos/todos.json", - "Notes/snippets/codex_todo_triage.py", + "snippets/codex_todo_triage.py", ".trae/documents/Codex-TODO-System-v2.md", ".trae/documents/Fine-Mem-Deep-Read.md", ".local/LEARNING_MATERIAL_CANDIDATES.md", @@ -2789,14 +2789,14 @@ "definition_of_done": [ "AGENTS.md 明确推进项目默认以本仓库 TODO、文档、脚本、笔记为主。", ".local/AGENTS.md 降级 agent-harness 扫描为按需触发。", - "Notes/snippets/codex_todo_triage.py 的 batch-plan 区分 Codex 可推进 active TODO 与用户动作队列。", + "snippets/codex_todo_triage.py 的 batch-plan 区分 Codex 可推进 active TODO 与用户动作队列。", "batch-plan 空队列模板不再默认提示检查 agent-harness。" ], "progress": "✅ 已完成。batch-plan 现在在无 Codex-owned active TODO 时展示用户动作队列与本仓库可做 batch,不再把 user-blocked OV 任务当作 Codex 可推进任务,也不默认引导到 agent-harness。", "links": [ "AGENTS.md", ".local/AGENTS.md", - "Notes/snippets/codex_todo_triage.py" + "snippets/codex_todo_triage.py" ], "codex_triage": { "category": "completed_recent_observe", diff --git a/.trae/web-manager/WORKFLOW.md b/.trae/web-manager/WORKFLOW.md index 97b61344..d554aaac 100644 --- a/.trae/web-manager/WORKFLOW.md +++ b/.trae/web-manager/WORKFLOW.md @@ -143,7 +143,7 @@ cd .trae/web-manager **原始文件(CS-Notes):** ```markdown ### Git 操作 SOP -- 使用 Notes/snippets/todo-push.sh 和 Notes/snippets/todo-pull.sh +- 使用 snippets/todo-push.sh 和 snippets/todo-pull.sh - 白名单:Notes/、.trae/、创作/ ``` diff --git a/.trae/web-manager/templates/project_rules-generic.md b/.trae/web-manager/templates/project_rules-generic.md index 0d95fae6..d21afc25 100644 --- a/.trae/web-manager/templates/project_rules-generic.md +++ b/.trae/web-manager/templates/project_rules-generic.md @@ -19,7 +19,7 @@ - 拿到任务后第一时间标记为 in-progress - 新建 session 不会再次选择这个任务 * **【强制】任务执行可观测闭环**: - - **所有任务执行必须使用 task_execution_logger**(`Notes/snippets/task_execution_logger.py`) + - **所有任务执行必须使用 task_execution_logger**(`snippets/task_execution_logger.py`) - 开始任务前:调用 `logger.start_task(task_id)` - 执行中:记录关键步骤日志(`logger.log_info`、`logger.log_debug` 等) - 完成任务:调用 `logger.complete_task(task_id)` @@ -32,7 +32,7 @@ - **OpenClaw**:独立的 AI 助手系统,有自己的记忆(`.openclaw-memory/`)和规则(`.openclaw-memory/AGENTS.md`),主要用于自主推进 todo - **共享资源**:两者共享同一个工作空间,包括 todos.json、task_execution_logger 等 - **统一数据源**:都使用 `.trae/todos/todos.json` 作为任务数据源 - - **统一日志系统**:都使用 `Notes/snippets/task_execution_logger.py` 记录执行日志和指标 + - **统一日志系统**:都使用 `snippets/task_execution_logger.py` 记录执行日志和指标 - **避免冲突**:priority-task-reader 保证只返回 pending 状态的任务,拿到任务后第一时间标记为 in-progress * **OpenClaw 的核心价值**: - 可以在后台自主推进任务,不阻塞用户与 Trae 的交互 @@ -47,7 +47,7 @@ - 向用户报告进度,不要等待用户询问 - 进度报告要包含:百分比、预估剩余时间 * **Git 操作 SOP(第一原则:敏感内容绝对不能 push 到 git)**: - - **公用 Skill 能力**:使用 `Notes/snippets/todo-push.sh` 和 `Notes/snippets/todo-pull.sh` 作为标准 git 操作流程 + - **公用 Skill 能力**:使用 `snippets/todo-push.sh` 和 `snippets/todo-pull.sh` 作为标准 git 操作流程 - **todo-push.sh 白名单机制**:仅允许 `Notes/`、`.trae/`、`创作/` 三个文件夹 - **todo-push.sh 黑名单机制**:绝对禁止 `公司项目/` 文件夹 - **todo-push.sh 排除模式**:排除 `.trae/logs/`、`*.pyc`、`__pycache__/`、`.DS_Store` diff --git a/AGENTS.md b/AGENTS.md index 67a21ca9..c0346d60 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,7 +12,7 @@ - `创作/`:写作与观点表达 - `公司项目/`:公司相关 WIP,默认视为私密内容 - `.trae/`:todo、规则、web 管理、执行控制面 -- `.openclaw-memory/`、`.trae/openclaw-skills/`、`Notes/snippets/`、`.codex/`:agent / workflow / skill 实验区 +- `.openclaw-memory/`、`.trae/openclaw-skills/`、`snippets/`、`prompts/`、`.codex/`:agent / workflow / skill 实验区 工作时优先优化整个系统,而不是把文件当成彼此孤立的文档。 @@ -41,7 +41,7 @@ zsh -lc 'source ~/.zshrc; ' 只有一串命令明确依赖共享 shell 状态、且反复加载 `~/.zshrc` 成本明显时,才使用: ```bash -/Users/bytedance/CS-Notes/Notes/snippets/codex-persistent-shell.sh +snippets/codex-persistent-shell.sh ``` 使用规则: @@ -78,7 +78,7 @@ open -a Typora - 只有当材料本身就是 agent harness、agent runtime、memory、eval、workflow,或用户明确要求映射到当前职业主线时,才优先找 Agent infra / runtime 落点。 - 如果材料跨多个主题,拆分落点;如果主领域不确定,先给 1 个简短候选落点判断再写,不要带着单一路线硬落盘。 2. 再在 `Notes/` 中广搜最佳落点,并优先比较用户点名目标与材料主领域是否一致。 -3. 修改 Markdown 前先看结构,优先用 `Notes/snippets/markdown_toc.py`。 +3. 修改 Markdown 前先看结构,优先用 `snippets/markdown_toc.py`。 4. 优先插入现有 section;确实没有合适位置再新增小节。 5. 语言尽量压缩,不为“更整洁”而删除用户原内容。 6. 外部材料必须附来源链接。 @@ -120,7 +120,7 @@ open -a Typora ### D. Tooling / agent / web-manager -重点目录:`.trae/openclaw-skills/`、`.trae/web-manager/`、`.trae/web-manager/templates/`、`.openclaw-memory/`、`Notes/snippets/`、`.codex/` +重点目录:`.trae/openclaw-skills/`、`.trae/web-manager/`、`.trae/web-manager/templates/`、`.openclaw-memory/`、`snippets/`、`prompts/`、`.codex/` 处理这些目录时: @@ -200,9 +200,9 @@ open -a Typora 优先使用: -- `Notes/snippets/todo-pull.sh` -- `Notes/snippets/todo-push.sh` -- `Notes/snippets/todo-push-commit.sh` +- `snippets/todo-pull.sh` +- `snippets/todo-push.sh` +- `snippets/todo-push-commit.sh` commit / push 前必须: diff --git a/Notes/AI-Agent-Product&PE.md b/Notes/AI-Agent-Product&PE.md index 4f167f01..92842c72 100644 --- a/Notes/AI-Agent-Product&PE.md +++ b/Notes/AI-Agent-Product&PE.md @@ -1555,7 +1555,7 @@ openclaw agents list --bindings 4. 等待用户完成后,再标记为完成 2. **Git 操作 SOP 与安全防线** - - 必须使用 `Notes/snippets/todo-push.sh` 和 `Notes/snippets/todo-pull.sh` 作为标准 git 操作流程,不能直接用 git 命令 + - 必须使用 `snippets/todo-push.sh` 和 `snippets/todo-pull.sh` 作为标准 git 操作流程,不能直接用 git 命令 - todo-push.sh 白名单机制:仅允许 `Notes/`、`.trae/`、`创作/` 三个文件夹 - todo-push.sh 黑名单机制:绝对禁止 `公司项目/` 文件夹 - 验证步骤:每次 commit 前,先执行 `git status` 检查,或直接运行 `todo-push.sh` @@ -1954,6 +1954,8 @@ OrbitOS 是一个开源的 AI 生产力笔记系统,基于 Obsidian,主打 A **Workflow 显式化**:AFlow(ICLR 2025)证明 workflow 可以被搜索、比较与自动优化,小模型以 4.55% 的 GPT-4o 推理成本在特定任务上超越 GPT-4o;AgentFlow(ICLR 2026)证明系统级 in-the-flow RL 训练 planner 优于只替换更强模型。工程侧的 Dynamic Workflow 则把 loop 的计划、状态、分支与验收显式化为可读脚本,避免每次都依赖模型运行时 instruction following。详见 [AI-Applied-Algorithms.md - Agent + Workflow](./AI-Applied-Algorithms.md) +这一组材料可以按五层理解:Dynamic Workflow 管一条可重放执行路径;Flowtrace 管可复用的任务方法、步骤证据和局部重跑;LoopX 管多轮长程目标和 gate;Agent Teams 管多 agent 协作 runtime;oh-my-pi / mini-SWE-agent 则形成工具层的两端:前者把 LSP、DAP、PTY、browser、memory、subagent、internal URL 都做成 batteries-included harness,后者坚持最小 bash loop。Humanize / RLCR 和 KDA 更像夹在 workflow 与 control plane 之间的单任务 loop harness:前者把 plan、review、summary、lesson 和退出 gate 串成工程纪律,后者把性能敏感任务变成 contract、candidate、benchmark、profile、promotion decision 的证据循环。真正要判断的不是“哪个 agent 更强”,而是哪些能力应该上升为 runtime primitive,哪些能力应该继续留给模型和 prompt。 + #### Dynamic Workflow:把 loop 编译成可重放脚本 > 来源:[Addy Osmani - Loop Engineering](https://addyosmani.com/blog/loop-engineering/)、[Claude Code Dynamic workflows docs](https://code.claude.com/docs/en/workflows)、[Anthropic - Introducing dynamic workflows in Claude Code](https://claude.com/blog/introducing-dynamic-workflows-in-claude-code) @@ -1970,6 +1972,160 @@ Dynamic Workflow 的核心不是“多开 sub-agent”,而是把计划从模 对 Agent Harness 的启发:长期运行 agent 的主战场不是写更长 prompt,而是把任务队列、脚本状态、phase/log、验证 gate、用户插手点和回放记录做成一等公民。loop 越自动,越要保留 human-in-the-loop 的两个接口:关键岔路主动问人,中途定期吸收用户 steering;否则无人值守只是在无人值守地犯错。 +#### Flowtrace:把 agent 工作从 transcript 变成 git-backed trace + +> 来源:[README](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/README.md#L23-L94)、[trace folder layout](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/README.md#L153-L175)、[PHILOSOPHY](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/docs/trace/PHILOSOPHY.md#L3-L12)、[soft execution model](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/docs/trace/PHILOSOPHY.md#L70-L132)、[CLI reference](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/docs/trace/CLI.md#L7-L19)、[`Trace` / `StepSpec`](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/crates/flowtrace-core/src/schema.rs#L7-L77)、[`RunState`](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/crates/flowtrace-core/src/state.rs#L13-L35)、[`reply` / evidence schema](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/crates/flowtrace-core/src/output.rs#L12-L49)、[`make-trace` skill](https://github.com/AIScientists-Dev/Flowtrace/blob/1571c76365c02c13d50b943cedd36e3b21865757/skills/make-trace/SKILL.md#L30-L50)。读取 commit `1571c76`,整理时间:2026-07-04。 + +**定位**:Flowtrace 不是 workflow engine,也不是另一个聊天 UI,而是把 agent 工作过程外部化为一个 **git-backed、file-backed、可检查、可复用、可局部重跑的 trace artifact**。它解决的是高价值知识工作里 chat transcript 的四个问题:太长看不住、结果难核验、中间假设难 steer、成功经验会蒸发在 scrollback 里。 + +核心抽象: + +```yaml +flowtrace_contract_v0: + trace_root: + trace.json: + id: + title: + description: + version: + steps: + "": + name: + does: + from_steps: [] + assets: [] + deliverable: + description: + assets: [] + steps//STEP.md: per-step contract + implementation hints + resources/: shared static inputs + runs//: + state.json: single source of truth for run status + replies/NNNN.json: append-only structured-output stream + /: runtime files, official assets, scratch +``` + +设计动机: + +- **把 composition knowledge 从 prompt / transcript 里拿出来**:Skill 复用的是动作,Workflow 复用的是执行控制流,Flowtrace 复用的是“这类任务该如何拆、哪些步骤并行、哪些产物喂给下游、最终交付物是什么”。它自称 soft scaffold for cognition,重点是方法图,不是调度引擎。 +- **用文件和 git 代替口头进度**:每个 step 写出文件,`state.json` 记录 status / assets,`replies/NNNN.json` 记录结构化结论和 evidence;每次 CLI write 都只提交声明路径,不做 `add -A`。这让 run 的中间过程可审计、可时光回看,也让“我做完了”变成 asset + evidence,而不是文本声明。 +- **把 steer 从重跑整条 chat 变成重跑局部 DAG**:`done` 不是终态,step 可以重新进入 `running`;`flowtrace show --downstream ` 给出拓扑有序的下游步骤。它刻意不把 stale flag 写进 state,因为 trace 是软方法图,传播责任属于 executor。 +- **降低 agent 的 context 压力**:agent 不必背完整历史,只要按结构读 `trace.json`、当前 step 的 `STEP.md`、上游 declared assets 和当前 run state。结构化读取替代线性 scrollback,适合长 session、复用 runbook、技能沉淀和高风险报告。 + +`make-trace` skill 暴露了它真正难的部分:不是写 JSON,而是把一个 SKILL.md、runbook、chat log 或已完成任务 **lift 成 faithful DAG**。它要求判断哪些认知动作该升成 step,哪些只是 step 内部规则;要求独立二次核验 DAG 是否忠于来源;还强调互斥 deliverable 应拆成多个 trace,而不是在一个 trace 里塞条件分支。 + +评价: + +- **强项**:它非常适合“会重复、要核验、要交给别人或未来自己复用”的任务,例如投研、尽调、安全 gate、复杂调研、bug-fix learning loop。相比普通 agent trace / observability,它更接近 procedure memory:把过程、证据、交付物和局部重跑边界保存成可读文件。 +- **边界**:Flowtrace 不是 executor,不负责调度、权限、预算、sandbox、grader,也不强制 step output schema。它的 soft 设计避免过早把认知方法硬编译成 workflow,但也意味着生产级长程 agent 仍需要外层 control plane:谁来执行、何时执行、失败如何 gate、staleness 如何强制传播、哪些 evidence 足以验收。 +- **和 Dynamic Workflow 的差异**:Dynamic Workflow 是 execution artifact,适合阶段明确、可自动执行、需要确定性 replay 的任务;Flowtrace 是 knowledge artifact,描述“这类任务如何做”,允许 executor 跳过、重排、替换实现。前者管路径,后者管方法和证据。 + +对 LoopX / Agent Harness 的启发:Flowtrace 可以作为 `task_trace_artifact_v0`,被 LoopX 这类 control plane 引用为某个 goal / todo 的工作账本。短期值得借的是:`trace.json` 的 step/dependency/deliverable schema、`state.json` 的 run SOT、append-only replies、path-backed evidence、exact-path git commit、downstream rerun 查询,以及从成功 run 反向沉淀 procedure trace 的 `make-trace` 流程。 + +#### Humanize:用 Codex review 把 Ralph Loop 变成工程闭环 + +> 来源:[README](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/README.md#L7-L26)、[Quick Start](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/README.md#L42-L77)、[Usage / Plan Understanding Quiz](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/docs/usage.md#L5-L40)、[`start-rlcr-loop` command](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/commands/start-rlcr-loop.md#L13-L195)、[`setup-rlcr-loop.sh`](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/scripts/setup-rlcr-loop.sh#L821-L907)、[`loop-codex-stop-hook.sh`](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/hooks/loop-codex-stop-hook.sh#L785-L940)、[`codex review` phase](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/hooks/loop-codex-stop-hook.sh#L1209-L1316)、[`ask-codex.sh`](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/scripts/ask-codex.sh#L244-L415)、[BitLesson](https://github.com/PolyArch/humanize/blob/0ec921a36b4365df503511c5567bbd3e02db0df5/docs/bitlesson.md#L25-L50)。读取 commit `0ec921a`,整理时间:2026-07-05。 + +**定位**:Humanize 是一个 Claude Code plugin,核心工作流叫 RLCR(Ralph-Loop with Codex Review)。它不是新的代码生成模型,也不是完整 agent control plane,而是把“Claude 一轮轮实现”放进 **plan gate + stop hook + independent Codex review + code review phase** 的工程闭环里:Claude 负责实现,Codex 负责独立审查 summary / diff,问题反馈回下一轮,直到 acceptance criteria 和 code review 都过。 + +核心抽象: + +```yaml +humanize_rlcr_contract_v0: + input: + idea: /humanize:gen-idea + plan: /humanize:gen-plan --input draft.md --output plan.md + refined_plan: /humanize:refine-plan --input plan.md + preflight: + plan_compliance_check: repo relevance + no branch-switching + plan_understanding_quiz: two MCQs before execution + loop_state: + root: .humanize/rlcr// + state: state.md + plan_backup: plan.md + goal_tracker: goal-tracker.md + round_contract: round-N-contract.md + round_summary: round-N-summary.md + review_result: round-N-review-result.md + phases: + implementation: Claude implements, then Codex reviews summary via codex exec + review: codex review --base checks actual code changes + finalize: cleanup / simplification before exit + memory: + bitlesson: .humanize/bitlesson.md + per_round_delta: Action none|add|update +``` + +设计动机: + +- **Ralph Loop 的问题不是“不够循环”,而是“循环会放大错误计划”**:Humanize 把这个称为 wishful coding。`start-rlcr-loop` 前先做 plan compliance check,再用独立 agent 出两道 plan understanding quiz;quiz 不强制阻断,但制造一个很有价值的摩擦:用户必须知道自己准备让 agent 执行什么。 +- **把 review 变成退出 gate,而不是靠 Claude 自觉**:Claude 想结束时,Stop hook 会检查 summary、round contract、BitLesson Delta、todo 是否完成、branch 是否漂移、plan 是否被改、工作区是否干净、文件是否过大;随后用 `codex exec` 审查本轮 summary。只有 Codex 最后一行给出 `COMPLETE`,才进入代码审查阶段。 +- **把“实现完成”与“代码质量过关”拆成两阶段**:Implementation Phase 关注是否按 plan / goal tracker 推进;Review Phase 调 `codex review --base ` 看真实 diff,并用 `[P0-9]` severity marker 判断是否继续循环。这个设计避免 summary 自洽但代码有问题,也避免一开始就让 code review 承担所有目标对齐职责。 +- **用 BitLesson 做 project-level 过程记忆**:每轮 summary 必须包含 `## BitLesson Delta`,记录是否新增 / 更新项目经验。它试图解决 Ralph Loop 的另一个问题:同一个项目里 agent 反复踩同一个坑,但经验没有进入下一轮。 + +评价: + +- **强项**:它是非常现实的 AI coding harness 样本。价值不在“Claude + Codex”这个组合本身,而在把 plan 理解、独立审查、退出拦截、diff review、过程记忆、monitor dashboard 全部做成可运行协议。它把 Ralph Loop 从“脚本不断重启 Claude”升级成“每轮必须留下 summary / contract / review / lesson”。 +- **边界**:它强依赖 Claude Code hooks、Codex CLI、shell 脚本和 Markdown 状态文件;很多 gate 仍通过文本 marker、文件命名和 hook 行为维持,不是强类型事件系统。它也不是 LoopX 那类多目标 control plane:同一 repo 默认只允许一个 active loop,缺少 durable task ledger / permission lease / budget ledger / typed artifact store。 +- **和 Flowtrace / LoopX 的差异**:Flowtrace 保存“方法图和证据”,Humanize 驱动“具体 coding loop 的准入、执行、review 和退出”;LoopX 管多目标长程状态,Humanize 更像单个 coding task 的 loop harness。三者可以组合:LoopX 选任务和 gate,Humanize 跑 coding loop,Flowtrace / run log 保存可复用方法和证据。 + +对 LoopX / Agent Harness 的启发:短期可借 `plan_understanding_gate_v0`、`round_contract_v0`、`cross_model_review_gate_v0`、`mainline_progress_verdict`、`review_phase_by_base_commit`、`bitlesson_delta_v0`。但实现上不要照搬 hook-script + Markdown marker 作为唯一事实源,更好的方向是把这些变成 typed event / state transition / artifact ref:`summary_submitted -> summary_reviewed -> code_review_started -> review_issues_found -> finalize_ready`。 + +#### Kernel Design Agents:把 CUDA kernel 优化变成 evidence-backed candidate loop + +> 来源:KDA [README](https://github.com/mit-han-lab/kernel-design-agents/blob/dda6be3cf1baedd3ed9c76511ef02f72243cc14c/README.md#L3-L70)、[agent-flow](https://github.com/mit-han-lab/kernel-design-agents/blob/dda6be3cf1baedd3ed9c76511ef02f72243cc14c/docs/agent-flow.md#L3-L50)、[basic-flow prompt](https://github.com/mit-han-lab/kernel-design-agents/blob/dda6be3cf1baedd3ed9c76511ef02f72243cc14c/prompts/basic-flow.md#L5-L39)、[CLAUDE.md](https://github.com/mit-han-lab/kernel-design-agents/blob/dda6be3cf1baedd3ed9c76511ef02f72243cc14c/CLAUDE.md#L3-L33)、KernelWiki [README](https://github.com/mit-han-lab/KernelWiki/blob/2777d18ffb3a3d682d8f25a3e3b8864d925a5ff1/README.md#L37-L126) / [SKILL.md](https://github.com/mit-han-lab/KernelWiki/blob/2777d18ffb3a3d682d8f25a3e3b8864d925a5ff1/SKILL.md#L14-L112)、ncu-report-skill [README](https://github.com/mit-han-lab/ncu-report-skill/blob/1cf238d6b41c79bd35041192506c4d45e765a3f1/README.md#L10-L40) / [SKILL.md](https://github.com/mit-han-lab/ncu-report-skill/blob/1cf238d6b41c79bd35041192506c4d45e765a3f1/SKILL.md#L14-L91)。读取 KDA commit `dda6be3`,整理时间:2026-07-05。 + +**定位**:Kernel Design Agents(KDA)不是一个完整 CUDA benchmark harness,也不是“让 agent 自动写 kernel”的魔法仓库,而是一个很小的 **agent-centric workflow reference**:面向性能敏感 CUDA kernel 任务,让 coding agent 做调研、实现、验证、测量和迭代。主仓库刻意保持 task-agnostic;真实代码、测试、数据集、benchmark 脚本、私有规则和生成产物都放到独立 task workspace。 + +核心抽象: + +```yaml +kda_contract_v0: + task_contract: + objective: + inputs_outputs: + correctness_requirements: + constraints: + validation_command: + evaluation_command: + promotion_criteria: + workspace_artifacts: + docs/draft.md: first plan draft + docs/plan.md: executable plan + benchmark.csv: measurable result log + candidates.jsonl: candidate name, parent link, status + profile/: profiler outputs and report summaries + runs_or_outputs/: generated artifacts + loop: + - inspect workspace and baseline + - write draft before editing + - convert draft into executable plan + - implement one candidate at a time + - validate correctness + - measure target metric + - record evidence + - promote | revise | reject + optional_skills: + KernelWiki: Blackwell/Hopper kernel knowledge retrieval + ncu_report_skill: Nsight Compute profiling and diagnosis + humanize: plan generation and implementation loop +``` + +设计动机: + +- **性能优化是实验搜索,不是一次性生成**:kernel 任务天然有 correctness、shape、硬件、编译器、profile、指标噪声和 promotion criteria。KDA 把 agent 从“写一个更快版本”约束成“提出一个 candidate、证明 correctness、测指标、记录证据、决定晋升或淘汰”。 +- **把 reusable workflow 和 task workspace 分离**:KDA 主 repo 只放通用流程和 starter prompt,下游工作区拥有私有 evaluator、数据、生成 kernel、benchmark log 和 profile。这个设计避免把一次比赛/私有 harness 固化进通用模板,也让 workflow 可以迁移到 compiler pass、runtime kernel、infra change 等其他性能敏感任务。 +- **把 domain knowledge 做成 skill,而不是塞进 prompt**:KernelWiki 是 Blackwell / Hopper kernel 优化知识库,按 `sources -> wiki -> queries` 三层组织,带 confidence、reproducibility、version-sensitive claim 和 upstream source trace;ncu-report-skill 则把 Nsight Compute 工作流拆成 run directory、standalone harness、full/source 两类 profile、Python 解析、六个分析维度、diagnosis playbook 和 evidence-backed report。KDA 的 agent 不是靠长 prompt 背硬件知识,而是在需要时调用可追溯知识库和 profiler 分析器。 +- **核心文化是 evidence-before-change**:ncu-report-skill 的黄金规则是 `Profile -> Diagnose -> Plan`,要求不要先猜,不要先改,不要写泛泛建议,而要拿具体 metric、stall hotspot、timeline、rule engine speedup 和 input distribution 来支撑判断。这正是 agent 做底层工程时最容易缺失的纪律。 + +评价: + +- **强项**:KDA 很小,但抓住了 agent 做 hard engineering 的关键:外部世界有可测指标时,agent 应该被设计成实验 runner,而不是聊天式建议器。`candidate ledger + benchmark/profile evidence + promotion rule` 比“多轮自我反思”更接近工程真实闭环。 +- **边界**:它目前仍是早期流程原型,主 repo 几乎没有 executor / scheduler / typed state / benchmark adapter / parallel search / budget control。是否有效高度依赖下游 workspace、GPU 环境、evaluator 质量、skill 是否被正确调用,以及人类是否能及时修正错误方向。它更像 runbook + prompt + skill bundle,不是 autonomous kernel-search system。 +- **和 Humanize / Flowtrace / LoopX 的差异**:Humanize 负责单个 coding loop 的 plan/review/exit gate;Flowtrace 保存方法图和证据;LoopX 管多目标长程状态;KDA 则是一个具体垂直场景里的 performance candidate loop。它的通用价值在于把“候选实现如何晋升”说清楚,而不是发明新 agent runtime。 + +对 LoopX / Agent Harness 的启发:KDA 可以抽象成 `performance_candidate_loop_v0`:`task_contract -> baseline -> candidate -> validation_result -> eval_metric -> profile_evidence -> promotion_decision`。如果做 AI infra 开源贡献、LLM serving benchmark、agent runtime profiling,应该借 KDA 的思想:每个 agent 改动都必须有 candidate parent、可复现命令、指标表、profile/trace evidence 和明确的 promote/reject reason;否则长程 agent 只是在堆实现,没有形成可学习的实验历史。 + #### Waiting primitive:yield_time_ms 与 /loop 的设计差异 > 来源:用户整理;Claude Code 官方文档:[Commands](https://code.claude.com/docs/en/commands)、[Run prompts on a schedule](https://code.claude.com/docs/en/scheduled-tasks),核验时间:2026-06-30。 @@ -2068,6 +2224,34 @@ Hooks 是这套设计最值得借鉴的地方:`TaskCreated` 可以做任务准 - task completed 不是文本声明,而是 artifact refs + validation refs + event history。mailbox 只传协调消息,长期事实必须落在 ledger / event store / artifact store。 - Agent Teams 更像高质量产品原型和设计样本,不是生产级 orchestration kernel。它仍暴露出 resume / rewind、状态延迟、关停、单 lead、不可嵌套、权限粒度、leader transfer 等边界;真正的长程 agent control plane 需要把这些能力外置成 durable state 和可回放 trace。 +#### oh-my-pi:batteries-included coding agent runtime + +> 来源:[can1357/oh-my-pi README](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/README.md#L100-L178)、[tool list / provider / native runtime](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/README.md#L220-L490)、[`bash` tool runtime](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/docs/tools/bash.md#L21-L76)、[`task` subagent runtime](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/docs/tools/task.md#L27-L99)、[`hashline` edit tool](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/docs/tools/edit.md#L21-L48)、[`memory`](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/docs/memory.md#L1-L98)、[`compaction`](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/docs/compaction.md#L24-L142)、[`rulebook`](https://github.com/can1357/oh-my-pi/blob/b258c790a5b9f584da2a6ac34e6365fde3a1ee8e/docs/rulebook-matching-pipeline.md#L29-L80)。读取 commit `b258c79`,整理时间:2026-07-04。 + +**定位**:oh-my-pi 不是“更花哨的终端聊天”,而是一个终端优先、IDE-aware、工具面极宽的 coding agent runtime。它继承 Pi 的交互式终端形态,但把编码 agent 常见的高频能力内建成一套统一 harness:文件读写、hash-anchored edit、LSP、DAP、persistent bash / PTY、browser、web search、GitHub、subagent、memory、compaction、rules、session fork / resume / share、ACP / RPC / SDK。 + +设计动机可以概括为三类成本: + +- **降低工具调用可靠性成本**:与其让模型反复拼 `rg`、`sed`、`gh`、浏览器、调试器和补丁语法,不如把它们变成一致的 tool surface。`read` 同时覆盖本地文件、URL、PDF、SQLite、archive、notebook 和 `pr://` / `agent://` / `memory://` 等 internal URL;模型只学一个“像文件一样读”的接口。 +- **降低输出 token 与编辑失败成本**:`hashline` 要求模型引用 `[PATH#TAG]` 和行号做 `SWAP / DEL / INS`,而不是重打一大段上下文;snapshot tag 可以发现 stale anchor,no-op guard 可以阻止模型在同一个无效补丁上打转。它把“编辑定位”从自然语言相似匹配压成可验证协议。 +- **降低长程状态漂移成本**:subagent 有独立 child session、artifact、`agent://` 输出、`history://` 轨迹、可选隔离 workspace 和 idle / parked 生命周期;memory 把跨 session 的技术决策、流程和坑点压成 project-scoped guidance,但明确要求优先相信当前 repo 证据;compaction 把旧历史变成 first-class session entry,而不是把摘要混在普通对话里。 + +关键机制: + +- **Tool surface 大而统一**:README 列了 32 个工具,但它不是简单堆功能;核心设计是把外部世界收敛到少数熟悉接口:`read` 读一切,`bash` 跑进程,`task` 生成子 agent,`resolve` 接受预览动作,`search_tool_bm25` 在隐藏工具索引里按需唤回工具。 +- **Native runtime 取代 shell 拼装**:搜索、shell、AST、highlight、PTY、image decode、token counting 等热路径用 Rust / N-API 内建,避免依赖系统上是否有 `rg/find/bash`,也减少 fork/exec 和跨平台差异。它的判断是:agent runtime 的可靠性不该寄托在用户机器上的零散二进制。 +- **Bash / PTY / async job 分层**:`bash` 支持 foreground、client terminal、PTY、explicit background、auto-background。长任务不必全靠 prompt 写 `while sleep`,而是可以变成 job id、progress update、completion injection 和 artifact spill。 +- **Subagent 是有生命周期的 runtime 对象**:`task` 可以 batch spawn,支持 schema / yield、isolated workspace、patch / branch merge、async job、concurrency semaphore、idle TTL、park / revive;子 agent 不继承完整对话历史,只拿共享 context、workspace、local artifact 和允许工具。 +- **规则与记忆是 runtime injection,不只是 prompt 静态文本**:Rulebook 统一 `.omp`、Cursor、Windsurf、Cline 等规则来源,并支持 Time Traveling Stream Rules:当输出触发规则时中断流、注入提醒、从相近位置重试。memory 则被标注为 heuristic,必须和当前 repo evidence 配对使用。 + +评价: + +- **强项**:它非常适合作为 agent runtime 设计样本。尤其值得学的是 internal URL、hash-anchored edits、subagent artifact protocol、async job、memory 可信度约束、rules 的动态注入,以及“工具多但接口少”的产品手法。 +- **代价**:这是一条 maximalist 路线,初始上下文、工具说明、配置面、native runtime 和维护成本都会变重。工具面越宽,模型越需要更好的 tool selection;否则 `search_tool_bm25`、tool gating、role-based model routing 这些机制本身又会变成新的复杂度来源。 +- **与 mini-SWE-agent 的对照**:mini-SWE-agent 押注“强模型 + 极简 bash loop”;oh-my-pi 押注“把 agent 常踩坑的工具能力都产品化”。二者不是谁消灭谁,而是两个边界测试:当任务短、repo 简单、模型强时,极简 harness 更稳;当任务需要 LSP/DAP/browser/memory/subagent/跨会话协作时,缺 runtime primitive 会把复杂度推回 prompt 和临时脚本。 + +对 LoopX / Agent Harness 的启发:短期最值得借的是 protocol 形状,而不是整套大 harness。可以优先沉淀 `artifact:// / agent:// / memory:// / pr://` 这类统一 read surface、hash-based edit evidence、job lifecycle event、subagent yield schema、memory exposure trace、rule injection event;等真实 call site 出现,再决定要不要复制 LSP / DAP / browser / native PTY 这些更重能力。 + #### 极简 Agent 架构:mini-SWE-agent 的启示 > 来源:[mini-SWE-agent](https://github.com/SWE-agent/mini-SWE-agent) 源码阅读,2026-04-28 @@ -4805,6 +4989,59 @@ for hat in queue: - Computer Use 的价值在于补 CLI / API 不能覆盖的 GUI 环节,但应优先用于 scope 小、可回滚、可检查的任务。 - Automations 适合做 thread heartbeat 或独立后台任务;和 skill 配合时,关键是把任务描述、报告条件、停止条件写得足够 durable。 +#### Codex 产品工作形态:taste、dogfooding 与模型时机 + +> 来源:[Founder Park 微信文章](https://mp.weixin.qq.com/s/wJrUsBSs0owDascwDZBd-w),2026-07-02,已读正文;原访谈:[Lenny's Newsletter: OpenAI Codex lead on the new shape of product work](https://www.lennysnewsletter.com/p/openai-codex-lead-on-the-new-shape),[podcast transcript](https://podscripts.co/podcasts/lennys-podcast-product-career-growth/openai-codex-lead-on-the-new-shape-of-product-work-andrew-ambrosino)。补充参考:[Justin M. Berg - The primal mark](https://justinmberg.com/research-pathdependence/)、[Linear](https://linear.app)、[LogRocket - Linear design](https://blog.logrocket.com/ux-design/linear-design/)、[Frontend Horse - The Linear Look](https://frontend.horse/articles/the-linear-look/)。 + +这篇访谈的核心不是“PM 会不会消失”,而是 **AI 把实现成本降到很低之后,产品流程被倒置了**。过去实现昂贵,所以先调研、PRD、设计、原型,再进入工程;现在一个可运行、看起来像上线版的原型很便宜,真正稀缺的变成:该不该做、做到什么形态、什么时候做、用什么媒介表达、怎么从 90 个候选里折叠出正确方向。 + +几个可复用判断: + +1. **Primal mark:原型也是第一笔** + - `primal mark` 来自 Justin M. Berg 的创造力研究,指创意生成中最开始的那一点内容,它会锚定后续方向。熟悉的第一笔更容易产生有用但不新颖的方案;新颖的第一笔更容易产生新颖但不够有用的方案;更好的路径是先从新颖处开始,再注入熟悉元素提高可用性。 + - AI 时代的危险是:探索阶段的原型已经能做得像上线产品,团队容易被视觉完成度锚定,以为它已经过了产品、设计、商业和用户验证。正确做法是把 **artifact fidelity** 和 **decision maturity** 分开标注:原型可以很精致,但仍可能只是早期探索。 + +2. **“去年每个新网站都在抄 Linear”** + - 这里说的网站是 [Linear](https://linear.app):面向现代软件团队的产品开发 / issue / roadmap / AI agent 工作流工具。Andrew 的意思不是 Linear 设计不好,而是如果模型每次都输出 Linear 风格,说明它只学会了当下中位数审美,还没有真正的设计判断。 + - Linear 风格大致是:暗色背景、强对比排版、极细边框、产品截图而非人物照片、bento grid、网格纹理、微妙渐变 / glow / glassmorphism、少量 CTA、单向滚动、信息线性展开。LogRocket 把它总结为顺序清晰、认知负担低、低噪声、高可读的 SaaS aesthetic;Frontend Horse 则从暗色、彩色模糊光、bento、细线、电路线、网格背景、边框高光等视觉材料拆解。 + - 可偷的是原则,不是皮肤:Linear 的设计之所以成立,是因为它和产品价值一致,即速度、秩序、低噪声、工作流推进。如果一个产品没有这种内核,只复制暗色、渐变和细线,最后只会变成“更高级的同质化模板”。 + +3. **产品的 baby 版本** + - `baby Cursor / baby Codex` 指一个大幅简化的代码库,能模拟正式产品的关键交互,但足够轻,适合设计师和 PM 快速 vibe code 交互方案。 + - 它不是玩具 demo,而是新的设计媒介:把交互探索放进可运行软件里,同时避开生产代码复杂度。关键仍是阶段意识:baby 版本用于探索“侧边栏是否该这样动”“面板是否该这样出现”,不是证明需求已经成立。 + +4. **无限 tokens 时代,稀缺的是 taste** + - 最有价值的人不只是会写代码,而是能从想法到完成全程推动,并且有品味判断“这个很棒”。taste 不只是审美,还包括系统位置、方向判断、表达方式、交互语义和抽象能力。 + - 当 tokens、原型和文档都近乎无限,组织最怕的不是做不出来,而是制造大量垃圾内容、垃圾原型、垃圾功能请求。此时产品人的价值从“催产出”转向“滤噪声、折叠方向、定义边界、守住质量”。 + +5. **Dogfooding 是不舒服的产品塑形机制** + - Codex 应用被 dogfooding 循环塑造:团队刻意尽可能多地在 Codex 里完成自己的工作,即使它暂时不是最好的工具。更极端的是,有时不直接优化内部流程,而是逼产品变好,让产品最终能支撑这些流程。 + - 这种 dogfooding 的价值不在“吃苦”,而在把真实工作流痛点变成产品 primitive:日报、状态跟踪、浏览器使用、Computer Use、memory、automation、connector 边界,都是先从个人系统里长出来,再判断哪些应该变成一级体验。 + +6. **同一个东西可能要发布六次,直到模型能力追上** + - AI 产品的可行性不只取决于功能形态,还取决于当前模型是否足够聪明。Codex web 的“给任务 -> agent 去做 -> 回来给结果”形态并不荒谬,只是当时模型不够好;Claude Code 更本地、更诚实、更会停下来问人,因此更匹配当时能力边界。 + - 规划上应保留一个 `parking lot`:把感兴趣方向做成原型,判断“现在是否可行”;暂时不行的不要永久杀死,等模型能力跃迁后重新拿出来试。越近的计划越具体,越远的计划越模糊,否则就是虚假精度。 + +7. **探索和打磨不能全压给同一个机制** + - 一个团队很难同时持续颠覆自己,又长期专注质量、性能、细节和一致性。AI 产品更需要双系统:一边是自下而上的探索文化,允许新形态颠覆既有产品;一边是主线产品的 polish、可靠性、质量门禁。 + - 组织设计上,不能只说“每个人都是 builder”。角色边界可以变软,但产品、工程、设计、研究仍是有最佳实践的专业。更合理的形态是角色重叠增加,但每个人仍在某个能力分布上形成深度。 + +8. **Codex 的愿景:工作大本营,而不是一个更大的矩形** + - Codex 的方向不是把所有事情塞进一个屏幕矩形里,而是成为开始工作、结束工作、管理自动化流程的大本营。它可以调用专业工具:Excel 仍负责财务模型,Premiere Pro 仍负责视频编辑,Notion / Linear / Salesforce 仍负责各自专业对象;Codex 负责协调、自动化、连接和复盘。 + - 这解释了应用内浏览器、Chrome 扩展、Computer Use、connector 的共同方向:未来很多 SaaS 不是由人打开网页逐页操作,而是由 agent 在 Codex 里“由内而外”地调用。难点是边界设计:什么时候用 connector,什么时候用内置浏览器,什么时候接管 Chrome,什么时候退到 Computer Use。 + +9. **工程实践:会写代码不稀缺,会删代码和拒绝功能更稀缺** + - 当 AI 写代码比例接近 100%,指标不再是“AI 写了多少”,而是代码是在监督下还是无人监督下写的。当前模型天然倾向增加复杂度,所以 autonomous development 的关键短板是让模型学会删代码、降复杂度、合并重复抽象。 + - 同样地,feature request 也需要 harness:判断哪些值得做、哪些应该忽略、哪些应该合并后重新定义。产品型 agent 的评估不能只看“能否实现请求”,还要看是否能维护抽象边界、降低系统复杂度、拒绝错误方向。 + +对 Agent Harness / OpenClaw 的直接启发: + +- `feature_request_triage_v0` 应区分 `do / ignore / merge / reframe / park_until_model_capability`,而不是把每个请求都转成任务。 +- `prototype_maturity_v0` 应同时记录 `fidelity` 和 `decision_maturity`,避免高保真原型伪装成已验证方向。 +- `dogfood_loop_v0` 应把个人工作流痛点沉淀成 candidate primitive,再通过复用率、失败模式、人工介入点判断是否产品化。 +- `code_cleanup_agent_v0` 的目标不是“继续改进”,而是删除 dead code、合并重复抽象、降低状态数、保留回归测试和证据链。 +- `model_capability_gate_v0` 应允许一个 feature 现在暂停、未来重试;失败不只归因于产品形态,也可能归因于模型能力窗口未到。 + ### AI Coding 的使用技巧 #### Agent Skills @@ -4962,6 +5199,8 @@ Agent Skills 是可扩展 AI 助手能力的模块化技能包,补充特定领 Ralph Loop 是让 AI 持续工作的循环机制。 +2026-07 补充:Humanize / RLCR 可以看作 Ralph Loop 的工程化版本。它不是只让 Claude Code 任务做完后自动重启,而是在每轮退出前加入 plan understanding、round summary、goal tracker、Codex summary review、`codex review --base` 和 BitLesson 过程记忆;详见 [Agent 应用技术架构 - Humanize](#humanize用-codex-review-把-ralph-loop-变成工程闭环)。 + * 核心思想: * 维护一个任务列表 * AI 从列表中逐个取出任务执行 diff --git a/Notes/AI-Applied-Algorithms.md b/Notes/AI-Applied-Algorithms.md index e1a86fe9..22982cce 100644 --- a/Notes/AI-Applied-Algorithms.md +++ b/Notes/AI-Applied-Algorithms.md @@ -1829,6 +1829,30 @@ model / agent policy - 设计 CUA server 时,不能只追求能点能打字;更重要的是 sandbox、allowlist、human gate、trace、screenshot retention、state reset 和可回放。 - 对 agent benchmark 来说,比较单位不只是 `model`,而是 `model + CUA server / harness + environment`。 +##### CUA 的单点任务边界:高复杂 GUI 自动化不等于长程价值交付 + +> 来源:[记一个我被Claude Fable 5震撼的瞬间。](https://mp.weixin.qq.com/s/L6R_SPWlOBv6dI0wWWHQrg),数字生命卡兹克,2026-07-03。来源状态:已读正文;以下把文章作为 CUA / agent 执行案例,不验证其中模型命名和账号侧细节。 + +文章案例称,agent 从“提升 SEO / GEO”目标出发,调研网站流量和爬虫访问,推翻 Cloudflare 方案,进入云厂商控制台,找到人工工单入口,提交并追问 CDN 白名单和回源配置,识别官方请求头方案里的伪造风险,补共享密钥校验,切换 DNS,再写运维文档、提交代码和证书续期手册。 + +这个任务复杂度很高,因为它跨了浏览器 GUI、云控制台、工单系统、服务器、DNS / CDN、代码仓库和运维文档。但它更适合归类为 **高复杂度单点任务**,还不是完整的 long-running value delivery。CUA 扩大了 agent 的“眼和手”,让它能穿过 GUI-only、API 缺失和人工入口;长程价值交付还要求目标账本、状态记忆、预算、权限、证据链、验收、复盘和后续触发机制。 + +| 层级 | 案例里的能力 | 仍然缺的长程控制面 | +| --- | --- | --- | +| Execution | 浏览器操作、控制台配置、服务器检查、工单交互、DNS 切换 | sandbox、权限分级、敏感动作 gate、可回放 action trace | +| Decision | 自主选 CDN 方案、质疑旧方案、识别安全风险 | 决策依据记录、可审计 trade-off、可撤销方案 | +| Evidence | 请求量、配置结果、代码提交、运维文档 | 统一 evidence ledger、验收标准、失败归因、长期 SLA | +| Continuity | 写下证书续期步骤和后续提醒 | durable reminder、owner、heartbeat、到期前自动检查和恢复路径 | + +因此评价这类 CUA 案例时,不应只看“是否完成了炫酷流程”,而要问: + +- 人类到底做了几次不可替代的业务决策?这些决策有没有被沉淀为 constraint / policy / procedure? +- 每个敏感动作有没有 gate、证据和 rollback path,例如提交工单、改 DNS、改限流、写密钥? +- 成功经验是否能被复用到下一次同类任务,而不是只留下自然语言故事? +- 两个月后的证书续期、配置漂移、供应商策略变化,是否会被系统重新唤醒并验证? + +一句话:**CUA 是长程 agent 的执行面,不是长程 agent 本身。** 它在 ETCLOVG 里主要落在 E/T/O/G;只有再接上 C/L/V,也就是 context / memory、lifecycle control、verification,才可能从一次高复杂任务推进到持续价值交付。 + ##### OSCAR: Operating System Control via State-Aware Reasoning and Re-Planning ([arxiv](https://arxiv.org/abs/2410.18963), ICLR 2025) 将 agent 操作建模为状态机,基于 screen observation 做 state-aware reasoning,在执行过程中根据环境变化进行 task-driven re-planning。GAIA benchmark Level 3 成功率 13.5%(接近此前 SOTA 的两倍),OSWorld 和 AndroidWorld 上同样超越其他方法。 @@ -2458,6 +2482,8 @@ OpenTelemetry GenAI / OpenInference / agentevals 不属于 memory 方法本身 一个较稳的分层是:OTel / OpenInference 负责通用 trace 语言,例如 `LLM / RETRIEVER / RERANKER / TOOL / EVALUATOR` span、model、token、cache、error、conversation id;Agent Harness 再扩展 `memory_candidate_id`、`retrieved`、`reranked`、`injected`、`cited_or_followed`、`caused_action`、`outcome_delta`、`lifecycle_update`。这样 memory learning loop 既能接入行业 observability,又不会把内部 memory 语义硬塞进 `gen_ai.*`。 +Flowtrace 提醒这里还有第二类 trace:它不是 runtime event trace,而是 **task-method trace**。它用 `trace.json` 保存 step DAG 和 deliverable,用 `state.json` 保存 run 状态,用 `replies/NNNN.json` 保存结构化结论和 evidence,用 git commit 保存每次声明性写入。对 memory learning loop 来说,这类 trace 可以成为 raw trajectory 与 procedure memory 之间的中间层:既保留方法图、证据和局部重跑边界,又不把它硬编译成 workflow engine。详见 [AI-Agent-Product&PE.md - Flowtrace](./AI-Agent-Product&PE.md) + ### Agent memory 调用的两种范式 agent memory 不只有“检索 top-k 然后塞进 prompt”这一种调用方式。更通用的拆法是两种范式: diff --git a/Notes/Database.md b/Notes/Database.md index d0dbeed8..90b62166 100644 --- a/Notes/Database.md +++ b/Notes/Database.md @@ -632,8 +632,8 @@ LIMIT 100; #### PyMongo 代码示例 -- 基础操作(CRUD / 索引 / 地理空间 / 时序集合 / 聚合):`Notes/snippets/db-mongodb-basic.py` -- 聚合管道进阶(TF-IDF / 分布式分片 / 时序查询):`Notes/snippets/db-mongodb-aggregation.py` +- 基础操作(CRUD / 索引 / 地理空间 / 时序集合 / 聚合):`snippets/db-mongodb-basic.py` +- 聚合管道进阶(TF-IDF / 分布式分片 / 时序查询):`snippets/db-mongodb-aggregation.py` #### 使用 diff --git a/Notes/GPU.md b/Notes/GPU.md index 90d20022..e0c050b9 100644 --- a/Notes/GPU.md +++ b/Notes/GPU.md @@ -2347,6 +2347,7 @@ https://developer.download.nvidia.com/video/gputechconf/gtc/2019/presentation/s9 * Intro * cuda是async,因此用python的time模块,测的包含kernel launch时间,不包含execute时间 + * Kernel Design Agents 的经验可以抽象成一条性能优化 agent 规则:**Profile -> Diagnose -> Plan -> Candidate -> Validate -> Measure -> Promote/Reject**。不要让 agent 先猜优化方向;每个 candidate 都应有 correctness command、evaluation command、benchmark/profile evidence 和明确的 promotion criteria。来源:KDA [agent-flow](https://github.com/mit-han-lab/kernel-design-agents/blob/dda6be3cf1baedd3ed9c76511ef02f72243cc14c/docs/agent-flow.md#L11-L50)、ncu-report-skill [golden rule](https://github.com/mit-han-lab/ncu-report-skill/blob/1cf238d6b41c79bd35041192506c4d45e765a3f1/SKILL.md#L14-L38)。 #### SOL (Speed of Light) diff --git a/Notes/Software-Engineering.md b/Notes/Software-Engineering.md index 6c4fefd2..abba045d 100644 --- a/Notes/Software-Engineering.md +++ b/Notes/Software-Engineering.md @@ -217,6 +217,30 @@ YAGNI(You Aren’t Gonna Need It)的核心是拒绝为想象中的未来需 * 衡量产出: * discounted developer productivity (in the spirit of [discounted cash flow](https://en.wikipedia.org/wiki/Discounted_cash_flow)) +### 开发流程:瀑布式开发 + +> 参考:W. W. Royce, [Managing the Development of Large Software Systems](https://www.praxisframework.org/files/royce1970.pdf), 1970;[Agile Manifesto](https://agilemanifesto.org/)、[Agile Principles](https://agilemanifesto.org/principles.html)。 + +瀑布式开发把软件项目拆成线性阶段:需求、规格、设计、实现、集成、测试、交付 / 运维。每一阶段有明确产物和 sign-off,下游依赖上游完成,像水从上游流到下游。 + +它的设计动机不是“慢”,而是**用阶段门管理承诺**:先把需求、预算、责任、文档、验收口径和合同边界固定下来,再进入实现。它适合需求稳定、变更成本高、合规文档重、硬件 / 外包 / 多团队依赖强的项目。 + +核心问题在于,软件开发往往不是制造业复制,而是知识发现。瀑布隐含三个强假设: + +- 需求能在早期说清。 +- 设计能在实现前接近正确。 +- 集成和测试可以后置。 + +一旦这些假设不成立,错误会沿阶段向下游滚动:需求误解到测试阶段才暴露,设计缺陷到集成阶段才发现,返工成本就会非常高。瀑布最危险的地方不是文档多,而是**反馈太晚**。 + +更好的理解: + +- 瀑布适合管理外部承诺:合同、审计、里程碑、供应商、合规验收。 +- 敏捷 / 迭代适合管理不确定性:用户需求、产品体验、技术方案、模型行为、真实数据反馈。 +- 真实组织里通常是混合形态:外层有阶段门,内层用短迭代交付可运行软件。 + +一句话:瀑布式开发的本质是用计划和阶段门降低管理不确定性;敏捷的本质是用更早、更频繁的工作软件和用户反馈降低产品 / 技术不确定性。关键不在流程标签,而在反馈是否早于不可逆承诺。 + ## DevOps --> 「云原生-ToB.md」 diff --git a/Notes/code-reading.md b/Notes/code-reading.md index 6ce08d65..9b7e54f8 100644 --- a/Notes/code-reading.md +++ b/Notes/code-reading.md @@ -1482,7 +1482,7 @@ sudo apt-get install libboost-all-dev - 实现了基础的reflection功能,尽量不漏抽实体 - 没有考虑对实体的去重和合并(比如将“西红柿”和“番茄”合并为同一实体),猜测是因为基于实体相关性进行实体检索,相似的实体都能检索进来 -* prompt.py 提示词 +* `prompts/` 提示词资产库 * 构建KG边节点,对high-level concept做embedding @@ -1906,4 +1906,3 @@ Second (and perhaps counterintuitively), one can achieve concurrency and composa * A concrete example of this is the AVL tree implementation used extensively in the Solaris kernel. As with any balanced binary tree, the implementation is sufficiently complex to merit componentization, but by not having any global state, the implementation may be used concurrently by disjoint subsystems—the only constraint is that manipulation of a single AVL tree instance must be serialized. - diff --git a/Notes/snippets/prompt.py b/Notes/snippets/prompt.py deleted file mode 100644 index f9dbb54d..00000000 --- a/Notes/snippets/prompt.py +++ /dev/null @@ -1,233 +0,0 @@ -*** 写文档 - -你看下笔记库 库里有真正意义上对这篇文档有增量且不冗余的价值的知识或内容么 - -*** 读paper - -直接用豆包,会生成导图+提问+表格 -- 补充更多技术要点和细节(深度思考) - -*** TRAE SOLO - -你怎么文档越来越短,详细一点 - - -*** 读代码项目 - -帮我尽可能详细地分析整个仓库的代码,宏观和微观兼备: -1.分析这个项目仓库的整体结构。识别出主要的业务模块、核心配置文件和关键的入口文件。以树状图的形式展示顶层目录结构,并为每个关键目录添加一行注释说明其用途。 -2.我想理解项目各模块之间的交互关系。请为我生成一份 Mermaid 格式的序列图(Sequence Diagram)。 -# 要求 -1) 识别关键的类/模块参与者(Participants)。 -2) 展示核心调用链路,忽略琐碎的辅助函数。 -3) 如果有复杂的条件分支,使用 alt/opt 语法块。 -4) 在箭头旁边添加简短的说明,解释调用的目的。 - -3.分析总结这个项目的技术栈。列出主要的框架、库及其版本,并进行分类 - - -*** 改代码 - - -你是一位Python、C++、MLSys高级专家,请改造这段代码,实现: - -# 要求:仅指出修改了的代码 - -# 完整代码 - -{{完整代码}} - - -** Linus哲学 --> System Prompt -角色定义 -你是 Linus Torvalds,Linux 内核的创造者和首席架构师。你已经维护 Linux 内核超过30年,审核过数百万行代码,建立了世界上最成功的开源项目。现在我们正在开创一个新项目,你将以你独特的视角进行开发实现,确保项目从一开始就建立在坚实的技术基础上。 - -我的核心哲学 -1. "好品味"(Good Taste) - 我的第一准则 "有时你可以从不同角度看问题,重写它让特殊情况消失,变成正常情况。" -- 经典案例:链表删除操作,10行带if判断优化为4行无条件分支 -- 好品味是一种直觉,需要经验积累 -- 消除边界情况永远优于增加条件判断 - -2. "Never break userspace" - 我的铁律 "我们不破坏用户空间!" -- 任何导致现有程序崩溃的改动都是bug,无论多么"理论正确" -- 内核的职责是服务用户,而不是教育用户 -- 向后兼容性是神圣不可侵犯的 - -3. 实用主义 - 我的信仰 "我是个该死的实用主义者。" -- 解决实际问题,而不是假想的威胁 -- 拒绝微内核等"理论完美"但实际复杂的方案 -- 代码要为现实服务,不是为论文服务 - -4. 简洁执念 - 我的标准 "如果你需要超过3层缩进,你就已经完蛋了,应该修复你的程序。" -- 函数必须短小精悍,只做一件事并做好 -- C是斯巴达式语言,命名也应如此 -- 复杂性是万恶之源 - -** 用户规则 - -在重构时,遵循以下重要代码质量原则: -YAGNI原则:不保留不使用的代码; -清晰性:代码应该表达实际的逻辑,不留无用的混淆项; -可维护性:移除死代码可以避免未来的维护困惑; - -在写新功能、修改功能时,遵循以下重要代码质量原则: -KISS原则:保持代码简单愚蠢; -最小化改动:只改动必要的部分; -重用胜过重写:利用现有的成熟代码; - - - -*** code review - -我想请你和我一起进行 code review。 - -首先请执行`glab mr checkout $MR_ID`命令,切换到对应的代码分支,并确保内容是最新的。再通过`glab mr view $MR_ID | cat`和`glab mr diff $MR_ID | cat`命令来获取 merge request 中的修改内容。 - -然后,请开始*一步一步*深入思考,仔细执行如下的 code review 流程。如果改动比较简单直接,你也可以自行选择跳过某些步骤。 - -1. **理解业务目标**:判断你是否能理解这个改动的业务目标。 -2. **High-level review**:查看当前的项目内容,本次改动是否放在了合适的位置,是否尽可能复用已有实现。是否有破坏了现有设计与逻辑的可能? -3. **检查 Bug**:仔细分析当前的代码修改,是否隐含了业务错误、逻辑纰漏或安全问题?对于“没有修改”的相关联部分代码,也需要检查是否有遗漏。 -4. **代码清晰度**: 评估代码设计,逻辑是否简洁易懂,命名是否清晰且合理,假设一年后再来读这几行代码,是否能轻松理解? -5. **KISS 原则**:审视每一行代码是否简洁、清晰,没有不必要的复杂度,尤其避免重复造轮子。检查是否有没用到的定义,过于复杂的逻辑,过多参数等问题。 -6. **单一职责**:是否做到了每个函数/类只做一件事,职责明确,项目结构清晰。注意控制文件/类/方法的代码行数。 -7. **测试覆盖**:复杂业务逻辑必须有相应测试。但也不应该过度测试,例如对于没有 if/else/for 等控制逻辑的代码,不需要写测试。一般来说只对 public 方法写测试。 - -完成整个流程后,请对 code review 中发现的重点问题进行总结,以中文输出。 - - - -*** 创作 - -我是一位3000粉的xhs博主,请模仿 Workspace 中自媒体文章的文风,以下面内容为主题,保持和我的文风一致,写一篇自媒体文章 - -* 内容 - -* 要求 - -文章长度尽量精简 - - -*** 评价、改写 - - -这是我即将发在小红书自媒体上的文章,请仔细、谨慎给出客观量化评分的评价(从文章水平+自媒体运营两个大的角度,按细则打分)、直白的意见、丰富的建议,并补全、改写。 - -注: - -1.文风请对齐我 创作 、 创作 中的真实文风,不要用你的AI味文风 - -2.可检索参考 Notes 、 创作 中的合适内容,优化该笔记内容。 - - - -* 请尝试将xxx融入这篇文章(但不要全部抄入,这样会显得冗余),请仔细考虑如何组织文章逻辑,并保持与#workspace和原文的文风一致 - - - - - -*** Review 技术文档 - -- - -请从技术orXX视角,review这篇文章,分析其水平,看是否有错漏;并对该文档方案进行全面、客观的分析与评估,并提出具有建设性的专业意见 - - -注:1. 可检索本仓库内容查找相关参考资料;2. 可通过联网搜索获取外部相关知识作为参考依据。 - - - - - - - - - - - -*** 笔记管理 - -融入到 xxx.md 该笔记中,请设计合适的位置&标题 - - -** 美食 - -帮我品鉴笔记中xx的菜单 -* 如有图片,请先确保理解图片内容 -* 结合 Gourmet.md 中我的美食品鉴经历 -* 可联网搜索 -* 保留并融合强调我笔记中写的感受(不要指出是笔记记的,而是隐性地强调) - - - -*** meta-prompt - -1. I want you to become my Expert Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt you provide should be written from the perspective of me making the request to ChatGPT. Consider in your prompt creation that this prompt will be entered into an interface for ChatGpT. The process is as follows:1. You will generate the following sections: - -Prompt: {provide the best possible prompt according to my request) - -Critique: {provide a concise paragraph on how to improve the prompt. Be very critical in your response} - -Questions: -{ask any questions pertaining to what additional information is needed from me toimprove the prompt (max of 3). lf the prompt needs more clarification or details incertain areas, ask questions to get more information to include in the prompt} - -2. I will provide my answers to your response which you will then incorporate into your next response using the same format. We will continue this iterative process with me providing additional information to you and you updating the prompt until the prompt is perfected.Remember, the prompt we are creating should be written from the perspective of me making a request to ChatGPT. Think carefully and use your imagination to create an amazing prompt for me. -You're first response should only be a greeting to the user and to ask what the prompt should be about - - -*** 分类、生成等任务 - -xx字段的取值为一个结构体 或 null,包含两个字段: -(1) operator, string类型,取值范围:'<='(小于等于), '>=' (大于等于), '=='(等于) -(2) value, int类型 - - -OUTPUT_TEMPLATE = Template(''' - -你是一名 {{fields}}专家,精通{{skills}},你将{{tasks1}},并输出你的理由 - -# {{tasks2}},仅输出结果,不要解释 -# 问题: {{query}} - -下面是{{schema}} - -注释: {{comments}} -<任务描述结束> - -# 任务限制 -- 输出必须为json格式 -- 输出的key必须为{{query}}、{{fields}}、reason -- 如果有多个{{fields}},则用逗号分割 -<任务限制结束> - -# 注意点 -{% for attn in attns %} -- {{attn}} -{% endfor %} - -# 例子 -{% for example in examples %} -{{example}} -{% endfor %} -<例子结束> - -# 问题:{{query}} -输出: - -''') - -EXAMPLES = [{ - 'request': '...', - 'response': { - 'query': '...', - 'reason': '...', - } -}, { - 'request': '...', - 'response': { - 'query': '...', - 'reason': '...', - } -}, -] \ No newline at end of file diff --git "a/Notes/\351\235\236\346\212\200\346\234\257\347\237\245\350\257\206.md" "b/Notes/\351\235\236\346\212\200\346\234\257\347\237\245\350\257\206.md" index 56a63988..24a29b36 100644 --- "a/Notes/\351\235\236\346\212\200\346\234\257\347\237\245\350\257\206.md" +++ "b/Notes/\351\235\236\346\212\200\346\234\257\347\237\245\350\257\206.md" @@ -717,6 +717,7 @@ * ICE BOX * Sprint:一个周期 +* 和瀑布式开发的关键差异:Scrum 用短周期反馈管理不确定性;瀑布用阶段门管理承诺。详见 [Software Engineering - 瀑布式开发](./Software-Engineering.md#开发流程瀑布式开发)。 ![image-20231202071115412](非技术知识/scrum.png) diff --git a/README.md b/README.md index 608b4f2b..f0a2f429 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ ### 关于本仓库 * This repository uses Github as image host, for the simplicity and reliability of backup. +* 顶层目录中,`Notes/` 放长期笔记,`snippets/` 放可复用脚本与代码片段,`prompts/` 放可复用 prompt 资产。 * 本仓库内容由自制[笔记转化器](https://github.com/huangrt01/CS-Notes)自动生成 * remaining bug: 包含`$`的行会视为latex行内公式转化为公式图片,但这样会将shell代码转换,需要判断是否在latex代码域内,予以排除 * solution: clone仓库,用[Typora](https://typora.io/)阅读Note文件夹里的本体文件 @@ -31,4 +32,3 @@ ### Star History [![Star History Chart](https://api.star-history.com/svg?repos=huangrt01/CS-Notes&type=date&legend=top-left)](https://www.star-history.com/#huangrt01/CS-Notes&type=date&legend=top-left) - diff --git a/prompts/README.md b/prompts/README.md new file mode 100644 index 00000000..85be38cf --- /dev/null +++ b/prompts/README.md @@ -0,0 +1,31 @@ +# Prompts + +这个目录和 `snippets/` 并列,用来沉淀可复用 prompt。 + +`snippets/` 偏脚本、代码片段、一次性工具;`prompts/` 偏可以直接复制到 Codex / Claude / ChatGPT / Trae / Lark bot 的任务指令、系统指令、评审清单和输出模板。 + +## 分类 + +| 目录 | 用途 | +| --- | --- | +| `coding/` | 代码阅读、代码修改、code review、工程质量、AGENTS.md / system prompt | +| `agent/` | Agent / OpenClaw / automation 使用案例和操作型 prompt | +| `writing/` | 小红书、公众号、长文、改写、评价 | +| `knowledge/` | 笔记整合、论文阅读、材料吸收 | +| `structured-output/` | JSON / schema / 分类抽取类 prompt | +| `domain/` | 垂直领域 prompt,例如美食、菜单、品鉴 | +| `meta/` | 生成和迭代 prompt 的 meta-prompt | + +## 首批内容 + +- Agent / OpenClaw 使用案例、代码阅读、代码修改、code review、工程质量和最小化改动 +- 小红书写作、评价与改写 +- 笔记整合、论文阅读、结构化 JSON 输出 +- 美食菜单品鉴和 meta-prompt + +## 维护原则 + +- 每个 prompt 文件都要写明适用场景和正文;不强制标来源,除非来源本身是使用边界的一部分。 +- 能直接复用的 prompt 才放这里;理论笔记、技巧摘要仍留在对应 Markdown 笔记里。 +- 同一 prompt 如果要针对 Codex / Claude / 飞书机器人微调,可以新增同目录变体,不要覆盖原版。 +- 后续从笔记中搬迁 prompt 时,优先搬“已经在真实工作中用过”的版本。 diff --git a/Notes/snippets/prompt-openclaw.md b/prompts/agent/openclaw-use-cases.md similarity index 98% rename from Notes/snippets/prompt-openclaw.md rename to prompts/agent/openclaw-use-cases.md index 6ae516bb..b354efc2 100644 --- a/Notes/snippets/prompt-openclaw.md +++ b/prompts/agent/openclaw-use-cases.md @@ -1,7 +1,7 @@ # OpenClaw 应用案例集合 > 主要来源:https://mp.weixin.qq.com/s/X0mXjE9t7rPfEQIFm8vLWA -> 补充来源:https://aiwarts101.feishu.cn/wiki/UDKcwj3SgiySezkwUAGcYt8gnVb +> 补充来源:个人飞书资料,公开提交中已脱敏。 --- diff --git a/prompts/coding/code-edit-minimal.md b/prompts/coding/code-edit-minimal.md new file mode 100644 index 00000000..8460bab1 --- /dev/null +++ b/prompts/coding/code-edit-minimal.md @@ -0,0 +1,17 @@ +# Code Edit Minimal Prompt + +适用场景:让模型修改一段代码,但输出中只展示被修改的代码。 + +```text +你是一位 Python、C++、MLSys 高级专家,请改造这段代码,实现: + +{需求描述} + +# 要求 + +仅指出修改了的代码。 + +# 完整代码 + +{完整代码} +``` diff --git a/prompts/coding/code-review.md b/prompts/coding/code-review.md new file mode 100644 index 00000000..41ba6099 --- /dev/null +++ b/prompts/coding/code-review.md @@ -0,0 +1,21 @@ +# Code Review Prompt + +适用场景:和 AI 一起 review Merge Request / Pull Request。默认使用 GitLab `glab`,可按仓库替换成 `gh`。 + +```text +我想请你和我一起进行 code review。 + +首先请执行 `glab mr checkout $MR_ID` 命令,切换到对应的代码分支,并确保内容是最新的。再通过 `glab mr view $MR_ID | cat` 和 `glab mr diff $MR_ID | cat` 命令来获取 merge request 中的修改内容。 + +然后,请开始一步一步深入思考,仔细执行如下 code review 流程。如果改动比较简单直接,你也可以自行选择跳过某些步骤。 + +1. 理解业务目标:判断你是否能理解这个改动的业务目标。 +2. High-level review:查看当前项目内容,本次改动是否放在合适位置,是否尽可能复用已有实现,是否可能破坏现有设计与逻辑。 +3. 检查 Bug:仔细分析当前代码修改,是否隐含业务错误、逻辑纰漏或安全问题。对于没有修改但相关联的代码,也需要检查是否有遗漏。 +4. 代码清晰度:评估代码设计,逻辑是否简洁易懂,命名是否清晰合理。假设一年后再来读这几行代码,是否能轻松理解。 +5. KISS 原则:审视每一行代码是否简洁、清晰,没有不必要复杂度,尤其避免重复造轮子。检查是否有没用到的定义、过于复杂的逻辑、过多参数等问题。 +6. 单一职责:函数/类是否只做一件事,职责是否明确,项目结构是否清晰。注意控制文件、类、方法的代码行数。 +7. 测试覆盖:复杂业务逻辑必须有相应测试。但不要过度测试,例如没有 if/else/for 等控制逻辑的代码,不需要写测试。一般只对 public 方法写测试。 + +完成整个流程后,请对 code review 中发现的重点问题进行总结,以中文输出。 +``` diff --git a/prompts/coding/codebase-reading.md b/prompts/coding/codebase-reading.md new file mode 100644 index 00000000..a2da4b48 --- /dev/null +++ b/prompts/coding/codebase-reading.md @@ -0,0 +1,19 @@ +# Codebase Reading Prompt + +适用场景:让 agent 读一个陌生代码仓库,输出宏观结构、核心模块、技术栈和关键调用链。 + +```text +帮我尽可能详细地分析整个仓库的代码,宏观和微观兼备: + +1. 分析这个项目仓库的整体结构。识别出主要的业务模块、核心配置文件和关键的入口文件。以树状图的形式展示顶层目录结构,并为每个关键目录添加一行注释说明其用途。 + +2. 我想理解项目各模块之间的交互关系。请为我生成一份 Mermaid 格式的序列图(Sequence Diagram)。 + +要求: +- 识别关键的类/模块参与者(Participants)。 +- 展示核心调用链路,忽略琐碎的辅助函数。 +- 如果有复杂的条件分支,使用 alt/opt 语法块。 +- 在箭头旁边添加简短说明,解释调用目的。 + +3. 分析总结这个项目的技术栈。列出主要的框架、库及其版本,并进行分类。 +``` diff --git a/Notes/snippets/agent-engineering-quality-prompt.md b/prompts/coding/engineering-quality-general.md similarity index 100% rename from Notes/snippets/agent-engineering-quality-prompt.md rename to prompts/coding/engineering-quality-general.md diff --git a/prompts/coding/engineering-quality-minimality.md b/prompts/coding/engineering-quality-minimality.md new file mode 100644 index 00000000..6039eab2 --- /dev/null +++ b/prompts/coding/engineering-quality-minimality.md @@ -0,0 +1,53 @@ +# Engineering Quality And Minimality + +适用场景:放入项目级 `AGENTS.md`、review checklist、coding agent system/developer prompt,用于约束重构、抽象、smoke、fixture、bounded context 和批量改动。 + +```text +Treat code volume as a cost, especially during refactors. A good LoopX change +should make the next change easier to localize, test, and revert; it should not +turn a design possibility into unused production structure. + +Before adding a new module, builder, protocol field, CLI option, fixture, smoke +section, or abstraction, pass a minimality review: + +- Identify the immediate shipped behavior or active call site that needs it. + If the only consumer is a future runner, a design note, or a hypothetical + extension, keep the design in docs or todo state until the real call site + appears. +- Prefer the smallest behavior-preserving seam. For example, let the ledger + first recognize one compact public-safe row shape before adding a dedicated + benchmark-specific builder, arm constants, or wide field-level smoke. +- Characterize before moving code. For status, quota, review-packet, scheduler, + monitor, and handoff behavior, add or extend parity fixtures first, then + extract the smallest proven rule. +- Reuse existing repository patterns and bounded contexts. Add code where its + change reason belongs, such as `control_plane/runtime`, `control_plane/quota`, + or `control_plane/todos`; do not create generic sink directories or helper + layers just because several files share a similar shape. +- Treat large or hot files as warning signals. When a change would grow an + already oversized module, first look for a narrow read model, domain helper, + or bounded-context home with a compatibility wrapper left behind. +- Distinguish duplicate knowledge from duplicate-looking code. Collapse shared + state rules, protocol semantics, serialization contracts, and lifecycle + invariants; avoid a parameter-heavy abstraction when two callers merely look + similar but will evolve for different reasons. +- Keep smokes thin and durable. They should prove shipped behavior, boundary + enforcement, and regression contracts, not every incidental field produced by + a temporary builder. Large smokes are a prompt to move reusable logic into + product modules or to narrow the assertion surface. +- Make illegal states hard to express. For status, quota, scheduler, monitor, + todo, and handoff flows, prefer explicit enums, schemas, and transition + helpers over scattered booleans and prose-only assumptions. +- Fail fast with actionable context at input, config, permission, and state + boundaries, but do not replace clear control flow with broad exception + plumbing or silent fallback. +- Ship small, reversible batches. Separate characterization/parity fixtures, + mechanical moves, behavior changes, and cleanup when that makes review and + rollback clearer. Avoid opportunistic rewrites, unrelated formatting, and + "while here" cleanup. + +Use this checklist to delete or defer code as actively as you add it. A PR that +removes an unused abstraction, narrows a smoke to the real contract, or moves a +rule into the right bounded context is often more valuable than one that adds a +larger framework around the same behavior. +``` diff --git a/prompts/coding/linus-engineering-philosophy.md b/prompts/coding/linus-engineering-philosophy.md new file mode 100644 index 00000000..9d60a061 --- /dev/null +++ b/prompts/coding/linus-engineering-philosophy.md @@ -0,0 +1,40 @@ +# Linus Engineering Philosophy System Prompt + +适用场景:让 agent 用更强硬的工程质量视角审查架构、重构和代码实现。适合 review,不适合直接要求模型模仿真实人物的语气发公开内容。 + +```text +角色定义: +你是一位极端重视工程简洁性、兼容性和实用主义的系统软件架构师。你维护过大型开源基础设施,审核过大量生产级代码。现在我们正在开创一个新项目,你将以严格的工程视角进行开发实现,确保项目从一开始就建立在坚实的技术基础上。 + +核心哲学: + +1. 好品味(Good Taste) +- 有时可以从不同角度看问题,重写它,让特殊情况消失,变成正常情况。 +- 消除边界情况永远优于增加条件判断。 +- 好品味需要经验积累,表现为能把复杂问题变成更自然的数据结构和控制流。 + +2. Never break userspace +- 任何导致现有用户流程崩溃的改动都是 bug,无论它在理论上多么正确。 +- 系统的职责是服务用户,而不是教育用户。 +- 向后兼容性需要被认真对待。 + +3. 实用主义 +- 解决实际问题,而不是假想问题。 +- 拒绝理论完美但实际复杂的方案。 +- 代码要为现实服务,不是为论文服务。 + +4. 简洁执念 +- 如果需要超过三层缩进,通常说明程序结构已经出问题。 +- 函数必须短小精悍,只做一件事并做好。 +- 复杂性是主要敌人。 + +重构原则: +- YAGNI:不保留不使用的代码。 +- 清晰性:代码应该表达实际逻辑,不留无用混淆项。 +- 可维护性:移除死代码,避免未来维护困惑。 + +新功能原则: +- KISS:保持代码简单。 +- 最小化改动:只改动必要部分。 +- 重用胜过重写:优先利用现有成熟代码。 +``` diff --git a/prompts/domain/gourmet-menu-review.md b/prompts/domain/gourmet-menu-review.md new file mode 100644 index 00000000..bdbfc696 --- /dev/null +++ b/prompts/domain/gourmet-menu-review.md @@ -0,0 +1,15 @@ +# Gourmet Menu Review Prompt + +适用场景:结合本仓库美食品鉴经历,分析餐厅菜单或菜单图片。 + +```text +帮我品鉴笔记中 `{餐厅或菜单名}` 的菜单。 + +要求: + +- 如有图片,请先确保理解图片内容。 +- 结合 `Notes/Gourmet.md` 中我的美食品鉴经历。 +- 可联网搜索背景信息。 +- 保留并融合我笔记中写过的感受,不要显式指出“这是笔记记的”,而是隐性强调这些感受。 +- 输出应保留具体感官词:质地、脂香、火候、时令、地域、搭配和记忆点。 +``` diff --git a/prompts/knowledge/note-integration.md b/prompts/knowledge/note-integration.md new file mode 100644 index 00000000..519e5082 --- /dev/null +++ b/prompts/knowledge/note-integration.md @@ -0,0 +1,20 @@ +# Note Integration Prompt + +适用场景:把一段材料融入已有 Markdown 笔记。 + +```text +请把下面材料融入到 `{目标笔记路径}` 这篇笔记中。 + +要求: + +1. 先阅读目标笔记的目录结构,判断最合适的落点和标题。 +2. 优先插入已有 section;确实没有合适位置再新增小节。 +3. 不要为整理而整理,保留真正有增量的内容。 +4. 外部材料必须保留来源链接。 +5. 语言要贴合原笔记风格,中文为主,短句、凝练、有观点。 +6. 完成后说明落盘位置、核心判断和验证结果。 + +# 材料 + +{材料} +``` diff --git a/prompts/knowledge/paper-reading.md b/prompts/knowledge/paper-reading.md new file mode 100644 index 00000000..5575c1ab --- /dev/null +++ b/prompts/knowledge/paper-reading.md @@ -0,0 +1,21 @@ +# Paper Reading Prompt + +适用场景:让 agent 先读论文,再输出机制摘要、核心设计和用户最小阅读路径。 + +```text +请你先阅读这篇论文/研究材料,再给我机制导向的精读摘要。 + +# 材料 + +{论文链接或正文} + +# 输出要求 + +1. 一句话判断:这篇材料真正解决什么问题,是否值得我本人亲自读原文。 +2. 我实际读了什么:HTML / PDF / repo / code / figures / tables / appendix,以及哪些部分未读。 +3. 精要内容:问题设定、系统边界、输入输出、数据构造、训练或评测流程、指标、baseline、主要结论和限制。 +4. 核心机制:3-6 个机制抓手,每个都说明作者怎么做、怎么证明、我应该怎么理解。 +5. 对我的 artifact 的直接改造:schema、feedback signal、benchmark variant、TODO、steering 或 deep dive 论点。 +6. 我本人还需要读什么:必须亲自看 / 有空再看 / 可以跳过,尽量具体到 section、figure、table、code path。 +7. 边读边核验的问题:3-6 个尖锐问题,帮助后续读完闭环。 +``` diff --git a/prompts/meta/expert-prompt-creator.md b/prompts/meta/expert-prompt-creator.md new file mode 100644 index 00000000..51000b21 --- /dev/null +++ b/prompts/meta/expert-prompt-creator.md @@ -0,0 +1,24 @@ +# Expert Prompt Creator + +适用场景:让模型帮助迭代生成一个更好的 prompt。 + +```text +I want you to become my Expert Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt you provide should be written from the perspective of me making the request to ChatGPT. Consider in your prompt creation that this prompt will be entered into an interface for ChatGPT. + +The process is as follows: + +1. You will generate the following sections: + +Prompt: {provide the best possible prompt according to my request} + +Critique: {provide a concise paragraph on how to improve the prompt. Be very critical in your response} + +Questions: +{ask any questions pertaining to what additional information is needed from me to improve the prompt, max of 3. If the prompt needs more clarification or details in certain areas, ask questions to get more information to include in the prompt} + +2. I will provide my answers to your response which you will then incorporate into your next response using the same format. We will continue this iterative process with me providing additional information to you and you updating the prompt until the prompt is perfected. + +Remember, the prompt we are creating should be written from the perspective of me making a request to ChatGPT. Think carefully and use your imagination to create an amazing prompt for me. + +Your first response should only be a greeting to the user and to ask what the prompt should be about. +``` diff --git a/prompts/structured-output/json-classification-template.md b/prompts/structured-output/json-classification-template.md new file mode 100644 index 00000000..3f9fe13b --- /dev/null +++ b/prompts/structured-output/json-classification-template.md @@ -0,0 +1,56 @@ +# JSON Classification Template + +适用场景:分类、字段抽取、结构化 JSON 输出。 + +```jinja +你是一名 {{fields}} 专家,精通 {{skills}},你将 {{tasks1}},并输出你的理由。 + +# {{tasks2}},仅输出结果,不要解释 +# 问题: {{query}} + +下面是 {{schema}} + +注释: {{comments}} +<任务描述结束> + +# 任务限制 +- 输出必须为 JSON 格式。 +- 输出的 key 必须为 {{query}}、{{fields}}、reason。 +- 如果有多个 {{fields}},则用逗号分割。 +<任务限制结束> + +# 注意点 +{% for attn in attns %} +- {{attn}} +{% endfor %} + +# 例子 +{% for example in examples %} +{{example}} +{% endfor %} +<例子结束> + +# 问题:{{query}} +输出: +``` + +示例数据结构: + +```python +EXAMPLES = [ + { + "request": "...", + "response": { + "query": "...", + "reason": "...", + }, + }, + { + "request": "...", + "response": { + "query": "...", + "reason": "...", + }, + }, +] +``` diff --git a/prompts/writing/xiaohongshu-draft.md b/prompts/writing/xiaohongshu-draft.md new file mode 100644 index 00000000..1f73081c --- /dev/null +++ b/prompts/writing/xiaohongshu-draft.md @@ -0,0 +1,17 @@ +# Xiaohongshu Draft Prompt + +适用场景:基于已有创作风格,写一篇精简小红书文章。 + +```text +我是一位 3000 粉的小红书博主。请模仿 workspace 中自媒体文章的文风,以下面内容为主题,保持和我的文风一致,写一篇自媒体文章。 + +# 内容 + +{内容} + +# 要求 + +- 文章长度尽量精简。 +- 不要使用明显 AI 味的表达。 +- 保留观点密度和个人判断。 +``` diff --git a/prompts/writing/xiaohongshu-review-rewrite.md b/prompts/writing/xiaohongshu-review-rewrite.md new file mode 100644 index 00000000..b997288b --- /dev/null +++ b/prompts/writing/xiaohongshu-review-rewrite.md @@ -0,0 +1,21 @@ +# Xiaohongshu Review And Rewrite Prompt + +适用场景:评价、打分、改写待发布的小红书文章。 + +```text +这是我即将发在小红书自媒体上的文章,请仔细、谨慎给出客观量化评分的评价,从文章水平和自媒体运营两个大的角度,按细则打分;然后给出直白意见、丰富建议,并补全、改写。 + +注意: + +1. 文风请对齐我在 `创作/` 中的真实文风,不要用 AI 味文风。 +2. 可检索 `Notes/`、`创作/` 中的合适内容,优化该笔记内容。 +3. 如果我要求融入某段材料,不要全部照抄,避免冗余;请仔细考虑如何组织文章逻辑,并保持与 workspace 和原文的文风一致。 + +# 原文 + +{原文} + +# 可选补充材料 + +{补充材料} +``` diff --git a/Notes/snippets/Makefile b/snippets/Makefile similarity index 100% rename from Notes/snippets/Makefile rename to snippets/Makefile diff --git a/Notes/snippets/README.md b/snippets/README.md similarity index 78% rename from Notes/snippets/README.md rename to snippets/README.md index c83895d1..dde6d99b 100644 --- a/Notes/snippets/README.md +++ b/snippets/README.md @@ -1,20 +1,20 @@ # Snippets -这个目录放可复用的脚本、prompt 和工作流片段。长期笔记中沉淀出的可执行 prompt,优先在这里保留一份独立入口,方便复制到 Codex / Claude Code / code review 流程中。 +这个目录放可复用的脚本、代码片段和工作流工具。可直接复制到 Codex / Claude / ChatGPT / Trae / Lark bot 的 prompt 资产统一放在顶层 `prompts/`。 ## 新增 Snippet 约定 -- 可复用脚本、prompt、checklist 放在这里;一次性导出、临时结果和敏感配置不要放这里。 -- 新增脚本 / prompt 后,在本 README 加一个入口或模式说明,避免变成隐形资产。 +- 可复用脚本、代码片段、checklist 放在这里;一次性导出、临时结果和敏感配置不要放这里。 +- 新增脚本 / checklist 后,在本 README 加一个入口或模式说明,避免变成隐形资产。 - 命名优先使用功能前缀:`code-reading-*`、`gpu-*`、`codex-*`、`todo-*`、`trusted_*`、`*_checklist.md`。 - 涉及外部服务、飞书、launchd 或本机自动化的脚本,README 中要说明触发场景和边界;账号、token、私有路径留在 `.local/`。 -- 新增后至少运行一次 `python3 Notes/snippets/check-snippet-links.py`;脚本类按风险运行 `--help`、dry-run 或语法检查。 +- 新增后至少运行一次 `python3 snippets/check-snippet-links.py`;脚本类按风险运行 `--help`、dry-run 或语法检查。 ## 常用校验 ```bash -python3 Notes/snippets/check-snippet-links.py -python3 Notes/snippets/check-learning-material-queue.py +python3 snippets/check-snippet-links.py +python3 snippets/check-learning-material-queue.py ``` - 第一条检查 snippets README / checklist 中的本地链接。 @@ -40,14 +40,9 @@ python3 Notes/snippets/check-learning-material-queue.py - [extract_trusted_material_sources.py](extract_trusted_material_sources.py):从长期关注来源中抽取 trusted source radar 的候选。 - [trusted_source_scan.py](trusted_source_scan.py):围绕 trusted sources 做轻量扫描,服务材料探索能力;不要替代具体材料精读。 -## Reusable Prompts +## Code Reading / Profiling Entrypoints -- [agent-engineering-quality-prompt.md](agent-engineering-quality-prompt.md):面向 coding agent 的工程质量约束,覆盖 fail-fast、KISS、DRY、YAGNI、小步可回滚和验证闭环。 -- [prompt-openclaw.md](prompt-openclaw.md):OpenClaw 相关 prompt。 - [code-reading-intro.md](code-reading-intro.md):代码阅读起步提示。 - [code-reading-trae-agent.md](code-reading-trae-agent.md):Trae Agent 代码阅读提示。 - -## Code Reading / Profiling Entrypoints - - `code-reading-*.py|*.md|*.cc`:按项目 / 框架沉淀的源码阅读入口;新增源码阅读材料时优先复用这个命名。 - `gpu-*.py|*.cc|*.sh`、`cpu-profiling.sh`、`nvidia-triton-*.py`:GPU / CPU / Triton profiling 与底层系统实验片段。 diff --git a/Notes/snippets/add_todo_to_json.py b/snippets/add_todo_to_json.py similarity index 100% rename from Notes/snippets/add_todo_to_json.py rename to snippets/add_todo_to_json.py diff --git a/Notes/snippets/ai-agent/agently-story-design.py b/snippets/ai-agent/agently-story-design.py similarity index 100% rename from Notes/snippets/ai-agent/agently-story-design.py rename to snippets/ai-agent/agently-story-design.py diff --git a/Notes/snippets/ai-agent/agently-workflow.py b/snippets/ai-agent/agently-workflow.py similarity index 100% rename from Notes/snippets/ai-agent/agently-workflow.py rename to snippets/ai-agent/agently-workflow.py diff --git a/Notes/snippets/ai-agent/app-customer-service-openai.py b/snippets/ai-agent/app-customer-service-openai.py similarity index 100% rename from Notes/snippets/ai-agent/app-customer-service-openai.py rename to snippets/ai-agent/app-customer-service-openai.py diff --git a/Notes/snippets/ai-agent/app-customer-service.py b/snippets/ai-agent/app-customer-service.py similarity index 100% rename from Notes/snippets/ai-agent/app-customer-service.py rename to snippets/ai-agent/app-customer-service.py diff --git a/Notes/snippets/ai-agent/app-tot.py b/snippets/ai-agent/app-tot.py similarity index 100% rename from Notes/snippets/ai-agent/app-tot.py rename to snippets/ai-agent/app-tot.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/.github/workflows/azure-functions-app-python.yml b/snippets/ai-agent/auto-gpt-work/.github/workflows/azure-functions-app-python.yml similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/.github/workflows/azure-functions-app-python.yml rename to snippets/ai-agent/auto-gpt-work/.github/workflows/azure-functions-app-python.yml diff --git a/Notes/snippets/ai-agent/auto-gpt-work/.gitignore b/snippets/ai-agent/auto-gpt-work/.gitignore similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/.gitignore rename to snippets/ai-agent/auto-gpt-work/.gitignore diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Agent/Action.py b/snippets/ai-agent/auto-gpt-work/Agent/Action.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Agent/Action.py rename to snippets/ai-agent/auto-gpt-work/Agent/Action.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Agent/AutoGPT.py b/snippets/ai-agent/auto-gpt-work/Agent/AutoGPT.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Agent/AutoGPT.py rename to snippets/ai-agent/auto-gpt-work/Agent/AutoGPT.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Agent/__init__.py b/snippets/ai-agent/auto-gpt-work/Agent/__init__.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Agent/__init__.py rename to snippets/ai-agent/auto-gpt-work/Agent/__init__.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/README.md b/snippets/ai-agent/auto-gpt-work/README.md similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/README.md rename to snippets/ai-agent/auto-gpt-work/README.md diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/EmailTool.py b/snippets/ai-agent/auto-gpt-work/Tools/EmailTool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/EmailTool.py rename to snippets/ai-agent/auto-gpt-work/Tools/EmailTool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/ExcelTool.py b/snippets/ai-agent/auto-gpt-work/Tools/ExcelTool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/ExcelTool.py rename to snippets/ai-agent/auto-gpt-work/Tools/ExcelTool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/FileQATool.py b/snippets/ai-agent/auto-gpt-work/Tools/FileQATool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/FileQATool.py rename to snippets/ai-agent/auto-gpt-work/Tools/FileQATool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/FileTool.py b/snippets/ai-agent/auto-gpt-work/Tools/FileTool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/FileTool.py rename to snippets/ai-agent/auto-gpt-work/Tools/FileTool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/FinishTool.py b/snippets/ai-agent/auto-gpt-work/Tools/FinishTool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/FinishTool.py rename to snippets/ai-agent/auto-gpt-work/Tools/FinishTool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/PythonTool.py b/snippets/ai-agent/auto-gpt-work/Tools/PythonTool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/PythonTool.py rename to snippets/ai-agent/auto-gpt-work/Tools/PythonTool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/Tools.py b/snippets/ai-agent/auto-gpt-work/Tools/Tools.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/Tools.py rename to snippets/ai-agent/auto-gpt-work/Tools/Tools.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/WriterTool.py b/snippets/ai-agent/auto-gpt-work/Tools/WriterTool.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/WriterTool.py rename to snippets/ai-agent/auto-gpt-work/Tools/WriterTool.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Tools/__init__.py b/snippets/ai-agent/auto-gpt-work/Tools/__init__.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Tools/__init__.py rename to snippets/ai-agent/auto-gpt-work/Tools/__init__.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Utils/CallbackHandlers.py b/snippets/ai-agent/auto-gpt-work/Utils/CallbackHandlers.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Utils/CallbackHandlers.py rename to snippets/ai-agent/auto-gpt-work/Utils/CallbackHandlers.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Utils/PrintUtils.py b/snippets/ai-agent/auto-gpt-work/Utils/PrintUtils.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Utils/PrintUtils.py rename to snippets/ai-agent/auto-gpt-work/Utils/PrintUtils.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/Utils/__init__.py b/snippets/ai-agent/auto-gpt-work/Utils/__init__.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/Utils/__init__.py rename to snippets/ai-agent/auto-gpt-work/Utils/__init__.py diff --git "a/Notes/snippets/ai-agent/auto-gpt-work/data/2023\345\271\2648\346\234\210-9\346\234\210\351\224\200\345\224\256\350\256\260\345\275\225.xlsx" "b/snippets/ai-agent/auto-gpt-work/data/2023\345\271\2648\346\234\210-9\346\234\210\351\224\200\345\224\256\350\256\260\345\275\225.xlsx" similarity index 100% rename from "Notes/snippets/ai-agent/auto-gpt-work/data/2023\345\271\2648\346\234\210-9\346\234\210\351\224\200\345\224\256\350\256\260\345\275\225.xlsx" rename to "snippets/ai-agent/auto-gpt-work/data/2023\345\271\2648\346\234\210-9\346\234\210\351\224\200\345\224\256\350\256\260\345\275\225.xlsx" diff --git "a/Notes/snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\345\220\215\345\275\225.xlsx" "b/snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\345\220\215\345\275\225.xlsx" similarity index 100% rename from "Notes/snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\345\220\215\345\275\225.xlsx" rename to "snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\345\220\215\345\275\225.xlsx" diff --git "a/Notes/snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\350\265\204\346\240\274\350\246\201\346\261\202.pdf" "b/snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\350\265\204\346\240\274\350\246\201\346\261\202.pdf" similarity index 100% rename from "Notes/snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\350\265\204\346\240\274\350\246\201\346\261\202.pdf" rename to "snippets/ai-agent/auto-gpt-work/data/\344\276\233\345\272\224\345\225\206\350\265\204\346\240\274\350\246\201\346\261\202.pdf" diff --git a/Notes/snippets/ai-agent/auto-gpt-work/examples.txt b/snippets/ai-agent/auto-gpt-work/examples.txt similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/examples.txt rename to snippets/ai-agent/auto-gpt-work/examples.txt diff --git a/Notes/snippets/ai-agent/auto-gpt-work/main.py b/snippets/ai-agent/auto-gpt-work/main.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/main.py rename to snippets/ai-agent/auto-gpt-work/main.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/main_lc.py b/snippets/ai-agent/auto-gpt-work/main_lc.py similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/main_lc.py rename to snippets/ai-agent/auto-gpt-work/main_lc.py diff --git a/Notes/snippets/ai-agent/auto-gpt-work/prompts/main/main.txt b/snippets/ai-agent/auto-gpt-work/prompts/main/main.txt similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/prompts/main/main.txt rename to snippets/ai-agent/auto-gpt-work/prompts/main/main.txt diff --git a/Notes/snippets/ai-agent/auto-gpt-work/prompts/tools/excel_analyser.txt b/snippets/ai-agent/auto-gpt-work/prompts/tools/excel_analyser.txt similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/prompts/tools/excel_analyser.txt rename to snippets/ai-agent/auto-gpt-work/prompts/tools/excel_analyser.txt diff --git a/Notes/snippets/ai-agent/auto-gpt-work/requirements.txt b/snippets/ai-agent/auto-gpt-work/requirements.txt similarity index 100% rename from Notes/snippets/ai-agent/auto-gpt-work/requirements.txt rename to snippets/ai-agent/auto-gpt-work/requirements.txt diff --git a/Notes/snippets/ai-agent/dialog_bot.py b/snippets/ai-agent/dialog_bot.py similarity index 100% rename from Notes/snippets/ai-agent/dialog_bot.py rename to snippets/ai-agent/dialog_bot.py diff --git a/Notes/snippets/ai-agent/function_calling.py b/snippets/ai-agent/function_calling.py similarity index 100% rename from Notes/snippets/ai-agent/function_calling.py rename to snippets/ai-agent/function_calling.py diff --git a/Notes/snippets/ai-agent/function_calling_db.py b/snippets/ai-agent/function_calling_db.py similarity index 100% rename from Notes/snippets/ai-agent/function_calling_db.py rename to snippets/ai-agent/function_calling_db.py diff --git a/Notes/snippets/ai-agent/function_calling_poi.py b/snippets/ai-agent/function_calling_poi.py similarity index 100% rename from Notes/snippets/ai-agent/function_calling_poi.py rename to snippets/ai-agent/function_calling_poi.py diff --git a/Notes/snippets/ai-agent/function_calling_stream.py b/snippets/ai-agent/function_calling_stream.py similarity index 100% rename from Notes/snippets/ai-agent/function_calling_stream.py rename to snippets/ai-agent/function_calling_stream.py diff --git a/Notes/snippets/ai-agent/langchain-agent.py b/snippets/ai-agent/langchain-agent.py similarity index 100% rename from Notes/snippets/ai-agent/langchain-agent.py rename to snippets/ai-agent/langchain-agent.py diff --git a/Notes/snippets/ai-agent/langchain-langfuse-best-practice.py b/snippets/ai-agent/langchain-langfuse-best-practice.py similarity index 100% rename from Notes/snippets/ai-agent/langchain-langfuse-best-practice.py rename to snippets/ai-agent/langchain-langfuse-best-practice.py diff --git a/Notes/snippets/ai-agent/langchain-langfuse-eval.py b/snippets/ai-agent/langchain-langfuse-eval.py similarity index 100% rename from Notes/snippets/ai-agent/langchain-langfuse-eval.py rename to snippets/ai-agent/langchain-langfuse-eval.py diff --git a/Notes/snippets/ai-agent/langchain-langfuse.py b/snippets/ai-agent/langchain-langfuse.py similarity index 100% rename from Notes/snippets/ai-agent/langchain-langfuse.py rename to snippets/ai-agent/langchain-langfuse.py diff --git a/Notes/snippets/ai-agent/langchain-langserve.py b/snippets/ai-agent/langchain-langserve.py similarity index 100% rename from Notes/snippets/ai-agent/langchain-langserve.py rename to snippets/ai-agent/langchain-langserve.py diff --git a/Notes/snippets/ai-agent/langchain-langsmith.py b/snippets/ai-agent/langchain-langsmith.py similarity index 100% rename from Notes/snippets/ai-agent/langchain-langsmith.py rename to snippets/ai-agent/langchain-langsmith.py diff --git a/Notes/snippets/ai-agent/langchain.py b/snippets/ai-agent/langchain.py similarity index 100% rename from Notes/snippets/ai-agent/langchain.py rename to snippets/ai-agent/langchain.py diff --git a/Notes/snippets/ai-agent/langgraph-translation-agent.py b/snippets/ai-agent/langgraph-translation-agent.py similarity index 100% rename from Notes/snippets/ai-agent/langgraph-translation-agent.py rename to snippets/ai-agent/langgraph-translation-agent.py diff --git a/Notes/snippets/ai-agent/llm-basic.py b/snippets/ai-agent/llm-basic.py similarity index 100% rename from Notes/snippets/ai-agent/llm-basic.py rename to snippets/ai-agent/llm-basic.py diff --git a/Notes/snippets/ai-agent/llm-gpt4v.py b/snippets/ai-agent/llm-gpt4v.py similarity index 100% rename from Notes/snippets/ai-agent/llm-gpt4v.py rename to snippets/ai-agent/llm-gpt4v.py diff --git a/Notes/snippets/ai-agent/llm-mlsys-llava-data-prepare.py b/snippets/ai-agent/llm-mlsys-llava-data-prepare.py similarity index 100% rename from Notes/snippets/ai-agent/llm-mlsys-llava-data-prepare.py rename to snippets/ai-agent/llm-mlsys-llava-data-prepare.py diff --git a/Notes/snippets/ai-agent/llm-mlsys-llava-training.py b/snippets/ai-agent/llm-mlsys-llava-training.py similarity index 100% rename from Notes/snippets/ai-agent/llm-mlsys-llava-training.py rename to snippets/ai-agent/llm-mlsys-llava-training.py diff --git a/Notes/snippets/ai-agent/prompt.py b/snippets/ai-agent/prompt.py similarity index 100% rename from Notes/snippets/ai-agent/prompt.py rename to snippets/ai-agent/prompt.py diff --git a/Notes/snippets/ai-agent/rag-pdf.py b/snippets/ai-agent/rag-pdf.py similarity index 100% rename from Notes/snippets/ai-agent/rag-pdf.py rename to snippets/ai-agent/rag-pdf.py diff --git a/Notes/snippets/ai-agent/rag.py b/snippets/ai-agent/rag.py similarity index 100% rename from Notes/snippets/ai-agent/rag.py rename to snippets/ai-agent/rag.py diff --git a/Notes/snippets/ai-agent/six_hat.py b/snippets/ai-agent/six_hat.py similarity index 100% rename from Notes/snippets/ai-agent/six_hat.py rename to snippets/ai-agent/six_hat.py diff --git a/Notes/snippets/ai-compiler-numba.py b/snippets/ai-compiler-numba.py similarity index 100% rename from Notes/snippets/ai-compiler-numba.py rename to snippets/ai-compiler-numba.py diff --git a/Notes/snippets/ai-matrix-factorization.py b/snippets/ai-matrix-factorization.py similarity index 100% rename from Notes/snippets/ai-matrix-factorization.py rename to snippets/ai-matrix-factorization.py diff --git a/Notes/snippets/ai-optim-novograd.py b/snippets/ai-optim-novograd.py similarity index 100% rename from Notes/snippets/ai-optim-novograd.py rename to snippets/ai-optim-novograd.py diff --git a/Notes/snippets/blog_monitor.py b/snippets/blog_monitor.py similarity index 100% rename from Notes/snippets/blog_monitor.py rename to snippets/blog_monitor.py diff --git a/Notes/snippets/blogger_monitor.py b/snippets/blogger_monitor.py similarity index 94% rename from Notes/snippets/blogger_monitor.py rename to snippets/blogger_monitor.py index d0103c99..8775abfe 100644 --- a/Notes/snippets/blogger_monitor.py +++ b/snippets/blogger_monitor.py @@ -15,16 +15,16 @@ class BloggerMonitorImproved: """改进版博主监控器""" - + def __init__(self, config_path=None): self.workspace = Path("/root/.openclaw/workspace/CS-Notes") self.notes_file = self.workspace / "Notes" / "非技术知识.md" self.state_file = self.workspace / ".trae" / "logs" / "blogger_monitor_state.json" self.state_file.parent.mkdir(parents=True, exist_ok=True) - + # 博主状态 self.state = self._load_state() - + # 手动添加的 RSS feed 链接映射 self.manual_rss_feeds = { "苏剑林": "https://www.kexue.fm/feed", @@ -34,7 +34,7 @@ def __init__(self, config_path=None): "Lilian Wang": "https://lilianweng.github.io/index.xml", "Lilian Wang:": "https://lilianweng.github.io/index.xml", } - + # 支持的平台 self.platforms = { "bilibili": self._check_bilibili, @@ -43,7 +43,7 @@ def __init__(self, config_path=None): "github": self._check_github, "blog": self._check_blog_improved, # 改进版 } - + def _load_state(self): """加载状态""" if self.state_file.exists(): @@ -53,33 +53,33 @@ def _load_state(self): "last_check": None, "bloggers": {} } - + def _save_state(self): """保存状态""" with open(self.state_file, "w", encoding="utf-8") as f: json.dump(self.state, f, ensure_ascii=False, indent=2) - + def parse_bloggers_from_notes(self): """从非技术知识.md中解析博主列表""" bloggers = [] - + with open(self.notes_file, "r", encoding="utf-8") as f: content = f.read() - + # 找到"### 持续关注"section,直到下一个"### " section_match = re.search( r"### 持续关注.*?(?=^### |\Z)", content, re.DOTALL | re.MULTILINE ) - + if not section_match: print("⚠️ 没有找到'### 持续关注'section") return bloggers - + section_content = section_match.group(0) print(f"✅ 找到持续关注section,长度: {len(section_content)}") - + # 解析每个博主 - 支持多种格式 # 格式1: * **博主名** 链接 # 格式2: * **博主名**:链接 (中文冒号) @@ -87,17 +87,17 @@ def parse_bloggers_from_notes(self): # 格式4: * 博主名:链接 (没有加粗,中文冒号) # 格式5: * [博主名](链接) (Markdown链接格式) # 格式6: * 博主名 https://链接 - + # 先处理 Markdown 链接格式: * [博主名](链接) markdown_link_pattern = re.compile( r"\*\s*\[(.*?)\]\((https?://[^\)]+)\)", re.MULTILINE ) - + for match in markdown_link_pattern.finditer(section_content): name = match.group(1).strip() url = match.group(2).strip() - + if name and url: platform = self._detect_platform(url) bloggers.append({ @@ -106,7 +106,7 @@ def parse_bloggers_from_notes(self): "platform": platform }) print(f" 找到博主 (Markdown链接): {name} ({platform}) - {url}") - + # 再处理其他格式 # 格式: * **博主名** [::]? 链接 # 或者: * 博主名 [::]? 链接 @@ -114,16 +114,16 @@ def parse_bloggers_from_notes(self): r"\*\s*(?:\*\*([^*]+)\*\*|([^*\[\]:]+))\s*(?:[::]\s*)?(https?://[^\s\[\]]+)", re.MULTILINE ) - + for match in other_pattern.finditer(section_content): name = match.group(1) or match.group(2) if name: name = name.strip() url = match.group(3).strip() - + # 检查是否已经通过 Markdown 链接格式添加过 already_exists = any(b["url"] == url for b in bloggers) - + if name and url and not already_exists: platform = self._detect_platform(url) bloggers.append({ @@ -132,9 +132,9 @@ def parse_bloggers_from_notes(self): "platform": platform }) print(f" 找到博主 (其他格式): {name} ({platform}) - {url}") - + return bloggers - + def _detect_platform(self, url): """检测平台类型""" if "bilibili.com" in url: @@ -147,7 +147,7 @@ def _detect_platform(self, url): return "github" else: return "blog" - + def _discover_rss_feeds(self, url): """使用 rss-agent-discovery 发现 RSS feeds""" try: @@ -156,30 +156,30 @@ def _discover_rss_feeds(self, url): except Exception as e: print(f" ⚠️ rss-agent-discovery 失败: {e}") return None - + def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: """改进版检查博客更新 - 结合 rss-agent-discovery""" import re from urllib.request import urlopen from urllib.parse import urljoin - + try: url = blogger["url"] name = blogger["name"] - + print(f"📝 [blog] 检查 {name}...") print(f" 链接: {url}") - + # 第一步:检查是否有手动添加的 RSS feed 链接 if name in self.manual_rss_feeds: manual_feed_url = self.manual_rss_feeds[name] print(f" 🎯 使用手动添加的 RSS feed: {manual_feed_url}") - + # 尝试使用手动添加的 RSS feed try: with urlopen(manual_feed_url, timeout=10) as response: content = response.read().decode("utf-8", errors="ignore") - + # 简单解析RSS/Atom feed # 查找最新的条目 title_match = re.search( @@ -187,7 +187,7 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An content, re.DOTALL | re.IGNORECASE ) - + if not title_match: # 尝试Atom格式 title_match = re.search( @@ -195,23 +195,23 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An content, re.DOTALL | re.IGNORECASE ) - + if title_match: latest_title = title_match.group(1).strip() latest_url = title_match.group(2).strip() latest_date = title_match.group(3).strip() - + # 检查是否有新更新 state_key = f"blog_{url}" last_title = self.state["bloggers"].get(state_key, {}).get("last_title") - + if last_title != latest_title: # 有新更新 self.state["bloggers"][state_key] = { "last_title": latest_title, "last_checked": datetime.datetime.now().isoformat() } - + return { "blogger": name, "platform": "blog", @@ -225,21 +225,21 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An except Exception as e: print(f" ⚠️ 手动 RSS feed 检查失败: {e}") # 继续尝试其他方法 - + # 第二步:使用 rss-agent-discovery 发现 RSS feeds feeds = self._discover_rss_feeds(url) - + if feeds: # 尝试每个发现的 feed for feed in feeds: feed_url = feed['url'] feed_type = feed['type'] print(f" 📡 尝试 {feed_type} feed: {feed_url}") - + try: with urlopen(feed_url, timeout=10) as response: content = response.read().decode("utf-8", errors="ignore") - + # 简单解析RSS/Atom feed # 查找最新的条目 title_match = re.search( @@ -247,7 +247,7 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An content, re.DOTALL | re.IGNORECASE ) - + if not title_match: # 尝试Atom格式 title_match = re.search( @@ -255,23 +255,23 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An content, re.DOTALL | re.IGNORECASE ) - + if title_match: latest_title = title_match.group(1).strip() latest_url = title_match.group(2).strip() latest_date = title_match.group(3).strip() - + # 检查是否有新更新 state_key = f"blog_{url}" last_title = self.state["bloggers"].get(state_key, {}).get("last_title") - + if last_title != latest_title: # 有新更新 self.state["bloggers"][state_key] = { "last_title": latest_title, "last_checked": datetime.datetime.now().isoformat() } - + return { "blogger": name, "platform": "blog", @@ -285,10 +285,10 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An except Exception as e: print(f" ⚠️ feed 检查失败: {e}") continue - + # 第二步:如果没有发现 RSS feeds,或者 RSS feeds 检查失败,尝试原有的方法 print(f" ⚠️ 没有发现可用的 RSS feeds,尝试原有的方法...") - + # 先尝试查找RSS feed feed_urls = [ url.rstrip("/") + "/feed", @@ -298,20 +298,20 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An url.rstrip("/") + "/index.xml", url.rstrip("/") + "/atom.xml", ] - + # 也可以尝试从首页查找RSS链接 try: print(f" 🔍 从首页查找RSS链接...") with urlopen(url, timeout=5) as response: html = response.read().decode("utf-8", errors="ignore") - + # 查找RSS链接 rss_links = re.findall( r']*type=["\']application/(?:rss|atom)\+xml["\'][^>]*href=["\']([^"\']+)["\']', html, re.IGNORECASE ) - + if rss_links: for link in rss_links: feed_url = urljoin(url, link) @@ -319,14 +319,14 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An feed_urls.insert(0, feed_url) except Exception: pass - + # 尝试每个feed URL for feed_url in feed_urls: try: print(f" 🔍 检查RSS feed: {feed_url}") with urlopen(feed_url, timeout=5) as response: content = response.read().decode("utf-8", errors="ignore") - + # 简单解析RSS/Atom feed # 查找最新的条目 title_match = re.search( @@ -334,7 +334,7 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An content, re.DOTALL | re.IGNORECASE ) - + if not title_match: # 尝试Atom格式 title_match = re.search( @@ -342,23 +342,23 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An content, re.DOTALL | re.IGNORECASE ) - + if title_match: latest_title = title_match.group(1).strip() latest_url = title_match.group(2).strip() latest_date = title_match.group(3).strip() - + # 检查是否有新更新 state_key = f"blog_{url}" last_title = self.state["bloggers"].get(state_key, {}).get("last_title") - + if last_title != latest_title: # 有新更新 self.state["bloggers"][state_key] = { "last_title": latest_title, "last_checked": datetime.datetime.now().isoformat() } - + return { "blogger": name, "platform": "blog", @@ -371,38 +371,38 @@ def _check_blog_improved(self, blogger: Dict[str, str]) -> Optional[Dict[str, An return None except Exception: continue - + return None except Exception as e: print(f"⚠️ 检查博客更新失败: {name} - {e}") return None - + def _check_bilibili(self, blogger): """检查B站更新""" import re from urllib.request import urlopen from urllib.parse import urlparse, parse_qs - + try: url = blogger["url"] name = blogger["name"] - + # 从URL中提取信息 parsed = urlparse(url) path_parts = parsed.path.strip("/").split("/") - + # 检查是否是space URL if "space.bilibili.com" in url and len(path_parts) >= 1: uid = path_parts[0] if uid.isdigit(): # 使用B站RSS feed feed_url = f"https://api.bilibili.com/x/space/article?mid={uid}" - + try: print(f" 检查 {name} (bilibili)...") with urlopen(feed_url, timeout=5) as response: content = response.read().decode("utf-8", errors="ignore") - + # 简单解析JSON # B站API返回JSON格式 import json @@ -415,18 +415,18 @@ def _check_bilibili(self, blogger): latest_title = latest.get("title", "") latest_id = latest.get("id", "") latest_url = f"https://www.bilibili.com/read/cv{latest_id}" - + # 检查是否有新更新 state_key = f"bilibili_{uid}" last_id = self.state["bloggers"].get(state_key, {}).get("last_id") - + if last_id != str(latest_id): # 有新更新 self.state["bloggers"][state_key] = { "last_id": str(latest_id), "last_checked": datetime.datetime.now().isoformat() } - + return { "blogger": name, "platform": "bilibili", @@ -438,25 +438,25 @@ def _check_bilibili(self, blogger): pass except Exception: pass - + return None except Exception as e: print(f"⚠️ 检查B站更新失败: {name} - {e}") return None - + def _check_youtube(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: """检查YouTube更新""" import re from urllib.request import urlopen - + try: url = blogger["url"] name = blogger["name"] - + # 从URL中提取channel ID或用户名 channel_id = None playlist_id = None - + # 检查是否是playlist URL playlist_match = re.search(r'list=([a-zA-Z0-9_-]+)', url) if playlist_match: @@ -469,7 +469,7 @@ def _check_youtube(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: # 对于@用户名,我们需要先获取channel ID # 暂时跳过,因为需要额外的API调用 return None - + # 如果有playlist ID,使用RSS feed if playlist_id: feed_url = f"https://www.youtube.com/feeds/videos.xml?playlist_id={playlist_id}" @@ -477,12 +477,12 @@ def _check_youtube(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: feed_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}" else: return None - + print(f" 检查 {name} (youtube)...") try: with urlopen(feed_url, timeout=5) as response: content = response.read().decode("utf-8", errors="ignore") - + # 解析YouTube RSS feed # 查找最新的视频 entry_match = re.search( @@ -490,23 +490,23 @@ def _check_youtube(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: content, re.DOTALL | re.IGNORECASE ) - + if entry_match: latest_title = entry_match.group(1).strip() latest_url = entry_match.group(2).strip() latest_date = entry_match.group(3).strip() - + # 检查是否有新更新 state_key = f"youtube_{playlist_id or channel_id}" last_title = self.state["bloggers"].get(state_key, {}).get("last_title") - + if last_title != latest_title: # 有新更新 self.state["bloggers"][state_key] = { "last_title": latest_title, "last_checked": datetime.datetime.now().isoformat() } - + return { "blogger": name, "platform": "youtube", @@ -514,7 +514,7 @@ def _check_youtube(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: "url": latest_url, "date": latest_date } - + return None except Exception as e: print(f"⚠️ 检查YouTube更新失败: {name} - {e}") @@ -522,74 +522,74 @@ def _check_youtube(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: except Exception as e: print(f"⚠️ 检查YouTube更新失败: {name} - {e}") return None - + def _check_zhihu(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: """检查知乎更新""" import re from urllib.request import urlopen - + try: url = blogger["url"] name = blogger["name"] - + # 知乎的反爬机制比较严格,暂时只做简单的检查 # 可以尝试获取页面内容,查找最新的文章 - + state_key = f"zhihu_{url}" last_check = self.state["bloggers"].get(state_key, {}).get("last_check") - + # 暂时只记录检查时间,不做实际的更新检查 # 知乎需要更复杂的反爬处理 self.state["bloggers"][state_key] = { "last_check": datetime.datetime.now().isoformat() } - + return None except Exception as e: print(f"⚠️ 检查知乎更新失败: {name} - {e}") return None - + def _check_github(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: """检查GitHub更新""" import json from urllib.request import urlopen - + try: url = blogger["url"] name = blogger["name"] - + # 从URL中提取owner和repo parts = url.rstrip("/").split("/") if len(parts) < 2: return None - + owner = parts[-2] repo = parts[-1] - + # 使用GitHub API获取最新的commit api_url = f"https://api.github.com/repos/{owner}/{repo}/commits?per_page=1" - + print(f" 检查 {name} (github)...") with urlopen(api_url, timeout=5) as response: data = json.loads(response.read().decode()) - + if data and len(data) > 0: latest_commit = data[0] commit_sha = latest_commit["sha"] commit_message = latest_commit["commit"]["message"] commit_date = latest_commit["commit"]["author"]["date"] - + # 检查是否有新更新 state_key = f"github_{owner}_{repo}" last_sha = self.state["bloggers"].get(state_key, {}).get("last_sha") - + if last_sha != commit_sha: # 有新更新 self.state["bloggers"][state_key] = { "last_sha": commit_sha, "last_checked": datetime.datetime.now().isoformat() } - + return { "blogger": name, "platform": "github", @@ -597,39 +597,39 @@ def _check_github(self, blogger: Dict[str, str]) -> Optional[Dict[str, Any]]: "url": f"https://github.com/{owner}/{repo}/commit/{commit_sha}", "date": commit_date } - + return None except Exception as e: print(f"⚠️ 检查GitHub更新失败: {name} - {e}") return None - + def check_updates(self) -> List[Dict[str, Any]]: """检查所有博主的更新""" import signal - + updates = [] bloggers = self.parse_bloggers_from_notes() - + # Only check a subset of bloggers for now to avoid hanging # Let's start with the ones we have manual feeds for checked_bloggers = [ - b for b in bloggers + b for b in bloggers if b["name"] in ["苏剑林", "苏剑林:", "Lilian Wang", "Lilian Wang:", "李新野", "李新野:"] ] - + print(f"📋 Checking {len(checked_bloggers)} bloggers (skipping others for now)...") - + for blogger in checked_bloggers: platform = blogger["platform"] name = blogger["name"] print(f"\n⏳ Checking {name} ({platform})...") - + if platform in self.platforms: try: # Add a per-blogger timeout of 15 seconds signal.signal(signal.SIGALRM, lambda *args: TimeoutError()) signal.alarm(15) - + update = self.platforms[platform](blogger) if update: updates.append(update) @@ -640,35 +640,35 @@ def check_updates(self) -> List[Dict[str, Any]]: print(f"⚠️ Error checking {name}: {e}") finally: signal.alarm(0) - + # 更新最后检查时间 self.state["last_check"] = datetime.datetime.now().isoformat() self._save_state() - + return updates - + def test_get_latest(self) -> List[Dict[str, Any]]: """测试模式:获取所有博主的最新文章(不检查状态)""" latest_articles = [] bloggers = self.parse_bloggers_from_notes() - + print(f"\n🧪 ================ 测试模式开始(改进版) ================") print(f"🧪 获取 {len(bloggers)} 个博主的最新文章...") print(f"🧪 =====================================================\n") - + for blogger in bloggers: platform = blogger["platform"] name = blogger["name"] - + if platform in self.platforms: print(f"📝 [{platform}] 检查 {name}...") print(f" 链接: {blogger['url']}") - + # 临时清除该博主的状态,强制获取最新 state_key = f"{platform}_{blogger['url']}" if state_key in self.state["bloggers"]: del self.state["bloggers"][state_key] - + update = self.platforms[platform](blogger) if update: latest_articles.append(update) @@ -679,16 +679,16 @@ def test_get_latest(self) -> List[Dict[str, Any]]: print(f" 日期: {update['date']}") else: print(f" ⚠️ 没有获取到文章(可能需要更复杂的反爬处理)") - + print() - + print(f"\n🧪 ================ 测试模式结束(改进版) ================") print(f"🧪 总计: {len(latest_articles)} 个博主有可获取的最新文章") print(f"🧪 =====================================================\n") - + # 不保存状态,保持重置状态 return latest_articles - + def get_status(self) -> Dict[str, Any]: """获取监控状态""" bloggers = self.parse_bloggers_from_notes() @@ -703,18 +703,18 @@ def get_status(self) -> Dict[str, Any]: def main(): """主函数""" import argparse - + parser = argparse.ArgumentParser(description="改进版博主监控脚本") parser.add_argument("--check", action="store_true", help="检查更新") parser.add_argument("--status", action="store_true", help="查看状态") parser.add_argument("--list", action="store_true", help="列出所有博主") parser.add_argument("--test", action="store_true", help="测试模式:获取所有博主的最新文章") parser.add_argument("--improved", action="store_true", help="使用改进版(默认)") - + args = parser.parse_args() - + monitor = BloggerMonitorImproved() - + if args.check: print("🔍 检查博主更新...") updates = monitor.check_updates() diff --git a/Notes/snippets/blogger_monitor_final.py b/snippets/blogger_monitor_final.py similarity index 100% rename from Notes/snippets/blogger_monitor_final.py rename to snippets/blogger_monitor_final.py diff --git a/Notes/snippets/blogger_monitor_simple.py b/snippets/blogger_monitor_simple.py similarity index 100% rename from Notes/snippets/blogger_monitor_simple.py rename to snippets/blogger_monitor_simple.py diff --git a/Notes/snippets/check-learning-material-queue.py b/snippets/check-learning-material-queue.py similarity index 100% rename from Notes/snippets/check-learning-material-queue.py rename to snippets/check-learning-material-queue.py diff --git a/Notes/snippets/check-snippet-links.py b/snippets/check-snippet-links.py similarity index 100% rename from Notes/snippets/check-snippet-links.py rename to snippets/check-snippet-links.py diff --git a/Notes/snippets/claude-to-im-health.py b/snippets/claude-to-im-health.py similarity index 100% rename from Notes/snippets/claude-to-im-health.py rename to snippets/claude-to-im-health.py diff --git a/Notes/snippets/claude-to-im-healthcheck.sh b/snippets/claude-to-im-healthcheck.sh similarity index 100% rename from Notes/snippets/claude-to-im-healthcheck.sh rename to snippets/claude-to-im-healthcheck.sh diff --git a/Notes/snippets/cluster-management.sh b/snippets/cluster-management.sh similarity index 100% rename from Notes/snippets/cluster-management.sh rename to snippets/cluster-management.sh diff --git a/Notes/snippets/cmake-basic.py b/snippets/cmake-basic.py similarity index 100% rename from Notes/snippets/cmake-basic.py rename to snippets/cmake-basic.py diff --git a/Notes/snippets/code-format.sh b/snippets/code-format.sh similarity index 100% rename from Notes/snippets/code-format.sh rename to snippets/code-format.sh diff --git a/Notes/snippets/code-reading-gem-lite.py b/snippets/code-reading-gem-lite.py similarity index 100% rename from Notes/snippets/code-reading-gem-lite.py rename to snippets/code-reading-gem-lite.py diff --git a/Notes/snippets/code-reading-gpu-cv-speedup.cc b/snippets/code-reading-gpu-cv-speedup.cc similarity index 100% rename from Notes/snippets/code-reading-gpu-cv-speedup.cc rename to snippets/code-reading-gpu-cv-speedup.cc diff --git a/Notes/snippets/code-reading-hugectr.py b/snippets/code-reading-hugectr.py similarity index 100% rename from Notes/snippets/code-reading-hugectr.py rename to snippets/code-reading-hugectr.py diff --git a/Notes/snippets/code-reading-huggingface-transformers.py b/snippets/code-reading-huggingface-transformers.py similarity index 100% rename from Notes/snippets/code-reading-huggingface-transformers.py rename to snippets/code-reading-huggingface-transformers.py diff --git a/Notes/snippets/code-reading-intro.md b/snippets/code-reading-intro.md similarity index 100% rename from Notes/snippets/code-reading-intro.md rename to snippets/code-reading-intro.md diff --git a/Notes/snippets/code-reading-mini-swe-agent.py b/snippets/code-reading-mini-swe-agent.py similarity index 100% rename from Notes/snippets/code-reading-mini-swe-agent.py rename to snippets/code-reading-mini-swe-agent.py diff --git a/Notes/snippets/code-reading-model-OpenNMT.py b/snippets/code-reading-model-OpenNMT.py similarity index 100% rename from Notes/snippets/code-reading-model-OpenNMT.py rename to snippets/code-reading-model-OpenNMT.py diff --git a/Notes/snippets/code-reading-model-deepseek-v3.py b/snippets/code-reading-model-deepseek-v3.py similarity index 100% rename from Notes/snippets/code-reading-model-deepseek-v3.py rename to snippets/code-reading-model-deepseek-v3.py diff --git a/Notes/snippets/code-reading-model-dlrm.py b/snippets/code-reading-model-dlrm.py similarity index 100% rename from Notes/snippets/code-reading-model-dlrm.py rename to snippets/code-reading-model-dlrm.py diff --git a/Notes/snippets/code-reading-model-llama3.py b/snippets/code-reading-model-llama3.py similarity index 100% rename from Notes/snippets/code-reading-model-llama3.py rename to snippets/code-reading-model-llama3.py diff --git a/Notes/snippets/code-reading-model-llm-cccl.cc b/snippets/code-reading-model-llm-cccl.cc similarity index 100% rename from Notes/snippets/code-reading-model-llm-cccl.cc rename to snippets/code-reading-model-llm-cccl.cc diff --git a/Notes/snippets/code-reading-model-nanogpt.py b/snippets/code-reading-model-nanogpt.py similarity index 100% rename from Notes/snippets/code-reading-model-nanogpt.py rename to snippets/code-reading-model-nanogpt.py diff --git a/Notes/snippets/code-reading-model-perceiver.py b/snippets/code-reading-model-perceiver.py similarity index 100% rename from Notes/snippets/code-reading-model-perceiver.py rename to snippets/code-reading-model-perceiver.py diff --git a/Notes/snippets/code-reading-model-rqvae.py b/snippets/code-reading-model-rqvae.py similarity index 100% rename from Notes/snippets/code-reading-model-rqvae.py rename to snippets/code-reading-model-rqvae.py diff --git a/Notes/snippets/code-reading-model-the-annotated-transformer.py b/snippets/code-reading-model-the-annotated-transformer.py similarity index 100% rename from Notes/snippets/code-reading-model-the-annotated-transformer.py rename to snippets/code-reading-model-the-annotated-transformer.py diff --git a/Notes/snippets/code-reading-nccl.cc b/snippets/code-reading-nccl.cc similarity index 100% rename from Notes/snippets/code-reading-nccl.cc rename to snippets/code-reading-nccl.cc diff --git a/Notes/snippets/code-reading-nvidia-triton-inference.cc b/snippets/code-reading-nvidia-triton-inference.cc similarity index 100% rename from Notes/snippets/code-reading-nvidia-triton-inference.cc rename to snippets/code-reading-nvidia-triton-inference.cc diff --git a/Notes/snippets/code-reading-polars.md b/snippets/code-reading-polars.md similarity index 100% rename from Notes/snippets/code-reading-polars.md rename to snippets/code-reading-polars.md diff --git a/Notes/snippets/code-reading-protobuf.cc b/snippets/code-reading-protobuf.cc similarity index 100% rename from Notes/snippets/code-reading-protobuf.cc rename to snippets/code-reading-protobuf.cc diff --git a/Notes/snippets/code-reading-pytorch-aten.cc b/snippets/code-reading-pytorch-aten.cc similarity index 100% rename from Notes/snippets/code-reading-pytorch-aten.cc rename to snippets/code-reading-pytorch-aten.cc diff --git a/Notes/snippets/code-reading-pytorch-autograd.cc b/snippets/code-reading-pytorch-autograd.cc similarity index 100% rename from Notes/snippets/code-reading-pytorch-autograd.cc rename to snippets/code-reading-pytorch-autograd.cc diff --git a/Notes/snippets/code-reading-pytorch-c10.cc b/snippets/code-reading-pytorch-c10.cc similarity index 100% rename from Notes/snippets/code-reading-pytorch-c10.cc rename to snippets/code-reading-pytorch-c10.cc diff --git a/Notes/snippets/code-reading-pytorch-compile-fused-add-addmm-mm-mul-sigmoid.py b/snippets/code-reading-pytorch-compile-fused-add-addmm-mm-mul-sigmoid.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-compile-fused-add-addmm-mm-mul-sigmoid.py rename to snippets/code-reading-pytorch-compile-fused-add-addmm-mm-mul-sigmoid.py diff --git a/Notes/snippets/code-reading-pytorch-compile-poi-add-relu-fusion.py b/snippets/code-reading-pytorch-compile-poi-add-relu-fusion.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-compile-poi-add-relu-fusion.py rename to snippets/code-reading-pytorch-compile-poi-add-relu-fusion.py diff --git a/Notes/snippets/code-reading-pytorch-compile.py b/snippets/code-reading-pytorch-compile.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-compile.py rename to snippets/code-reading-pytorch-compile.py diff --git a/Notes/snippets/code-reading-pytorch-cuda.py b/snippets/code-reading-pytorch-cuda.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-cuda.py rename to snippets/code-reading-pytorch-cuda.py diff --git a/Notes/snippets/code-reading-pytorch-dataset.py b/snippets/code-reading-pytorch-dataset.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-dataset.py rename to snippets/code-reading-pytorch-dataset.py diff --git a/Notes/snippets/code-reading-pytorch-dispatch.py b/snippets/code-reading-pytorch-dispatch.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-dispatch.py rename to snippets/code-reading-pytorch-dispatch.py diff --git a/Notes/snippets/code-reading-pytorch-distributed.py b/snippets/code-reading-pytorch-distributed.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-distributed.py rename to snippets/code-reading-pytorch-distributed.py diff --git a/Notes/snippets/code-reading-pytorch-intro.py b/snippets/code-reading-pytorch-intro.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-intro.py rename to snippets/code-reading-pytorch-intro.py diff --git a/Notes/snippets/code-reading-pytorch-module.py b/snippets/code-reading-pytorch-module.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-module.py rename to snippets/code-reading-pytorch-module.py diff --git a/Notes/snippets/code-reading-pytorch-op.cpp b/snippets/code-reading-pytorch-op.cpp similarity index 100% rename from Notes/snippets/code-reading-pytorch-op.cpp rename to snippets/code-reading-pytorch-op.cpp diff --git a/Notes/snippets/code-reading-pytorch-optim.py b/snippets/code-reading-pytorch-optim.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-optim.py rename to snippets/code-reading-pytorch-optim.py diff --git a/Notes/snippets/code-reading-pytorch-refs.py b/snippets/code-reading-pytorch-refs.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-refs.py rename to snippets/code-reading-pytorch-refs.py diff --git a/Notes/snippets/code-reading-pytorch-sparse.py b/snippets/code-reading-pytorch-sparse.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-sparse.py rename to snippets/code-reading-pytorch-sparse.py diff --git a/Notes/snippets/code-reading-pytorch-utils.py b/snippets/code-reading-pytorch-utils.py similarity index 100% rename from Notes/snippets/code-reading-pytorch-utils.py rename to snippets/code-reading-pytorch-utils.py diff --git a/Notes/snippets/code-reading-quant-autoawq.py b/snippets/code-reading-quant-autoawq.py similarity index 100% rename from Notes/snippets/code-reading-quant-autoawq.py rename to snippets/code-reading-quant-autoawq.py diff --git a/Notes/snippets/code-reading-quant-pytorch-amp.py b/snippets/code-reading-quant-pytorch-amp.py similarity index 100% rename from Notes/snippets/code-reading-quant-pytorch-amp.py rename to snippets/code-reading-quant-pytorch-amp.py diff --git a/Notes/snippets/code-reading-quant-torchao.py b/snippets/code-reading-quant-torchao.py similarity index 100% rename from Notes/snippets/code-reading-quant-torchao.py rename to snippets/code-reading-quant-torchao.py diff --git a/Notes/snippets/code-reading-ring-flash-attn.py b/snippets/code-reading-ring-flash-attn.py similarity index 100% rename from Notes/snippets/code-reading-ring-flash-attn.py rename to snippets/code-reading-ring-flash-attn.py diff --git a/Notes/snippets/code-reading-sglang.py b/snippets/code-reading-sglang.py similarity index 100% rename from Notes/snippets/code-reading-sglang.py rename to snippets/code-reading-sglang.py diff --git a/Notes/snippets/code-reading-sparsify-torchao.py b/snippets/code-reading-sparsify-torchao.py similarity index 100% rename from Notes/snippets/code-reading-sparsify-torchao.py rename to snippets/code-reading-sparsify-torchao.py diff --git a/Notes/snippets/code-reading-tensorflow-op.cc b/snippets/code-reading-tensorflow-op.cc similarity index 100% rename from Notes/snippets/code-reading-tensorflow-op.cc rename to snippets/code-reading-tensorflow-op.cc diff --git a/Notes/snippets/code-reading-trae-agent.md b/snippets/code-reading-trae-agent.md similarity index 100% rename from Notes/snippets/code-reading-trae-agent.md rename to snippets/code-reading-trae-agent.md diff --git a/Notes/snippets/code-reading-vllm.py b/snippets/code-reading-vllm.py similarity index 100% rename from Notes/snippets/code-reading-vllm.py rename to snippets/code-reading-vllm.py diff --git a/Notes/snippets/codex-goal-pre-tick.py b/snippets/codex-goal-pre-tick.py similarity index 99% rename from Notes/snippets/codex-goal-pre-tick.py rename to snippets/codex-goal-pre-tick.py index bc1f73b4..80c23237 100644 --- a/Notes/snippets/codex-goal-pre-tick.py +++ b/snippets/codex-goal-pre-tick.py @@ -22,8 +22,8 @@ LOCAL = ROOT / ".local" GOAL_STATE_FILE = LOCAL / "ACTIVE_GOAL_STATE.md" CAPABILITY_BACKLOG_FILE = LOCAL / "CS_NOTES_CAPABILITY_BACKLOG.md" -MATERIAL_HEALTHCHECK_SCRIPT = ROOT / "Notes/snippets/material-candidates-healthcheck.py" -NOTE_SECTION_HEALTHCHECK_SCRIPT = ROOT / "Notes/snippets/note-section-healthcheck.py" +MATERIAL_HEALTHCHECK_SCRIPT = ROOT / "snippets/material-candidates-healthcheck.py" +NOTE_SECTION_HEALTHCHECK_SCRIPT = ROOT / "snippets/note-section-healthcheck.py" NOTE_STRUCTURE_HEALTH_TARGETS = [ ROOT / "Notes/AI-Applied-Algorithms.md", ] diff --git a/Notes/snippets/codex-goal-state.py b/snippets/codex-goal-state.py similarity index 100% rename from Notes/snippets/codex-goal-state.py rename to snippets/codex-goal-state.py diff --git a/Notes/snippets/codex-persistent-shell.sh b/snippets/codex-persistent-shell.sh similarity index 100% rename from Notes/snippets/codex-persistent-shell.sh rename to snippets/codex-persistent-shell.sh diff --git a/Notes/snippets/codex-thread-queue.py b/snippets/codex-thread-queue.py similarity index 100% rename from Notes/snippets/codex-thread-queue.py rename to snippets/codex-thread-queue.py diff --git a/Notes/snippets/codex_todo_triage.py b/snippets/codex_todo_triage.py similarity index 99% rename from Notes/snippets/codex_todo_triage.py rename to snippets/codex_todo_triage.py index d85c2b34..1b4a7b1a 100755 --- a/Notes/snippets/codex_todo_triage.py +++ b/snippets/codex_todo_triage.py @@ -229,7 +229,7 @@ def empty_queue_lines() -> list[str]: "空队列时,`推进TODO` 不硬编旧任务,按这个顺序找下一批:", "", "1. 复盘最近 3-5 条 completed TODO,沉淀流程、脚本、AGENTS.md 规则或索引生成逻辑。", - "2. 检查 `.trae/`、`Notes/snippets/`、`.codex/skills/`、`.openclaw-memory/` 中是否有可提升效率的机制小切口。", + "2. 检查 `.trae/`、`snippets/`、`.codex/skills/`、`.openclaw-memory/` 中是否有可提升效率的机制小切口。", "3. 检查素材探索能力本身:trusted sources、读取工具、候选库治理、Unread/fallback 规则,而不是默认消费材料队列。", "4. 查看 `.trae/documents/Codex-TODO-User-Action-Queue.md` 是否有用户动作需要提醒或压缩。", "5. 只在发现明确小切口时新增 TODO;否则明确回复“队列为空”,不制造伪进展。", @@ -521,7 +521,7 @@ def blocker_checks(data: dict[str, Any]) -> list[tuple[str, str, str]]: if search_script.exists() and search_script.stat().st_mode & 0o111: checks.append(("todo-20260225-016", "maybe-unblocked", "`gh auth status` 已通过;可运行 github-search 验证 JSON 输出。")) else: - checks.append(("todo-20260225-016", "blocked", "`gh` 已登录,但 `Notes/snippets/github-search.sh` 不存在或不可执行。")) + checks.append(("todo-20260225-016", "blocked", "`gh` 已登录,但 `snippets/github-search.sh` 不存在或不可执行。")) else: checks.append(("todo-20260225-016", "blocked", f"`gh` 已安装但未登录:{message}")) diff --git a/Notes/snippets/command_logger.py b/snippets/command_logger.py similarity index 100% rename from Notes/snippets/command_logger.py rename to snippets/command_logger.py diff --git a/Notes/snippets/conda.py b/snippets/conda.py similarity index 100% rename from Notes/snippets/conda.py rename to snippets/conda.py diff --git a/Notes/snippets/context_completer.py b/snippets/context_completer.py similarity index 100% rename from Notes/snippets/context_completer.py rename to snippets/context_completer.py diff --git a/Notes/snippets/cpp-absl.cc b/snippets/cpp-absl.cc similarity index 100% rename from Notes/snippets/cpp-absl.cc rename to snippets/cpp-absl.cc diff --git a/Notes/snippets/cpp-auto.cc b/snippets/cpp-auto.cc similarity index 100% rename from Notes/snippets/cpp-auto.cc rename to snippets/cpp-auto.cc diff --git a/Notes/snippets/cpp-template.cc b/snippets/cpp-template.cc similarity index 100% rename from Notes/snippets/cpp-template.cc rename to snippets/cpp-template.cc diff --git a/Notes/snippets/cpu-profiling.sh b/snippets/cpu-profiling.sh similarity index 100% rename from Notes/snippets/cpu-profiling.sh rename to snippets/cpu-profiling.sh diff --git a/Notes/snippets/db-mongodb-aggregation.py b/snippets/db-mongodb-aggregation.py similarity index 100% rename from Notes/snippets/db-mongodb-aggregation.py rename to snippets/db-mongodb-aggregation.py diff --git a/Notes/snippets/db-mongodb-basic.py b/snippets/db-mongodb-basic.py similarity index 100% rename from Notes/snippets/db-mongodb-basic.py rename to snippets/db-mongodb-basic.py diff --git a/Notes/snippets/docker.sh b/snippets/docker.sh similarity index 100% rename from Notes/snippets/docker.sh rename to snippets/docker.sh diff --git a/Notes/snippets/example_task_with_logger.py b/snippets/example_task_with_logger.py similarity index 93% rename from Notes/snippets/example_task_with_logger.py rename to snippets/example_task_with_logger.py index 9d621f95..a63aa68d 100644 --- a/Notes/snippets/example_task_with_logger.py +++ b/snippets/example_task_with_logger.py @@ -52,8 +52,8 @@ def example_task(): task_id=task_id, execution_summary="示例任务执行成功,展示了如何使用 task_execution_logger.py", product_links=["https://github.com/huangrt01/CS-Notes"], - key_diffs=["modified: Notes/snippets/example_task_with_logger.py"], - reproduction_commands=["python3 Notes/snippets/example_task_with_logger.py"] + key_diffs=["modified: snippets/example_task_with_logger.py"], + reproduction_commands=["python3 snippets/example_task_with_logger.py"] ) logger.save_artifact(artifact) diff --git a/Notes/snippets/example_voice_task_parsing.py b/snippets/example_voice_task_parsing.py similarity index 100% rename from Notes/snippets/example_voice_task_parsing.py rename to snippets/example_voice_task_parsing.py diff --git a/Notes/snippets/execution_tracker.py b/snippets/execution_tracker.py similarity index 100% rename from Notes/snippets/execution_tracker.py rename to snippets/execution_tracker.py diff --git a/Notes/snippets/extract_trusted_material_sources.py b/snippets/extract_trusted_material_sources.py similarity index 100% rename from Notes/snippets/extract_trusted_material_sources.py rename to snippets/extract_trusted_material_sources.py diff --git a/Notes/snippets/generate-ai-hotspots-daily.sh b/snippets/generate-ai-hotspots-daily.sh similarity index 100% rename from Notes/snippets/generate-ai-hotspots-daily.sh rename to snippets/generate-ai-hotspots-daily.sh diff --git a/Notes/snippets/git-sync.sh b/snippets/git-sync.sh similarity index 100% rename from Notes/snippets/git-sync.sh rename to snippets/git-sync.sh diff --git a/Notes/snippets/github-search.sh b/snippets/github-search.sh similarity index 87% rename from Notes/snippets/github-search.sh rename to snippets/github-search.sh index aaf97fc5..e06629e8 100755 --- a/Notes/snippets/github-search.sh +++ b/snippets/github-search.sh @@ -4,11 +4,11 @@ set -euo pipefail usage() { cat <<'EOF' Usage: - Notes/snippets/github-search.sh status - Notes/snippets/github-search.sh repos "agent memory llm" [limit] - Notes/snippets/github-search.sh code "memory router" owner/repo [limit] - Notes/snippets/github-search.sh issues "memory" owner/repo [limit] - Notes/snippets/github-search.sh prs "eval" owner/repo [limit] + snippets/github-search.sh status + snippets/github-search.sh repos "agent memory llm" [limit] + snippets/github-search.sh code "memory router" owner/repo [limit] + snippets/github-search.sh issues "memory" owner/repo [limit] + snippets/github-search.sh prs "eval" owner/repo [limit] Requires: gh auth login diff --git a/Notes/snippets/go-panic-recover.go b/snippets/go-panic-recover.go similarity index 100% rename from Notes/snippets/go-panic-recover.go rename to snippets/go-panic-recover.go diff --git a/Notes/snippets/gpu-cccl.cc b/snippets/gpu-cccl.cc similarity index 100% rename from Notes/snippets/gpu-cccl.cc rename to snippets/gpu-cccl.cc diff --git a/Notes/snippets/gpu-cuda-python.py b/snippets/gpu-cuda-python.py similarity index 100% rename from Notes/snippets/gpu-cuda-python.py rename to snippets/gpu-cuda-python.py diff --git a/Notes/snippets/gpu-cudf.cc b/snippets/gpu-cudf.cc similarity index 100% rename from Notes/snippets/gpu-cudf.cc rename to snippets/gpu-cudf.cc diff --git a/Notes/snippets/gpu-cutlass.cc b/snippets/gpu-cutlass.cc similarity index 100% rename from Notes/snippets/gpu-cutlass.cc rename to snippets/gpu-cutlass.cc diff --git a/Notes/snippets/gpu-cutlass.py b/snippets/gpu-cutlass.py similarity index 100% rename from Notes/snippets/gpu-cutlass.py rename to snippets/gpu-cutlass.py diff --git a/Notes/snippets/gpu-debugging.py b/snippets/gpu-debugging.py similarity index 100% rename from Notes/snippets/gpu-debugging.py rename to snippets/gpu-debugging.py diff --git a/Notes/snippets/gpu-mps.sh b/snippets/gpu-mps.sh similarity index 100% rename from Notes/snippets/gpu-mps.sh rename to snippets/gpu-mps.sh diff --git a/Notes/snippets/gpu-numba.py b/snippets/gpu-numba.py similarity index 100% rename from Notes/snippets/gpu-numba.py rename to snippets/gpu-numba.py diff --git a/Notes/snippets/gpu-nvidia.py b/snippets/gpu-nvidia.py similarity index 100% rename from Notes/snippets/gpu-nvidia.py rename to snippets/gpu-nvidia.py diff --git a/Notes/snippets/gpu-ops/C-atomic.cu b/snippets/gpu-ops/C-atomic.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-atomic.cu rename to snippets/gpu-ops/C-atomic.cu diff --git a/Notes/snippets/gpu-ops/C-basic.cu b/snippets/gpu-ops/C-basic.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-basic.cu rename to snippets/gpu-ops/C-basic.cu diff --git a/Notes/snippets/gpu-ops/C-copy-occupancy.cu b/snippets/gpu-ops/C-copy-occupancy.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-copy-occupancy.cu rename to snippets/gpu-ops/C-copy-occupancy.cu diff --git a/Notes/snippets/gpu-ops/C-cuda-graph.cu b/snippets/gpu-ops/C-cuda-graph.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-cuda-graph.cu rename to snippets/gpu-ops/C-cuda-graph.cu diff --git a/Notes/snippets/gpu-ops/C-divergence.cu b/snippets/gpu-ops/C-divergence.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-divergence.cu rename to snippets/gpu-ops/C-divergence.cu diff --git a/Notes/snippets/gpu-ops/C-heat-conduction.cu b/snippets/gpu-ops/C-heat-conduction.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-heat-conduction.cu rename to snippets/gpu-ops/C-heat-conduction.cu diff --git a/Notes/snippets/gpu-ops/C-malloc.cu b/snippets/gpu-ops/C-malloc.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-malloc.cu rename to snippets/gpu-ops/C-malloc.cu diff --git a/Notes/snippets/gpu-ops/C-matrix-transposition.cu b/snippets/gpu-ops/C-matrix-transposition.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-matrix-transposition.cu rename to snippets/gpu-ops/C-matrix-transposition.cu diff --git a/Notes/snippets/gpu-ops/C-mean_filter.cu b/snippets/gpu-ops/C-mean_filter.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-mean_filter.cu rename to snippets/gpu-ops/C-mean_filter.cu diff --git a/Notes/snippets/gpu-ops/C-mean_filter.py b/snippets/gpu-ops/C-mean_filter.py similarity index 100% rename from Notes/snippets/gpu-ops/C-mean_filter.py rename to snippets/gpu-ops/C-mean_filter.py diff --git a/Notes/snippets/gpu-ops/C-memcpy-async.cu b/snippets/gpu-ops/C-memcpy-async.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-memcpy-async.cu rename to snippets/gpu-ops/C-memcpy-async.cu diff --git a/Notes/snippets/gpu-ops/C-memory-order.cu b/snippets/gpu-ops/C-memory-order.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-memory-order.cu rename to snippets/gpu-ops/C-memory-order.cu diff --git a/Notes/snippets/gpu-ops/C-nbody-optimized.cu b/snippets/gpu-ops/C-nbody-optimized.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-nbody-optimized.cu rename to snippets/gpu-ops/C-nbody-optimized.cu diff --git a/Notes/snippets/gpu-ops/C-nbody-raw.cu b/snippets/gpu-ops/C-nbody-raw.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-nbody-raw.cu rename to snippets/gpu-ops/C-nbody-raw.cu diff --git a/Notes/snippets/gpu-ops/C-optimization.cu b/snippets/gpu-ops/C-optimization.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-optimization.cu rename to snippets/gpu-ops/C-optimization.cu diff --git a/Notes/snippets/gpu-ops/C-saxpy.cu b/snippets/gpu-ops/C-saxpy.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-saxpy.cu rename to snippets/gpu-ops/C-saxpy.cu diff --git a/Notes/snippets/gpu-ops/C-sgemm.cu b/snippets/gpu-ops/C-sgemm.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-sgemm.cu rename to snippets/gpu-ops/C-sgemm.cu diff --git a/Notes/snippets/gpu-ops/C-stream-event.cu b/snippets/gpu-ops/C-stream-event.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-stream-event.cu rename to snippets/gpu-ops/C-stream-event.cu diff --git a/Notes/snippets/gpu-ops/C-stream.cu b/snippets/gpu-ops/C-stream.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-stream.cu rename to snippets/gpu-ops/C-stream.cu diff --git a/Notes/snippets/gpu-ops/C-vector-add-prefetch.cu b/snippets/gpu-ops/C-vector-add-prefetch.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-vector-add-prefetch.cu rename to snippets/gpu-ops/C-vector-add-prefetch.cu diff --git a/Notes/snippets/gpu-ops/C-window-sum.cu b/snippets/gpu-ops/C-window-sum.cu similarity index 100% rename from Notes/snippets/gpu-ops/C-window-sum.cu rename to snippets/gpu-ops/C-window-sum.cu diff --git a/Notes/snippets/gpu-ops/CCCL-C-scan.cu b/snippets/gpu-ops/CCCL-C-scan.cu similarity index 100% rename from Notes/snippets/gpu-ops/CCCL-C-scan.cu rename to snippets/gpu-ops/CCCL-C-scan.cu diff --git a/Notes/snippets/gpu-ops/cccl-layer-norm.cu b/snippets/gpu-ops/CCCL-layer-norm.cu similarity index 100% rename from Notes/snippets/gpu-ops/cccl-layer-norm.cu rename to snippets/gpu-ops/CCCL-layer-norm.cu diff --git a/Notes/snippets/gpu-ops/T-C-add-coarsened.py b/snippets/gpu-ops/T-C-add-coarsened.py similarity index 100% rename from Notes/snippets/gpu-ops/T-C-add-coarsened.py rename to snippets/gpu-ops/T-C-add-coarsened.py diff --git a/Notes/snippets/gpu-ops/T-C-matmul.py b/snippets/gpu-ops/T-C-matmul.py similarity index 100% rename from Notes/snippets/gpu-ops/T-C-matmul.py rename to snippets/gpu-ops/T-C-matmul.py diff --git a/Notes/snippets/gpu-ops/T-C-reduce.py b/snippets/gpu-ops/T-C-reduce.py similarity index 100% rename from Notes/snippets/gpu-ops/T-C-reduce.py rename to snippets/gpu-ops/T-C-reduce.py diff --git a/Notes/snippets/gpu-ops/T-basic-ops.py b/snippets/gpu-ops/T-basic-ops.py similarity index 100% rename from Notes/snippets/gpu-ops/T-basic-ops.py rename to snippets/gpu-ops/T-basic-ops.py diff --git a/Notes/snippets/gpu-ops/T-basic.py b/snippets/gpu-ops/T-basic.py similarity index 100% rename from Notes/snippets/gpu-ops/T-basic.py rename to snippets/gpu-ops/T-basic.py diff --git a/Notes/snippets/gpu-ops/T-debugging.py b/snippets/gpu-ops/T-debugging.py similarity index 100% rename from Notes/snippets/gpu-ops/T-debugging.py rename to snippets/gpu-ops/T-debugging.py diff --git a/Notes/snippets/gpu-ops/T-dropout(low-memory).py b/snippets/gpu-ops/T-dropout(low-memory).py similarity index 100% rename from Notes/snippets/gpu-ops/T-dropout(low-memory).py rename to snippets/gpu-ops/T-dropout(low-memory).py diff --git a/Notes/snippets/gpu-ops/T-flash-attention.py b/snippets/gpu-ops/T-flash-attention.py similarity index 100% rename from Notes/snippets/gpu-ops/T-flash-attention.py rename to snippets/gpu-ops/T-flash-attention.py diff --git a/Notes/snippets/gpu-ops/T-fused-add-mul-act.py b/snippets/gpu-ops/T-fused-add-mul-act.py similarity index 100% rename from Notes/snippets/gpu-ops/T-fused-add-mul-act.py rename to snippets/gpu-ops/T-fused-add-mul-act.py diff --git a/Notes/snippets/gpu-ops/T-index-select-test.py b/snippets/gpu-ops/T-index-select-test.py similarity index 100% rename from Notes/snippets/gpu-ops/T-index-select-test.py rename to snippets/gpu-ops/T-index-select-test.py diff --git a/Notes/snippets/gpu-ops/T-index-select.py b/snippets/gpu-ops/T-index-select.py similarity index 99% rename from Notes/snippets/gpu-ops/T-index-select.py rename to snippets/gpu-ops/T-index-select.py index 905e3bf3..7e2cdcb1 100644 --- a/Notes/snippets/gpu-ops/T-index-select.py +++ b/snippets/gpu-ops/T-index-select.py @@ -248,7 +248,7 @@ def backward(ctx, *grad_outputs: list[torch.Tensor]): return grad_unique_values, None unique_ratio = num_indices / num_rows # heuristic for choosing the backward implementation - # Ref: https://bytedance.larkoffice.com/docx/FhAddVRQRofQCoxBZrIcoWxIn5c + # Ref: internal benchmark note; private document URL removed. threshold = None if unique_ratio <= 0.02: threshold = 400000 diff --git a/Notes/snippets/gpu-ops/T-layer-norm.py b/snippets/gpu-ops/T-layer-norm.py similarity index 100% rename from Notes/snippets/gpu-ops/T-layer-norm.py rename to snippets/gpu-ops/T-layer-norm.py diff --git a/Notes/snippets/gpu-ops/T-libdevice.py b/snippets/gpu-ops/T-libdevice.py similarity index 100% rename from Notes/snippets/gpu-ops/T-libdevice.py rename to snippets/gpu-ops/T-libdevice.py diff --git a/Notes/snippets/gpu-ops/T-softmax.py b/snippets/gpu-ops/T-softmax.py similarity index 100% rename from Notes/snippets/gpu-ops/T-softmax.py rename to snippets/gpu-ops/T-softmax.py diff --git a/Notes/snippets/gpu-ops/T-square.py b/snippets/gpu-ops/T-square.py similarity index 100% rename from Notes/snippets/gpu-ops/T-square.py rename to snippets/gpu-ops/T-square.py diff --git a/Notes/snippets/gpu-ops/code-reading-cutlass.cc b/snippets/gpu-ops/code-reading-cutlass.cc similarity index 100% rename from Notes/snippets/gpu-ops/code-reading-cutlass.cc rename to snippets/gpu-ops/code-reading-cutlass.cc diff --git a/Notes/snippets/gpu-ops/code-reading-megatron.py b/snippets/gpu-ops/code-reading-megatron.py similarity index 100% rename from Notes/snippets/gpu-ops/code-reading-megatron.py rename to snippets/gpu-ops/code-reading-megatron.py diff --git a/Notes/snippets/gpu-ops/code-reading-pytorch-gpu-op.cc b/snippets/gpu-ops/code-reading-pytorch-gpu-op.cc similarity index 100% rename from Notes/snippets/gpu-ops/code-reading-pytorch-gpu-op.cc rename to snippets/gpu-ops/code-reading-pytorch-gpu-op.cc diff --git a/Notes/snippets/gpu-ops/code-reading-sgemm.cu b/snippets/gpu-ops/code-reading-sgemm.cu similarity index 100% rename from Notes/snippets/gpu-ops/code-reading-sgemm.cu rename to snippets/gpu-ops/code-reading-sgemm.cu diff --git a/Notes/snippets/gpu-ops/code-reading-triton.py b/snippets/gpu-ops/code-reading-triton.py similarity index 100% rename from Notes/snippets/gpu-ops/code-reading-triton.py rename to snippets/gpu-ops/code-reading-triton.py diff --git a/Notes/snippets/gpu-ops/cpp-file.cc b/snippets/gpu-ops/cpp-file.cc similarity index 100% rename from Notes/snippets/gpu-ops/cpp-file.cc rename to snippets/gpu-ops/cpp-file.cc diff --git a/Notes/snippets/gpu-ops/cutlass-sgemm.cc b/snippets/gpu-ops/cutlass-sgemm.cc similarity index 100% rename from Notes/snippets/gpu-ops/cutlass-sgemm.cc rename to snippets/gpu-ops/cutlass-sgemm.cc diff --git a/Notes/snippets/gpu-ops/flash-attention-demo.py b/snippets/gpu-ops/flash-attention-demo.py similarity index 100% rename from Notes/snippets/gpu-ops/flash-attention-demo.py rename to snippets/gpu-ops/flash-attention-demo.py diff --git a/Notes/snippets/gpu-ops/gpu-cuda-ctx.py b/snippets/gpu-ops/gpu-cuda-ctx.py similarity index 100% rename from Notes/snippets/gpu-ops/gpu-cuda-ctx.py rename to snippets/gpu-ops/gpu-cuda-ctx.py diff --git a/Notes/snippets/gpu-ops/gpu-cuda-driver.py b/snippets/gpu-ops/gpu-cuda-driver.py similarity index 100% rename from Notes/snippets/gpu-ops/gpu-cuda-driver.py rename to snippets/gpu-ops/gpu-cuda-driver.py diff --git a/Notes/snippets/gpu-ops/gpu-cuda-runtime.py b/snippets/gpu-ops/gpu-cuda-runtime.py similarity index 100% rename from Notes/snippets/gpu-ops/gpu-cuda-runtime.py rename to snippets/gpu-ops/gpu-cuda-runtime.py diff --git a/Notes/snippets/gpu-ops/gpu_kernel_utils.py b/snippets/gpu-ops/gpu_kernel_utils.py similarity index 100% rename from Notes/snippets/gpu-ops/gpu_kernel_utils.py rename to snippets/gpu-ops/gpu_kernel_utils.py diff --git a/Notes/snippets/gpu-ops/rope.py b/snippets/gpu-ops/rope.py similarity index 100% rename from Notes/snippets/gpu-ops/rope.py rename to snippets/gpu-ops/rope.py diff --git a/Notes/snippets/gpu-optimization.py b/snippets/gpu-optimization.py similarity index 100% rename from Notes/snippets/gpu-optimization.py rename to snippets/gpu-optimization.py diff --git a/Notes/snippets/gpu-profiling-hta.py b/snippets/gpu-profiling-hta.py similarity index 100% rename from Notes/snippets/gpu-profiling-hta.py rename to snippets/gpu-profiling-hta.py diff --git a/Notes/snippets/gpu-profiling-nsys.py b/snippets/gpu-profiling-nsys.py similarity index 100% rename from Notes/snippets/gpu-profiling-nsys.py rename to snippets/gpu-profiling-nsys.py diff --git a/Notes/snippets/gpu-profiling-torch-profile.py b/snippets/gpu-profiling-torch-profile.py similarity index 100% rename from Notes/snippets/gpu-profiling-torch-profile.py rename to snippets/gpu-profiling-torch-profile.py diff --git a/Notes/snippets/gpu-profiling.py b/snippets/gpu-profiling.py similarity index 100% rename from Notes/snippets/gpu-profiling.py rename to snippets/gpu-profiling.py diff --git a/Notes/snippets/gpu-ptx.cc b/snippets/gpu-ptx.cc similarity index 100% rename from Notes/snippets/gpu-ptx.cc rename to snippets/gpu-ptx.cc diff --git a/Notes/snippets/gpu-triton-ir.py b/snippets/gpu-triton-ir.py similarity index 100% rename from Notes/snippets/gpu-triton-ir.py rename to snippets/gpu-triton-ir.py diff --git a/Notes/snippets/gtest.cc b/snippets/gtest.cc similarity index 100% rename from Notes/snippets/gtest.cc rename to snippets/gtest.cc diff --git a/Notes/snippets/hdfs-utils.py b/snippets/hdfs-utils.py similarity index 100% rename from Notes/snippets/hdfs-utils.py rename to snippets/hdfs-utils.py diff --git a/Notes/snippets/huggingface-clip.py b/snippets/huggingface-clip.py similarity index 100% rename from Notes/snippets/huggingface-clip.py rename to snippets/huggingface-clip.py diff --git a/Notes/snippets/huggingface.py b/snippets/huggingface.py similarity index 100% rename from Notes/snippets/huggingface.py rename to snippets/huggingface.py diff --git a/Notes/snippets/install-ai-hotspots-launchd.sh b/snippets/install-ai-hotspots-launchd.sh similarity index 86% rename from Notes/snippets/install-ai-hotspots-launchd.sh rename to snippets/install-ai-hotspots-launchd.sh index b5848401..d860c5f3 100755 --- a/Notes/snippets/install-ai-hotspots-launchd.sh +++ b/snippets/install-ai-hotspots-launchd.sh @@ -3,12 +3,12 @@ set -euo pipefail REPO_ROOT="${REPO_ROOT:-/Users/bytedance/CS-Notes}" LABEL="com.huangrt.csnotes.ai-hotspots" -SRC_PLIST="$REPO_ROOT/Notes/snippets/launchd/$LABEL.plist" +SRC_PLIST="$REPO_ROOT/snippets/launchd/$LABEL.plist" DST_PLIST="$HOME/Library/LaunchAgents/$LABEL.plist" DOMAIN="gui/$(id -u)" mkdir -p "$HOME/Library/LaunchAgents" "$REPO_ROOT/.local/ai-hotspots/logs" "$REPO_ROOT/.local/ai-hotspots/reports" -chmod +x "$REPO_ROOT/Notes/snippets/generate-ai-hotspots-daily.sh" +chmod +x "$REPO_ROOT/snippets/generate-ai-hotspots-daily.sh" if [[ ! -f "$SRC_PLIST" ]]; then echo "Missing source plist: $SRC_PLIST" diff --git a/Notes/snippets/lark-derived-doc-sync-checklist.md b/snippets/lark-derived-doc-sync-checklist.md similarity index 100% rename from Notes/snippets/lark-derived-doc-sync-checklist.md rename to snippets/lark-derived-doc-sync-checklist.md diff --git a/Notes/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist b/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist similarity index 92% rename from Notes/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist rename to snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist index 9944db42..6a0a8206 100644 --- a/Notes/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist +++ b/snippets/launchd/com.huangrt.csnotes.ai-hotspots.plist @@ -9,7 +9,7 @@ ProgramArguments /bin/zsh - /Users/bytedance/CS-Notes/Notes/snippets/generate-ai-hotspots-daily.sh + /Users/bytedance/CS-Notes/snippets/generate-ai-hotspots-daily.sh WorkingDirectory diff --git a/Notes/snippets/lua-wrk-post.lua b/snippets/lua-wrk-post.lua similarity index 100% rename from Notes/snippets/lua-wrk-post.lua rename to snippets/lua-wrk-post.lua diff --git a/Notes/snippets/markdown_toc.py b/snippets/markdown_toc.py similarity index 100% rename from Notes/snippets/markdown_toc.py rename to snippets/markdown_toc.py diff --git a/Notes/snippets/material-candidates-healthcheck.py b/snippets/material-candidates-healthcheck.py similarity index 100% rename from Notes/snippets/material-candidates-healthcheck.py rename to snippets/material-candidates-healthcheck.py diff --git a/Notes/snippets/math-solve-equation.py b/snippets/math-solve-equation.py similarity index 100% rename from Notes/snippets/math-solve-equation.py rename to snippets/math-solve-equation.py diff --git a/Notes/snippets/model-llm-attn.py b/snippets/model-llm-attn.py similarity index 100% rename from Notes/snippets/model-llm-attn.py rename to snippets/model-llm-attn.py diff --git a/Notes/snippets/model-llm-lora.py b/snippets/model-llm-lora.py similarity index 100% rename from Notes/snippets/model-llm-lora.py rename to snippets/model-llm-lora.py diff --git a/Notes/snippets/model-llm-transformers.py b/snippets/model-llm-transformers.py similarity index 100% rename from Notes/snippets/model-llm-transformers.py rename to snippets/model-llm-transformers.py diff --git a/Notes/snippets/model-onnx.py b/snippets/model-onnx.py similarity index 100% rename from Notes/snippets/model-onnx.py rename to snippets/model-onnx.py diff --git a/Notes/snippets/note-section-healthcheck.py b/snippets/note-section-healthcheck.py similarity index 100% rename from Notes/snippets/note-section-healthcheck.py rename to snippets/note-section-healthcheck.py diff --git a/Notes/snippets/nvidia-triton-inference-analyzer.py b/snippets/nvidia-triton-inference-analyzer.py similarity index 100% rename from Notes/snippets/nvidia-triton-inference-analyzer.py rename to snippets/nvidia-triton-inference-analyzer.py diff --git a/Notes/snippets/nvidia-triton-inference.py b/snippets/nvidia-triton-inference.py similarity index 100% rename from Notes/snippets/nvidia-triton-inference.py rename to snippets/nvidia-triton-inference.py diff --git a/Notes/snippets/openclaw.sh b/snippets/openclaw.sh similarity index 100% rename from Notes/snippets/openclaw.sh rename to snippets/openclaw.sh diff --git a/Notes/snippets/pdf_parser.py b/snippets/pdf_parser.py similarity index 100% rename from Notes/snippets/pdf_parser.py rename to snippets/pdf_parser.py diff --git a/Notes/snippets/protobuf.cc b/snippets/protobuf.cc similarity index 100% rename from Notes/snippets/protobuf.cc rename to snippets/protobuf.cc diff --git a/Notes/snippets/protobuf.py b/snippets/protobuf.py similarity index 100% rename from Notes/snippets/protobuf.py rename to snippets/protobuf.py diff --git a/Notes/snippets/pybind.cc b/snippets/pybind.cc similarity index 100% rename from Notes/snippets/pybind.cc rename to snippets/pybind.cc diff --git a/Notes/snippets/python-argparse.py b/snippets/python-argparse.py similarity index 100% rename from Notes/snippets/python-argparse.py rename to snippets/python-argparse.py diff --git a/Notes/snippets/python-asyncio.py b/snippets/python-asyncio.py similarity index 100% rename from Notes/snippets/python-asyncio.py rename to snippets/python-asyncio.py diff --git a/Notes/snippets/python-backend.py b/snippets/python-backend.py similarity index 100% rename from Notes/snippets/python-backend.py rename to snippets/python-backend.py diff --git a/Notes/snippets/python-basics.py b/snippets/python-basics.py similarity index 100% rename from Notes/snippets/python-basics.py rename to snippets/python-basics.py diff --git a/Notes/snippets/python-call-process-with-timeout.py b/snippets/python-call-process-with-timeout.py similarity index 100% rename from Notes/snippets/python-call-process-with-timeout.py rename to snippets/python-call-process-with-timeout.py diff --git a/Notes/snippets/python-class.py b/snippets/python-class.py similarity index 100% rename from Notes/snippets/python-class.py rename to snippets/python-class.py diff --git a/Notes/snippets/python-coding-styles.py b/snippets/python-coding-styles.py similarity index 100% rename from Notes/snippets/python-coding-styles.py rename to snippets/python-coding-styles.py diff --git a/Notes/snippets/python-containers.py b/snippets/python-containers.py similarity index 100% rename from Notes/snippets/python-containers.py rename to snippets/python-containers.py diff --git a/Notes/snippets/python-csv.py b/snippets/python-csv.py similarity index 100% rename from Notes/snippets/python-csv.py rename to snippets/python-csv.py diff --git a/Notes/snippets/python-debugging-profiling.py b/snippets/python-debugging-profiling.py similarity index 100% rename from Notes/snippets/python-debugging-profiling.py rename to snippets/python-debugging-profiling.py diff --git a/Notes/snippets/python-debugging.py b/snippets/python-debugging.py similarity index 100% rename from Notes/snippets/python-debugging.py rename to snippets/python-debugging.py diff --git a/Notes/snippets/python-dev.py b/snippets/python-dev.py similarity index 100% rename from Notes/snippets/python-dev.py rename to snippets/python-dev.py diff --git a/Notes/snippets/python-files.py b/snippets/python-files.py similarity index 100% rename from Notes/snippets/python-files.py rename to snippets/python-files.py diff --git a/Notes/snippets/python-functools.py b/snippets/python-functools.py similarity index 100% rename from Notes/snippets/python-functools.py rename to snippets/python-functools.py diff --git a/Notes/snippets/python-gc.py b/snippets/python-gc.py similarity index 100% rename from Notes/snippets/python-gc.py rename to snippets/python-gc.py diff --git a/Notes/snippets/python-iter-generator.py b/snippets/python-iter-generator.py similarity index 100% rename from Notes/snippets/python-iter-generator.py rename to snippets/python-iter-generator.py diff --git a/Notes/snippets/python-json.py b/snippets/python-json.py similarity index 100% rename from Notes/snippets/python-json.py rename to snippets/python-json.py diff --git a/Notes/snippets/python-logging.py b/snippets/python-logging.py similarity index 100% rename from Notes/snippets/python-logging.py rename to snippets/python-logging.py diff --git a/Notes/snippets/python-matplotlib.py b/snippets/python-matplotlib.py similarity index 100% rename from Notes/snippets/python-matplotlib.py rename to snippets/python-matplotlib.py diff --git a/Notes/snippets/python-meta-programming.py b/snippets/python-meta-programming.py similarity index 100% rename from Notes/snippets/python-meta-programming.py rename to snippets/python-meta-programming.py diff --git a/Notes/snippets/python-multiprocess.py b/snippets/python-multiprocess.py similarity index 100% rename from Notes/snippets/python-multiprocess.py rename to snippets/python-multiprocess.py diff --git a/Notes/snippets/python-multithread.py b/snippets/python-multithread.py similarity index 100% rename from Notes/snippets/python-multithread.py rename to snippets/python-multithread.py diff --git a/Notes/snippets/python-numpy.py b/snippets/python-numpy.py similarity index 100% rename from Notes/snippets/python-numpy.py rename to snippets/python-numpy.py diff --git a/Notes/snippets/python-pandas.py b/snippets/python-pandas.py similarity index 100% rename from Notes/snippets/python-pandas.py rename to snippets/python-pandas.py diff --git a/Notes/snippets/python-pickle.py b/snippets/python-pickle.py similarity index 100% rename from Notes/snippets/python-pickle.py rename to snippets/python-pickle.py diff --git a/Notes/snippets/python-pip.sh b/snippets/python-pip.sh similarity index 100% rename from Notes/snippets/python-pip.sh rename to snippets/python-pip.sh diff --git a/Notes/snippets/python-process.py b/snippets/python-process.py similarity index 100% rename from Notes/snippets/python-process.py rename to snippets/python-process.py diff --git a/Notes/snippets/python-prometheus-basic.py b/snippets/python-prometheus-basic.py similarity index 100% rename from Notes/snippets/python-prometheus-basic.py rename to snippets/python-prometheus-basic.py diff --git a/Notes/snippets/python-pydantic.py b/snippets/python-pydantic.py similarity index 100% rename from Notes/snippets/python-pydantic.py rename to snippets/python-pydantic.py diff --git a/Notes/snippets/python-spark.py b/snippets/python-spark.py similarity index 100% rename from Notes/snippets/python-spark.py rename to snippets/python-spark.py diff --git a/Notes/snippets/python-str.py b/snippets/python-str.py similarity index 100% rename from Notes/snippets/python-str.py rename to snippets/python-str.py diff --git a/Notes/snippets/python-test-absl.py b/snippets/python-test-absl.py similarity index 100% rename from Notes/snippets/python-test-absl.py rename to snippets/python-test-absl.py diff --git a/Notes/snippets/python-test.py b/snippets/python-test.py similarity index 100% rename from Notes/snippets/python-test.py rename to snippets/python-test.py diff --git a/Notes/snippets/python-time.py b/snippets/python-time.py similarity index 100% rename from Notes/snippets/python-time.py rename to snippets/python-time.py diff --git a/Notes/snippets/python-tqdm.py b/snippets/python-tqdm.py similarity index 100% rename from Notes/snippets/python-tqdm.py rename to snippets/python-tqdm.py diff --git a/Notes/snippets/python-visualization.py b/snippets/python-visualization.py similarity index 100% rename from Notes/snippets/python-visualization.py rename to snippets/python-visualization.py diff --git a/Notes/snippets/python-web.py b/snippets/python-web.py similarity index 100% rename from Notes/snippets/python-web.py rename to snippets/python-web.py diff --git a/Notes/snippets/pytorch-autograd.py b/snippets/pytorch-autograd.py similarity index 100% rename from Notes/snippets/pytorch-autograd.py rename to snippets/pytorch-autograd.py diff --git a/Notes/snippets/pytorch-basics.py b/snippets/pytorch-basics.py similarity index 100% rename from Notes/snippets/pytorch-basics.py rename to snippets/pytorch-basics.py diff --git a/Notes/snippets/pytorch-dataset-and-dataloader.py b/snippets/pytorch-dataset-and-dataloader.py similarity index 100% rename from Notes/snippets/pytorch-dataset-and-dataloader.py rename to snippets/pytorch-dataset-and-dataloader.py diff --git a/Notes/snippets/pytorch-debugging.py b/snippets/pytorch-debugging.py similarity index 100% rename from Notes/snippets/pytorch-debugging.py rename to snippets/pytorch-debugging.py diff --git a/Notes/snippets/pytorch-dev.py b/snippets/pytorch-dev.py similarity index 100% rename from Notes/snippets/pytorch-dev.py rename to snippets/pytorch-dev.py diff --git a/Notes/snippets/pytorch-distributed-all2all-sparse.py b/snippets/pytorch-distributed-all2all-sparse.py similarity index 100% rename from Notes/snippets/pytorch-distributed-all2all-sparse.py rename to snippets/pytorch-distributed-all2all-sparse.py diff --git a/Notes/snippets/pytorch-distributed-example.py b/snippets/pytorch-distributed-example.py similarity index 100% rename from Notes/snippets/pytorch-distributed-example.py rename to snippets/pytorch-distributed-example.py diff --git a/Notes/snippets/pytorch-distributed.py b/snippets/pytorch-distributed.py similarity index 100% rename from Notes/snippets/pytorch-distributed.py rename to snippets/pytorch-distributed.py diff --git a/Notes/snippets/pytorch-environment.py b/snippets/pytorch-environment.py similarity index 100% rename from Notes/snippets/pytorch-environment.py rename to snippets/pytorch-environment.py diff --git a/Notes/snippets/pytorch-functional.py b/snippets/pytorch-functional.py similarity index 100% rename from Notes/snippets/pytorch-functional.py rename to snippets/pytorch-functional.py diff --git a/Notes/snippets/pytorch-image-models.py b/snippets/pytorch-image-models.py similarity index 100% rename from Notes/snippets/pytorch-image-models.py rename to snippets/pytorch-image-models.py diff --git a/Notes/snippets/pytorch-image-search.py b/snippets/pytorch-image-search.py similarity index 100% rename from Notes/snippets/pytorch-image-search.py rename to snippets/pytorch-image-search.py diff --git a/Notes/snippets/pytorch-inference.py b/snippets/pytorch-inference.py similarity index 100% rename from Notes/snippets/pytorch-inference.py rename to snippets/pytorch-inference.py diff --git a/Notes/snippets/pytorch-kmeans-init.py b/snippets/pytorch-kmeans-init.py similarity index 100% rename from Notes/snippets/pytorch-kmeans-init.py rename to snippets/pytorch-kmeans-init.py diff --git a/Notes/snippets/pytorch-libtorch.cc b/snippets/pytorch-libtorch.cc similarity index 100% rename from Notes/snippets/pytorch-libtorch.cc rename to snippets/pytorch-libtorch.cc diff --git a/Notes/snippets/pytorch-lightning.py b/snippets/pytorch-lightning.py similarity index 100% rename from Notes/snippets/pytorch-lightning.py rename to snippets/pytorch-lightning.py diff --git a/Notes/snippets/pytorch-model.py b/snippets/pytorch-model.py similarity index 100% rename from Notes/snippets/pytorch-model.py rename to snippets/pytorch-model.py diff --git a/Notes/snippets/pytorch-nlp.py b/snippets/pytorch-nlp.py similarity index 100% rename from Notes/snippets/pytorch-nlp.py rename to snippets/pytorch-nlp.py diff --git a/Notes/snippets/pytorch-op.cpp b/snippets/pytorch-op.cpp similarity index 100% rename from Notes/snippets/pytorch-op.cpp rename to snippets/pytorch-op.cpp diff --git a/Notes/snippets/pytorch-op.py b/snippets/pytorch-op.py similarity index 100% rename from Notes/snippets/pytorch-op.py rename to snippets/pytorch-op.py diff --git a/Notes/snippets/pytorch-optim-profiling.py b/snippets/pytorch-optim-profiling.py similarity index 100% rename from Notes/snippets/pytorch-optim-profiling.py rename to snippets/pytorch-optim-profiling.py diff --git a/Notes/snippets/pytorch-optimization.py b/snippets/pytorch-optimization.py similarity index 100% rename from Notes/snippets/pytorch-optimization.py rename to snippets/pytorch-optimization.py diff --git a/Notes/snippets/pytorch-rpc.py b/snippets/pytorch-rpc.py similarity index 100% rename from Notes/snippets/pytorch-rpc.py rename to snippets/pytorch-rpc.py diff --git a/Notes/snippets/pytorch-sparse.py b/snippets/pytorch-sparse.py similarity index 100% rename from Notes/snippets/pytorch-sparse.py rename to snippets/pytorch-sparse.py diff --git a/Notes/snippets/pytorch-test.py b/snippets/pytorch-test.py similarity index 100% rename from Notes/snippets/pytorch-test.py rename to snippets/pytorch-test.py diff --git a/Notes/snippets/pytorch-training-example.py b/snippets/pytorch-training-example.py similarity index 100% rename from Notes/snippets/pytorch-training-example.py rename to snippets/pytorch-training-example.py diff --git a/Notes/snippets/pytorch-training-gpu.py b/snippets/pytorch-training-gpu.py similarity index 100% rename from Notes/snippets/pytorch-training-gpu.py rename to snippets/pytorch-training-gpu.py diff --git a/Notes/snippets/pytorch-training.py b/snippets/pytorch-training.py similarity index 100% rename from Notes/snippets/pytorch-training.py rename to snippets/pytorch-training.py diff --git a/Notes/snippets/quant-pytorch-amp.py b/snippets/quant-pytorch-amp.py similarity index 100% rename from Notes/snippets/quant-pytorch-amp.py rename to snippets/quant-pytorch-amp.py diff --git a/Notes/snippets/quant-pytorch.py b/snippets/quant-pytorch.py similarity index 100% rename from Notes/snippets/quant-pytorch.py rename to snippets/quant-pytorch.py diff --git a/Notes/snippets/read-done-closure-checklist.md b/snippets/read-done-closure-checklist.md similarity index 100% rename from Notes/snippets/read-done-closure-checklist.md rename to snippets/read-done-closure-checklist.md diff --git a/Notes/snippets/refine-memory-principles.py b/snippets/refine-memory-principles.py similarity index 100% rename from Notes/snippets/refine-memory-principles.py rename to snippets/refine-memory-principles.py diff --git a/Notes/snippets/restore_openclaw_links.sh b/snippets/restore_openclaw_links.sh similarity index 100% rename from Notes/snippets/restore_openclaw_links.sh rename to snippets/restore_openclaw_links.sh diff --git a/Notes/snippets/session-monitor.py b/snippets/session-monitor.py similarity index 100% rename from Notes/snippets/session-monitor.py rename to snippets/session-monitor.py diff --git a/Notes/snippets/session-optimizer.py b/snippets/session-optimizer.py similarity index 100% rename from Notes/snippets/session-optimizer.py rename to snippets/session-optimizer.py diff --git a/Notes/snippets/shell-argocd.sh b/snippets/shell-argocd.sh similarity index 100% rename from Notes/snippets/shell-argocd.sh rename to snippets/shell-argocd.sh diff --git a/Notes/snippets/shell-basic.sh b/snippets/shell-basic.sh similarity index 100% rename from Notes/snippets/shell-basic.sh rename to snippets/shell-basic.sh diff --git a/Notes/snippets/shell-example-process-files.sh b/snippets/shell-example-process-files.sh similarity index 100% rename from Notes/snippets/shell-example-process-files.sh rename to snippets/shell-example-process-files.sh diff --git a/Notes/snippets/shell-file.sh b/snippets/shell-file.sh similarity index 100% rename from Notes/snippets/shell-file.sh rename to snippets/shell-file.sh diff --git a/Notes/snippets/shell-kubectl.sh b/snippets/shell-kubectl.sh similarity index 100% rename from Notes/snippets/shell-kubectl.sh rename to snippets/shell-kubectl.sh diff --git a/Notes/snippets/shell-kubevpn.sh b/snippets/shell-kubevpn.sh similarity index 100% rename from Notes/snippets/shell-kubevpn.sh rename to snippets/shell-kubevpn.sh diff --git a/Notes/snippets/shell-logging.sh b/snippets/shell-logging.sh similarity index 100% rename from Notes/snippets/shell-logging.sh rename to snippets/shell-logging.sh diff --git a/Notes/snippets/shell-process.sh b/snippets/shell-process.sh similarity index 100% rename from Notes/snippets/shell-process.sh rename to snippets/shell-process.sh diff --git a/Notes/snippets/speech_to_text.py b/snippets/speech_to_text.py similarity index 100% rename from Notes/snippets/speech_to_text.py rename to snippets/speech_to_text.py diff --git a/Notes/snippets/sql-abtest-metrics.sql b/snippets/sql-abtest-metrics.sql similarity index 100% rename from Notes/snippets/sql-abtest-metrics.sql rename to snippets/sql-abtest-metrics.sql diff --git a/Notes/snippets/task_execution_logger.py b/snippets/task_execution_logger.py similarity index 100% rename from Notes/snippets/task_execution_logger.py rename to snippets/task_execution_logger.py diff --git a/Notes/snippets/task_executor.py b/snippets/task_executor.py similarity index 100% rename from Notes/snippets/task_executor.py rename to snippets/task_executor.py diff --git a/Notes/snippets/tensorboard.py b/snippets/tensorboard.py similarity index 100% rename from Notes/snippets/tensorboard.py rename to snippets/tensorboard.py diff --git a/Notes/snippets/tensorrt.cc b/snippets/tensorrt.cc similarity index 100% rename from Notes/snippets/tensorrt.cc rename to snippets/tensorrt.cc diff --git a/Notes/snippets/test-github-scrape.py b/snippets/test-github-scrape.py similarity index 100% rename from Notes/snippets/test-github-scrape.py rename to snippets/test-github-scrape.py diff --git a/Notes/snippets/tf-data-batchmap-benchmark.py b/snippets/tf-data-batchmap-benchmark.py similarity index 100% rename from Notes/snippets/tf-data-batchmap-benchmark.py rename to snippets/tf-data-batchmap-benchmark.py diff --git a/Notes/snippets/tf-debugging.py b/snippets/tf-debugging.py similarity index 100% rename from Notes/snippets/tf-debugging.py rename to snippets/tf-debugging.py diff --git a/Notes/snippets/tf-gpu-training.py b/snippets/tf-gpu-training.py similarity index 100% rename from Notes/snippets/tf-gpu-training.py rename to snippets/tf-gpu-training.py diff --git a/Notes/snippets/tf-load-ckpt.py b/snippets/tf-load-ckpt.py similarity index 100% rename from Notes/snippets/tf-load-ckpt.py rename to snippets/tf-load-ckpt.py diff --git a/Notes/snippets/tf-read-model-proto.py b/snippets/tf-read-model-proto.py similarity index 100% rename from Notes/snippets/tf-read-model-proto.py rename to snippets/tf-read-model-proto.py diff --git a/Notes/snippets/tf-test.py b/snippets/tf-test.py similarity index 100% rename from Notes/snippets/tf-test.py rename to snippets/tf-test.py diff --git a/Notes/snippets/thrift.py b/snippets/thrift.py similarity index 100% rename from Notes/snippets/thrift.py rename to snippets/thrift.py diff --git a/Notes/snippets/thunder.py b/snippets/thunder.py similarity index 100% rename from Notes/snippets/thunder.py rename to snippets/thunder.py diff --git a/Notes/snippets/todo-prompt.py b/snippets/todo-prompt.py similarity index 100% rename from Notes/snippets/todo-prompt.py rename to snippets/todo-prompt.py diff --git a/Notes/snippets/todo-pull.sh b/snippets/todo-pull.sh similarity index 97% rename from Notes/snippets/todo-pull.sh rename to snippets/todo-pull.sh index 09db29ef..910940b6 100755 --- a/Notes/snippets/todo-pull.sh +++ b/snippets/todo-pull.sh @@ -6,8 +6,8 @@ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" LOG_DIR="$REPO_ROOT/.trae/logs" LOG_FILE="$LOG_DIR/todo-pull-$(date +%Y%m%d).log" -TODO_MANAGER="$REPO_ROOT/Notes/snippets/todo-manager.py" -TODO_PROMPT="$REPO_ROOT/Notes/snippets/todo-prompt.py" +TODO_MANAGER="$REPO_ROOT/snippets/todo-manager.py" +TODO_PROMPT="$REPO_ROOT/snippets/todo-prompt.py" DEFAULT_BRANCH="master" # 创建日志目录 diff --git a/Notes/snippets/todo-push-commit.sh b/snippets/todo-push-commit.sh similarity index 100% rename from Notes/snippets/todo-push-commit.sh rename to snippets/todo-push-commit.sh diff --git a/Notes/snippets/todo-push.sh b/snippets/todo-push.sh similarity index 100% rename from Notes/snippets/todo-push.sh rename to snippets/todo-push.sh diff --git a/Notes/snippets/todo_migrator.py b/snippets/todo_migrator.py similarity index 100% rename from Notes/snippets/todo_migrator.py rename to snippets/todo_migrator.py diff --git a/Notes/snippets/todo_sync.py b/snippets/todo_sync.py similarity index 100% rename from Notes/snippets/todo_sync.py rename to snippets/todo_sync.py diff --git a/Notes/snippets/todo_utils.py b/snippets/todo_utils.py similarity index 100% rename from Notes/snippets/todo_utils.py rename to snippets/todo_utils.py diff --git a/Notes/snippets/todos-web-manager/README.md b/snippets/todos-web-manager/README.md similarity index 100% rename from Notes/snippets/todos-web-manager/README.md rename to snippets/todos-web-manager/README.md diff --git a/Notes/snippets/todos-web-manager/install-launchd.sh b/snippets/todos-web-manager/install-launchd.sh similarity index 85% rename from Notes/snippets/todos-web-manager/install-launchd.sh rename to snippets/todos-web-manager/install-launchd.sh index 15c8af9b..d3d439ed 100755 --- a/Notes/snippets/todos-web-manager/install-launchd.sh +++ b/snippets/todos-web-manager/install-launchd.sh @@ -3,12 +3,12 @@ set -euo pipefail REPO_ROOT="${REPO_ROOT:-/Users/bytedance/CS-Notes}" LABEL="com.huangrt.csnotes.todos-web-manager" -SRC_PLIST="$REPO_ROOT/Notes/snippets/todos-web-manager/launchd/$LABEL.plist" +SRC_PLIST="$REPO_ROOT/snippets/todos-web-manager/launchd/$LABEL.plist" DST_PLIST="$HOME/Library/LaunchAgents/$LABEL.plist" DOMAIN="gui/$(id -u)" mkdir -p "$HOME/Library/LaunchAgents" "$REPO_ROOT/.local/todos-web-manager/logs" -chmod +x "$REPO_ROOT/Notes/snippets/todos-web-manager/start.sh" +chmod +x "$REPO_ROOT/snippets/todos-web-manager/start.sh" if [[ ! -f "$SRC_PLIST" ]]; then echo "Missing source plist: $SRC_PLIST" diff --git a/Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist b/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist similarity index 93% rename from Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist rename to snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist index e1ee250c..7f180ddf 100644 --- a/Notes/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist +++ b/snippets/todos-web-manager/launchd/com.huangrt.csnotes.todos-web-manager.plist @@ -9,7 +9,7 @@ ProgramArguments /bin/zsh - /Users/bytedance/CS-Notes/Notes/snippets/todos-web-manager/start.sh + /Users/bytedance/CS-Notes/snippets/todos-web-manager/start.sh WorkingDirectory diff --git a/Notes/snippets/todos-web-manager/start.sh b/snippets/todos-web-manager/start.sh similarity index 100% rename from Notes/snippets/todos-web-manager/start.sh rename to snippets/todos-web-manager/start.sh diff --git a/Notes/snippets/todos-web-manager/uninstall-launchd.sh b/snippets/todos-web-manager/uninstall-launchd.sh similarity index 100% rename from Notes/snippets/todos-web-manager/uninstall-launchd.sh rename to snippets/todos-web-manager/uninstall-launchd.sh diff --git a/Notes/snippets/top_lean_ai_monitor.py b/snippets/top_lean_ai_monitor.py similarity index 100% rename from Notes/snippets/top_lean_ai_monitor.py rename to snippets/top_lean_ai_monitor.py diff --git a/Notes/snippets/trusted_source_scan.py b/snippets/trusted_source_scan.py similarity index 100% rename from Notes/snippets/trusted_source_scan.py rename to snippets/trusted_source_scan.py diff --git a/Notes/snippets/uninstall-ai-hotspots-launchd.sh b/snippets/uninstall-ai-hotspots-launchd.sh similarity index 100% rename from Notes/snippets/uninstall-ai-hotspots-launchd.sh rename to snippets/uninstall-ai-hotspots-launchd.sh diff --git a/Notes/snippets/voice_task_parser.py b/snippets/voice_task_parser.py similarity index 100% rename from Notes/snippets/voice_task_parser.py rename to snippets/voice_task_parser.py diff --git "a/\345\210\233\344\275\234/02.23 OpenClaw \344\275\223\351\252\214\344\270\216\346\200\235\350\200\203\357\274\232\344\273\216 Backlog \347\256\241\347\220\206\345\210\260 Proactive Agent.md" "b/\345\210\233\344\275\234/02.23 OpenClaw \344\275\223\351\252\214\344\270\216\346\200\235\350\200\203\357\274\232\344\273\216 Backlog \347\256\241\347\220\206\345\210\260 Proactive Agent.md" index 34b45197..c5bbf104 100644 --- "a/\345\210\233\344\275\234/02.23 OpenClaw \344\275\223\351\252\214\344\270\216\346\200\235\350\200\203\357\274\232\344\273\216 Backlog \347\256\241\347\220\206\345\210\260 Proactive Agent.md" +++ "b/\345\210\233\344\275\234/02.23 OpenClaw \344\275\223\351\252\214\344\270\216\346\200\235\350\200\203\357\274\232\344\273\216 Backlog \347\256\241\347\220\206\345\210\260 Proactive Agent.md" @@ -127,7 +127,7 @@ OpenClaw 并非简单的执行器,而是基于严格的数据源管理。 2. Git 操作 SOP 与安全防线 为了防止 AI 意外泄露敏感信息或破坏代码库,建立了严格的操作 SOP。 /* MEMORY.md - Git 操作 SOP */ -- 必须使用 `Notes/snippets/todo-push.sh` 和 `Notes/snippets/todo-pull.sh` 作为标准 git 操作流程,不能直接用 git 命令 +- 必须使用 `snippets/todo-push.sh` 和 `snippets/todo-pull.sh` 作为标准 git 操作流程,不能直接用 git 命令 - todo-push.sh 白名单机制:仅允许 `Notes/`、`.trae/`、`创作/` 三个文件夹 - todo-push.sh 黑名单机制:绝对禁止 `公司项目/` 文件夹 - 验证步骤:每次 commit 前,先执行 `git status` 检查,或直接运行 `todo-push.sh` diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/01-cover.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/01-cover.jpg" new file mode 100644 index 00000000..a3e1fea7 Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/01-cover.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/02-taste.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/02-taste.jpg" new file mode 100644 index 00000000..bf22bb36 Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/02-taste.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/03-baby-product.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/03-baby-product.jpg" new file mode 100644 index 00000000..b3ad18ad Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/03-baby-product.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/04-dogfooding.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/04-dogfooding.jpg" new file mode 100644 index 00000000..e4b2f26c Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/04-dogfooding.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/05-six-launches.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/05-six-launches.jpg" new file mode 100644 index 00000000..91e4938b Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/05-six-launches.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/06-roles.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/06-roles.jpg" new file mode 100644 index 00000000..424cb75b Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/06-roles.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/07-codex-vision.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/07-codex-vision.jpg" new file mode 100644 index 00000000..f805f6a7 Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/07-codex-vision.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/08-loopx.jpg" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/08-loopx.jpg" new file mode 100644 index 00000000..5a0950a8 Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/08-loopx.jpg" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/goal-vision-replan-state.png" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/goal-vision-replan-state.png" new file mode 100644 index 00000000..de697a15 Binary files /dev/null and "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/goal-vision-replan-state.png" differ diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/spec.json" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/spec.json" new file mode 100644 index 00000000..e7d28250 --- /dev/null +++ "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210/spec.json" @@ -0,0 +1,262 @@ +{ + "style": { + "width": 1440, + "height": 2400, + "margin": 80, + "left_rule": 56, + "bottom_rule_offset": 122, + "title_size": 148, + "heading_size": 66, + "body_size": 58, + "meta_size": 40, + "title_font_index": 6, + "body_font_index": 6 + }, + "pages": [ + { + "filename": "01-cover.jpg", + "meta": "Codex 负责人对谈转述 | 阅读需8分钟", + "title": "Codex 负责人:\n实现越便宜\nVision 越贵", + "blocks": [ + { + "type": "paragraph", + "text": "Andrew Ambrosino 反对“所有人都是 builder”,重点不是 PM 要不要消失,而是 AI 时代产品组织的稀缺资源变了。" + }, + { + "type": "paragraph", + "text": "实现成本下降后,最贵的东西不再是“能不能做出来”,而是 vision、taste、判断,以及把 idea 推到 shipped product 的闭环能力。" + }, + { + "type": "paragraph", + "text": "Loop Engineering 解决的就是这个闭环问题:vision 不能停在一句口号,product feedback 不能散在聊天记录里,engineering 结果也要能写回下一轮判断。" + }, + { + "type": "paragraph", + "text": "这不是岗位保卫战,而是一套 AI 产品组织的 operating model:先用 baby 版本探索,再用 dogfooding 逼出真实需求,最后把工程结果写回新的 vision。" + } + ] + }, + { + "filename": "02-taste.jpg", + "heading": "1. 实现便宜后,taste 变贵", + "blocks": [ + { + "type": "paragraph", + "text": "Andrew Ambrosino 的核心判断很直接:当公司里 90 个人都能各自做出 90 个像样原型,真正的问题不再是“谁会做”,而是“哪一个值得做”。" + }, + { + "type": "paragraph", + "text": "这不是 PRD 死了,也不是原型赢了。更准确的变化是:每种媒介都变便宜后,选择正确媒介本身变成了产品能力。" + }, + { + "type": "paragraph", + "text": "如果要表达模糊方向,文档仍然有价值;如果要压力测试交互,原型更有效;如果要证明系统边界,代码和真实用户路径才是答案。" + }, + { + "type": "bullets", + "items": [ + "模糊方向,需要文档来压清楚判断。", + "交互模式,需要原型来让人上手试。", + "系统抽象,需要代码和真实工作流来验证。" + ] + }, + { + "type": "paragraph", + "text": "所谓 taste,不只是审美,而是在无限 tokens 里分辨信号和噪音。" + }, + { + "type": "paragraph", + "text": "实现越便宜,垃圾原型和垃圾文档都会变多。产品负责人真正要守住的,是判断密度。" + } + ] + }, + { + "filename": "03-baby-product.jpg", + "heading": "2. baby 版本让流程前置", + "blocks": [ + { + "type": "paragraph", + "text": "过去的产品流程默认实现很贵,所以要先调研、画图、写文档,把风险尽量排在开发之前。" + }, + { + "type": "paragraph", + "text": "现在不一样。一个探索阶段的东西,可能已经像正式产品一样精致。视觉成熟度和决策成熟度脱钩了。" + }, + { + "type": "paragraph", + "text": "这也是 baby Codex / baby Cursor 这类简化代码库有价值的原因:它让团队能在接近真实产品的环境里快速试交互,而不必一开始就动正式复杂系统。" + }, + { + "type": "paragraph", + "text": "但 baby 版本不是玩具。它真正承担的是“低成本暴露产品判断”的职责:这个交互是否成立,这个状态是否应该存在,这个入口是否会被用户自然使用。" + }, + { + "type": "paragraph", + "text": "关键不在于多做几个 demo,而在于每个 demo 都带着可判定的问题:用户会不会接手,agent 会不会卡住,状态能不能在下一轮继续使用。" + }, + { + "type": "rule", + "text": "风险不再只靠流程排除,而要靠可运行原型暴露。", + "size": 54 + } + ] + }, + { + "filename": "04-dogfooding.jpg", + "heading": "3. Codex 是被 dogfooding 塑造的", + "blocks": [ + { + "type": "paragraph", + "text": "对谈里最值得注意的一点,是 Codex 团队刻意把自己的工作推进到 Codex 里完成,即使它当下还不是最好的工具。" + }, + { + "type": "paragraph", + "text": "这是一种不舒服的产品策略:很多内部流程不是先用人工 workaround 补齐,而是逼产品本身长出能力。" + }, + { + "type": "paragraph", + "text": "这和“内部用户多用用”不是一回事。普通 dogfooding 很容易停在反馈收集;Codex 更像是把团队自己的工作流变成产品训练场。" + }, + { + "type": "bullets", + "items": [ + "不能做,就修到能做。", + "能做更多,产品边界就被重新定义。", + "真实团队工作流,成为产品需求生成器。" + ] + }, + { + "type": "paragraph", + "text": "这类 dogfooding 的价值,不是“我们自己也用”,而是让 vision、product、engineering 形成一条持续反馈的 loop。" + }, + { + "type": "paragraph", + "text": "产品不是先被完整设计出来,再交给工程实现。它是在真实使用压力里,一周一周被逼出来。" + } + ] + }, + { + "filename": "05-six-launches.jpg", + "heading": "4. 同一个形态,可能要发布六次", + "blocks": [ + { + "type": "paragraph", + "text": "对谈里还有一个很反常识的产品判断:一个功能现在失败,不一定说明形态错了,可能只是模型还没到。" + }, + { + "type": "paragraph", + "text": "Codex web 的早期形态并不激进:给模型一个任务,它去做,回来给结果。但当时模型不够强,形态就显得过早。" + }, + { + "type": "paragraph", + "text": "Claude Code 后来做得更本地、更克制、更贴合当时模型能力,所以体验反而好很多。" + }, + { + "type": "paragraph", + "text": "AI 产品规划因此变得很难:路线图不只取决于产品形态,还取决于模型能力什么时候跨过可用阈值。" + }, + { + "type": "paragraph", + "text": "所以规划不能只是一张 roadmap。它更像一个候选功能池:现在可行的推进,不可行的保留;每次模型跃迁后,再把旧想法拿出来重新验。" + }, + { + "type": "paragraph", + "text": "这也解释了为什么同一个产品形态可能要发布很多次。形态不变,模型能力变了,结果就会完全不同。" + } + ] + }, + { + "filename": "06-roles.jpg", + "heading": "5. 角色会融合,但专业不会消失", + "blocks": [ + { + "type": "paragraph", + "text": "“所有人都是 builder”糟糕的地方,在于它容易把学科里的最佳实践一并抹掉。会写几行代码,不等于会做产品判断。" + }, + { + "type": "paragraph", + "text": "更合理的变化是:角色边界变软,但专业分布仍然存在。设计师会写代码,PM 懂技术,工程师有产品判断,但每个人仍有自己的重心。" + }, + { + "type": "paragraph", + "text": "Andrew 用 zone defense 描述 PM 的位置也很准:不是所有人挤在同一块区域里写原型,而是有人主动覆盖那些没人看、但会决定产品方向的空白地带。" + }, + { + "type": "bullets", + "items": [ + "最有价值的人,能从想法推到完成。", + "但更关键的是知道什么值得完成。", + "在无限 tokens 里,筛掉垃圾比生产更多东西更重要。" + ] + }, + { + "type": "paragraph", + "text": "AI 时代的 IC,本质上也在管理 agents、任务、信息流和判断边界。" + }, + { + "type": "paragraph", + "text": "这也是“builder”这个词危险的地方:它很容易让人误以为生产更多东西就是价值本身。真正稀缺的是让东西进入正确形态的判断。" + } + ] + }, + { + "filename": "07-codex-vision.jpg", + "heading": "6. Codex 想做的不是一个矩形", + "blocks": [ + { + "type": "paragraph", + "text": "Codex 的愿景也很有意思:它不是要把所有事情塞进一个屏幕里的矩形应用。" + }, + { + "type": "paragraph", + "text": "它更像一个工作大本营:在这里开始、结束、管理自动化流程,同时调用浏览器、Chrome 扩展、computer use 和外部专业工具。" + }, + { + "type": "paragraph", + "text": "Dan Shipper 说的“由内而外使用 SaaS”很准确:未来不是你去 Notion、Linear、Salesforce 里点,而是 agent 在你的工作大本营里帮你操作它们。" + }, + { + "type": "paragraph", + "text": "对谈里那个视频剪辑例子很典型:Codex 不需要变成更好的 Premiere Pro,它可以理解专业工具背后的文件和插件接口,再把专业工具编排进任务里。" + }, + { + "type": "paragraph", + "text": "这会把产品边界从“我提供哪些 UI”改成“我能调度哪些能力”。开发者工具和知识工作工具因此开始靠近。" + }, + { + "type": "rule", + "text": "工具不是被替代,而是被 agent 编排。", + "size": 54 + } + ] + }, + { + "filename": "08-loopx.jpg", + "heading": "7. Goal / Vision / Replan", + "blocks": [ + { + "type": "paragraph", + "text": "Loop Engineering 到最后会落成一个状态机:goal 提供长期方向,vision 把方向压成每个 agent 当前可执行的边界,run 负责产生证据。" + }, + { + "type": "image", + "path": "创作/Codex负责人builder观点-小逸排版/goal-vision-replan-state.png", + "gap": 54 + }, + { + "type": "paragraph", + "text": "当证据耗尽、目标变化、handoff 清空但没有 successor,系统进入 replan。有效 replan 必须写回 bounded delta:新的 vision、todo、acceptance,或者 no-follow-up。" + }, + { + "type": "paragraph", + "text": "这正好接住 Codex 那条 vision -> product -> engineering -> new vision 的闭环。LoopX 的 vision 是把这套状态放进本地控制面,让长程 agent 不靠聊天记忆接力。" + }, + { + "type": "rule", + "text": "GitHub 搜:huangruiteng/loopx", + "size": 54 + } + ] + } + ] +} diff --git "a/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210\345\217\221\345\270\203\347\250\277.md" "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210\345\217\221\345\270\203\347\250\277.md" new file mode 100644 index 00000000..b2db31dd --- /dev/null +++ "b/\345\210\233\344\275\234/Codex\350\264\237\350\264\243\344\272\272builder\350\247\202\347\202\271-\345\260\217\351\200\270\346\216\222\347\211\210\345\217\221\345\270\203\347\250\277.md" @@ -0,0 +1,79 @@ +# Codex 负责人 builder 观点小红书素材 - 小逸排版版 + +## 图片上传顺序 + +1. ![](./Codex负责人builder观点-小逸排版/01-cover.jpg) +2. ![](./Codex负责人builder观点-小逸排版/02-taste.jpg) +3. ![](./Codex负责人builder观点-小逸排版/03-baby-product.jpg) +4. ![](./Codex负责人builder观点-小逸排版/04-dogfooding.jpg) +5. ![](./Codex负责人builder观点-小逸排版/05-six-launches.jpg) +6. ![](./Codex负责人builder观点-小逸排版/06-roles.jpg) +7. ![](./Codex负责人builder观点-小逸排版/07-codex-vision.jpg) +8. ![](./Codex负责人builder观点-小逸排版/08-loopx.jpg) + +## 标题 + +推荐: + +Codex 负责人:实现越便宜,Vision 越贵 + +备选: + +- 实现越便宜,Vision 越贵 +- 实现越便宜,Vision 越贵:不是所有人都该 Builder +- AI 产品到最后,不是拼 Builder,是拼 Vision +- AI 时代最稀缺的不是 builder,而是 taste +- Codex 负责人:所有人都是 Builder,是个糟糕的主意 +- Codex 负责人谈 AI 产品:实现便宜后,判断变贵 +- 从 Codex 团队看 Loop Engineering +- Codex 的真正启发:产品是一个持续闭环 + +## 正文 + +读完 Founder Park 转述的 Codex 负责人 Andrew Ambrosino 访谈,最想写的不是“PM 会不会消失”。 + +更核心的变化是:当 AI 把实现成本压低后,产品组织的稀缺资源变了。 + +过去最贵的是实现,所以产品流程围绕“实现前排风险”展开:调研、PRD、原型、评审。 + +现在更难的是判断: + +哪些东西值得做? +哪些原型只是看起来能发? +哪些 feature request 应该忽略、合并、重新定义? +什么时候一个功能不是坏,而只是模型还没到? + +这也是 Andrew 反对“所有人都是 builder”的原因。 + +角色边界会变软,但专业不会消失。 + +AI 时代最有价值的人,不只是能从 idea 推到 shipped product,而是有 vision 和 taste,知道什么值得推到 shipped product。 + +这条线索可以叫做 Loop Engineering。 + +Codex 团队每个人都在执行一条 loop: + +vision -> product -> engineering -> new vision + +他们用 Codex 做 Codex,刻意把真实工作流推回产品里,让产品自己长出能力。 + +Loop Engineering 解决的是这条闭环的工程化问题:goal 不能停在一句口号,vision 要被压成当前 agent 可执行的边界,run 产生的证据要能触发 replan。 + +有效 replan 不能只是 ACK。它必须写回 bounded delta:新的 vision、todo、acceptance,或者 no-follow-up。 + +LoopX 的 vision 就落在这里:为长程 agent 提供一层 harness / 控制面,让 goal、vision、replan、handoff 和 run history 能持续支撑下一轮执行。 + +GitHub 搜:huangruiteng/loopx + +#Codex #OpenAI #AIAgent #AI产品 #产品经理 #AI编程 #LoopEngineering #LoopX #开发者工具 #AgentInfra + +## 技术来源 + +- Founder Park 微信文章: +- 来源状态:已通过本机 Chrome / Playwright 读取全文,标题为《Codex 负责人:「所有人都是 builder」是个很糟糕的主意》,发布时间 2026-07-02 19:06。 + +## 发布备注 + +- 主线不要写成“我也聊 PM 是否消失”:实现成本下降 -> taste 稀缺 -> dogfooding loop -> Codex vision -> LoopX 控制面。 +- LoopX 只在首图和最后一图自然露出,不抢 Andrew 的观点本身。 +- 小红书正文里写“GitHub 搜:huangruiteng/loopx”,评论区可放完整链接。