acshame
-
-
- 一直以来多设备文件共享都是靠 OneDrive 和 iCloud 这种网盘来同步,但空间有限只放一些非常核心的数据,比如笔记库、配置文件等。最近在工作的一个项目需要用到很多资源文件,网盘就有点捉襟见肘了,于是给家里和工作的电脑都安装了 Syncthing,虽然知道它很多年但今天还是第一次用,配置简单而且速度很快,生活中有这样优质的开源软件真的太好了
-
-
-
-
- openclaw-android: 在 Android 上以轻量方式运行 OpenClaw 的 Termux 兼容方案
感谢 E5 佬的分享
• 无需安装完整 Linux 发行版,仅通过 glibc 动态链接器即可运行 OpenClaw,显著降低存储占用与部署复杂度
• 一条命令完成 Node.js、路径转换、临时目录、systemd 替代与兼容补丁配置,适合直接在手机上快速落地 AI Agent 环境
• 基于平台插件化架构设计,内置更新、卸载、状态检查与可选工具安装能力,也支持 code-server、OpenCode 和多种 AI CLI 扩展
https://github.com/AidanPark/openclaw-android
#Android #Termux #OpenClaw #AI Agent #Node.js #glibc #移动开发 #开发者工具 #命令行工具 #GitHub - pua — Claude Code Skill
https://pua-skill.pages.dev/ - 📃 Airing 收藏了一篇文章:《cft0808/edict: 🏛️ 三省六部制》via RainDrop - https://github.com/cft0808/edict
Note: 三省六部制 Agent Team,体验自己当皇帝
#bookmark #article -
- 最近在 x 说的多,没有转到频道里,给大家汇总一下 hhhh
1. 关于 Skill 结合业务的一些小心得:https://x.com/polebug/status/2033830964489809978
2. 内部 vibe coding 的小段子:https://x.com/polebug/status/2033476789516050552
3. 最近工作的碎碎念,关于 vibe coding 结合业务工程:
https://x.com/polebug/status/2033432442015777148
https://x.com/polebug/status/2031551329026584831
4. 关于 vibe coding 伤脑的锐评:https://x.com/polebug/status/2031988518394945816
https://x.com/polebug/status/2031919532869288028
---
😭😭😭 糟了,我最近真是班味很重,最近要说点别的,不说工作了 - | 术语 | 定义 |
|------|------|
| Area | JD 顶级分类(00-99) |
| Category | Area 内分类(000-999) |
| ID | Category 内序号(0001-9999) |
| 短 ID | Git 风格的简化 ID(如10.1.15→ `10.001.0015`) |
| Namespace | 资源逻辑分组,对应目录 |
| Frontmatter | Markdown 文件头部 YAML 元数据 |
| GTD | Getting Things Done 方法论 |
| CORE | Capture, Organize, Review, Execute |
| Sidecar Index | SQLite 索引文件(`.synapse/index.db`) |
| Fuzzy Finder | 模糊搜索功能,支持标题匹配 |
| Command Palette | 命令面板,类似 VS CodeCtrl+P|
| Refile | 将资源从 Inbox 移动到目标位置(Emacs Org-mode 术语) |
| Link Refactoring | Refile 时自动更新所有引用该资源的链接 |
| Transaction Rollback | 事务回滚,利用 Git 暂存区实现原子性操作 |
| Hybrid Search | 混合搜索,结合全文(Ripgrep)和元数据(SQLite) |
| Application-Layer Tokenization | 应用层分词,写入/搜索前用 jieba 预处理 |
| Stopword Filtering | 停用词过滤,去除标点和无意义字符 |
| Session Persistence | 会话持久化,记录用户上下文状态 |
| Suspension Context | 暂停上下文,Git 操作期间暂停 watchdog 避免自激 |
| watchdog | Python 文件系统监听库 |
| Textual Workers | Textual 框架的异步任务机制(@work 装饰器) |
---
## 附录 B:参考资源
- [Johnny.Decimal](https://johnnydecimal.com/)
- [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
- [k9s](https://k9scli.io/)
- [GTD](https://gettingthingsdone.com/)
- [GraphRAG](https://github.com/microsoft/graphrag)
- [LiteLLM](https://github.com/BerriAI/litellm)
- [Textual](https://textual.textualize.io/) - Python TUI 框架
- [Ripgrep](https://github.com/BurntSushi/ripgrep) - 高性能搜索工具
- [watchdog](https://github.com/gorakhargosh/watchdog) - Python 文件系统监听
- [jieba](https://github.com/fxsjy/jieba) - 中文分词(FTS5 增强) - | 操作 | 数据源 |
|------|--------|
|syn list,syn search(Frontmatter) | SQLite |
|syn search --content(全文) | Ripgrep → 再查 SQLite 补充元数据 |
|syn show,syn edit| 实际 Markdown 文件 |
### 13.5 混合搜索(Hybrid Search)
**场景**:用户想搜 "Project X"(全文)且 "Status=Todo"(元数据)。
**实现逻辑**:1. Ripgrep 搜索全文 → 返回匹配文件路径列表 2. 用路径列表查询 SQLite → 过滤 Status=Todo 3. 返回最终结果(带完整元数据)
**命令示例**:# 混合搜索:全文包含 "kubernetes" 且状态为 todo syn search "kubernetes" --status todo # 混合搜索:全文包含 "设计" 且标签包含 urgent syn search "设计" --tag urgent # 纯元数据搜索(due-before 基于 due 字段) syn search --type task --priority high --due-before 2024-01-15
**时间筛选参数说明**:
| 参数 | 对应字段 | 说明 |
|------|----------|------|
|--due-before|due| 截止日期早于指定日期的任务 |
|--due-after|due| 截止日期晚于指定日期的任务 |
|--created-before|created| 创建时间早于指定日期 |
|--created-after|created| 创建时间晚于指定日期 |
|--modified-before|modified| 修改时间早于指定日期 |
|--modified-after|modified| 修改时间晚于指定日期 |
**示例**:# 查找本周内到期的任务 syn search --type task --due-after monday --due-before sunday # 查找过去 7 天修改过的笔记 syn search --type note --modified-after "7 days ago"
### 13.6 批量操作与异步机制
针对 10,000+ 文件规模的操作优化:
**SQLite 事务批量写入**:# ❌ 错误:单条插入 1000 次 ≈ 5秒 for item in items: cursor.execute("INSERT INTO resources ...", item) conn.commit() # ✅ 正确:事务批量插入 1000 次 ≈ 0.05秒 cursor.execute("BEGIN TRANSACTION") for item in items: cursor.execute("INSERT INTO resources ...", item) cursor.execute("COMMIT")
**Textual 异步 Workers**:from textual import work class SynapseApp(App): @work(exclusive=True) async def action_batch_update_tags(self, ids: list, add_tag: str): """耗时操作放入后台线程,不阻塞 UI""" self.notify("正在批量更新标签...") # 执行文件 IO 和 DB 更新 await processor.batch_add_tag(ids, add_tag) self.notify(f"✓ 已更新 {len(ids)} 个资源") self.refresh_list()
**进度反馈**:
- 操作耗时 > 500ms 时,TUI 底部状态栏显示 Spinner
- 批量操作(如 Refile 多个文件)显示进度条
---
## 14. 成功标准
1. 快速捕获到 Inbox 并高效处理
2. Johnny.Decimal 编号清晰组织(支持短 ID 和模糊匹配)
3. Git 完整审计追踪(Conventional Commits)
4. k9s 风格 TUI(列表/日历/时间线/图谱视图 + 命令面板)
5. CORE 工作流:捕获 → 组织 → 回顾 → 执行
6. 本地 Hook 优先 + GitHub Actions 远程通知
7. 仅 Markdown,仓库精简(`syn media` 处理附件)
8. Namespace 支持项目级配置
9. 10,000 资源列表 < 500ms(SQLite 索引 + 批量事务)
10. 多端同步无痛(自动 rebase + 智能字段合并)
11. Refile 时链接自动更新,永不断裂
12. 中文全文搜索精准(jieba 应用层分词)
13. 会话状态持久化,随时恢复上下文
---
## 15. 边缘情况处理
| 场景 | 处理方案 |
|------|----------|
| title 修改 | 文件名同步更新(包含 title),但链接仅使用 ID,不受影响 |
| Refile 链接断裂 | 自动全局搜索替换旧 ID → 新 ID(见 5.5) |
| 脏工作区 Refile | 拒绝操作,TUI 提供快捷 Commit/Stash 选项(见 5.5) |
| Refile 中途失败 | 前置检查确保工作区干净后,失败可安全回滚(见 5.5) |
| 短 ID 歧义 | CLI 报错列出候选项,TUI 弹窗二选一(见 3.2) |
| 并发编辑 | watchdog 实时监听 + Hash 检测(见 7.6) |
| watchdog 自激 | Git 操作期间暂停监听(SuspensionContext),避免误报(见 7.6) |
| 多端同步 | 启动 `pull --rebase`,退出 `push`,智能字段合并(见 7.4-7.5) |
| 索引损坏 |syn index rebuild重建 |
| 大文件 |.gitignore排除,`syn media` 上传到外部存储 |
| 耗时操作 | Textual @work 异步执行,底部显示进度(见 13.6) |
| 中文搜索噪音 | 停用词过滤 + 标点清理,减小索引体积(见 13.2) |
---
## 16. 范围外(初始版本)
**优先级低,预留设计的功能**:
- **§8 媒体管理**:初始版本仅支持外部链接,`syn media` 命令预留
- **§10 知识图谱**:初始版本不实现,预留syn graph接口
- **§11 邮件集成**:初始版本仅支持手动创建,API 集成预留
**明确排除的功能**:
- 完整 LLM GraphRAG(仅预留接口)
- 实时协作(多人同时编辑)
- Web/移动端
- 邮件 API 自动集成
- 自定义 FTS5 分词器(使用应用层分词替代)
---
## 附录 A:术语表 - | 协议 | 认证方式 | 说明 |
|------|----------|------|
| Gmail API | OAuth2 | 需要 Google Cloud 项目 |
| IMAP | SSL/TLS | 传统邮箱协议 |
| Microsoft Graph | OAuth2 | Outlook/Office365 |
**凭证配置(预留)**:# config.yaml email: provider: gmail # gmail | imap | microsoft gmail: client_id_env: GMAIL_CLIENT_ID client_secret_env: GMAIL_CLIENT_SECRET imap: server: imap.example.com port: 993 username_env: IMAP_USERNAME password_env: IMAP_PASSWORD
---
## 12. 配置
### 12.1 配置文件示例# ~/.config/synapse/config.yaml workspace: ~/synapse-data default_namespace: personal namespaces: - personal # 1 - work-project # 2 - study # 3 editor: windows: { default: notepad, options: [notepad, typora, code] } linux: { default: vim, options: [vim, typora] } macos: { default: vim, options: [vim, typora] } git: auto_commit: true commit_style: conventional # conventional | simple | llm llm: enabled: false provider: litellm model: gpt-4o-mini api_base: https://api.openai.com/v1 api_key_env: OPENAI_API_KEY remotes: - name: origin url: [email protected]:user/synapse-data.git auto_push: true johnny_decimal: areas: 00: "Inbox" 10: "个人管理" 20: "工作项目" 30: "学习成长" review: daily_time: "08:00" weekly_day: friday weekly_time: "18:00"
---
## 13. 性能与索引机制
### 13.1 性能目标
| 操作 | 目标 | 实现方式 |
|------|------|----------|
| 列表 10,000 资源 | < 500ms | SQLite 索引 |
| 全文搜索 | < 1s | Ripgrep |
| 创建/更新 | < 300ms | 增量索引更新 |
### 13.2 SQLite Sidecar Index
**问题**:10,000 个 Markdown 文件逐个解析 Frontmatter,IO 开销巨大。
**方案**:`.synapse/index.db` 缓存所有元数据。-- 主索引表 CREATE TABLE resources ( id TEXT PRIMARY KEY, -- "10.001.0015" namespace TEXT, area TEXT, -- "10" category TEXT, -- "001" type TEXT, title TEXT, status TEXT, priority TEXT, due DATE, created DATETIME, modified DATETIME, tags TEXT, -- JSON array content_hash TEXT, -- 用于变更检测 file_path TEXT ); -- 全文搜索 (FTS5) - 存储预分词后的内容 CREATE VIRTUAL TABLE resources_fts USING fts5( id, title_tokens, tags_tokens, content_tokens, tokenize = 'simple' -- 使用默认分词器,输入已分词字符串 );
**中文搜索:应用层分词方案**(推荐)
SQLite 原生不支持加载 Python jieba 作为分词器。最佳实践是**应用层分词**:import jieba import re # 停用词表(标点、空格、无意义字符) STOPWORDS = set(['的', '了', '是', '在', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有']) class SearchEngine: def _tokenize(self, text: str) -> str: """分词 + 停用词过滤 + 标点清理""" # 1. 移除标点符号和特殊字符 text = re.sub(r'[^\w\s\u4e00-\u9fff]', ' ', text) # 2. jieba 分词 tokens = jieba.cut_for_search(text) # 3. 停用词过滤 + 去除空白 filtered = [t.strip() for t in tokens if t.strip() and t not in STOPWORDS] return " ".join(filtered) def update_index(self, id: str, title: str, content: str): """写入索引前,用 jieba 预处理 + 停用词过滤""" title_tokens = self._tokenize(title) content_tokens = self._tokenize(content) cursor.execute(""" INSERT INTO resources_fts (id, title_tokens, content_tokens) VALUES (?, ?, ?) """, (id, title_tokens, content_tokens)) def search(self, query: str): """搜索时,同样分词处理""" query_tokens = " AND ".join(self._tokenize(query).split()) cursor.execute(""" SELECT id FROM resources_fts WHERE content_tokens MATCH ? """, (query_tokens,))
**停用词过滤的好处**:
- 减小index.db体积(去除 30%+ 无意义词)
- 提高搜索精度(避免"的"、"了"等高频词干扰)
- 加快搜索速度
**工作流程**:
- **写入**:"完成了需求设计!" → 清理标点 → jieba → 过滤停用词 → "完成 需求 设计" → 存入 FTS
- **搜索**:用户搜 "需求" → 同样处理 → "需求" → MATCH 成功
### 13.3 索引更新策略
| 触发时机 | 动作 |
|----------|------|
|syn启动 | 检测 Git 变更,增量更新索引 |
| CRUD 操作 | 实时更新索引 |
| Git hook |post-merge,post-checkout触发重建 |
| 手动 |syn index rebuild强制重建 |
### 13.4 查询路由 -
# config.yaml media: provider: s3 # s3 | github | local # 凭证配置 credentials: # 方式 1:环境变量(推荐) aws_access_key_env: AWS_ACCESS_KEY_ID aws_secret_key_env: AWS_SECRET_ACCESS_KEY # 方式 2:配置文件(不推荐,敏感信息) # aws_access_key: "AKIA..." # aws_secret_key: "..." s3: bucket: your-bucket region: us-east-1 prefix: synapse/ # 存储前缀 # 最终路径:s3://your-bucket/synapse/{resource_id}/{filename} github: repo: user/media branch: main token_env: GITHUB_TOKEN # GitHub Personal Access Token local: path: ~/synapse-media # 本地存储路径(.gitignore 隔离) base_url: file://~/synapse-media
### 8.5 TUI 集成(预留)
在编辑模式下:
-Ctrl+V`:检测剪贴板图片 → 自动调用 `syn media paste→ 插入链接
---
## 9. 自动化工作流
### 9.1 本地自动化(优先)
对于生成类任务,优先使用**本地 Hook**,无需等待网络:# 本地执行,立即生成并打开 syn review daily # → 生成今日回顾,直接打开编辑 syn review weekly # → 生成周报,直接打开编辑 syn review monthly # → 生成月报,直接打开编辑 syn standup # → 生成站会报告 # LLM 辅助生成(可选) syn review daily --llm # → 使用 LLM 生成摘要 syn review weekly --llm # → 使用 LLM 生成周报 syn review monthly --llm # → 使用 LLM 生成月报
#### 9.1.1 Review 资源类型与存储
Review 生成的资源是 note 类型,存储在配置的 review Area/Category 下:personal/ └── 90/ # Area 90: 回顾与复盘 ├── 001/ # Category 001: 每日回顾 │ ├── 90.001.0001-note-2024-01-15-daily-review.md │ └── 90.001.0002-note-2024-01-16-daily-review.md ├── 002/ # Category 002: 每周回顾 │ └── 90.002.0001-note-2024-W03-weekly-review.md ├── 003/ # Category 003: 每月回顾 │ └── 90.003.0001-note-2024-01-monthly-review.md └── 004/ # Category 004: 站会报告 └── 90.004.0001-note-2024-01-15-standup.md
**Frontmatter 示例**:--- jd_number: "90.001.0015" type: note namespace: personal title: "2024-01-15 每日回顾" tags: [review, daily] created: 2024-01-15T18:00:00Z modified: 2024-01-15T18:30:00Z review_type: daily # daily | weekly | monthly | standup review_period: "2024-01-15" llm_generated: false # 是否使用 LLM 生成 ---
**本地 Hook 配置**:# config.yaml hooks: review_daily: command: "python ~/.synapse/hooks/daily_review.py" auto_open: true # 生成后自动打开编辑器 review_weekly: command: "python ~/.synapse/hooks/weekly_review.py" auto_open: true review_monthly: command: "python ~/.synapse/hooks/monthly_review.py" auto_open: true standup: command: "python ~/.synapse/hooks/standup.py" auto_open: true review: area: "90" # Review 存储的 Area daily_category: "001" # syn review daily weekly_category: "002" # syn review weekly monthly_category: "003" # syn review monthly standup_category: "004" # syn standup llm: enabled: true prompt_template: "~/.synapse/prompts/review.md"
### 9.2 GitHub Actions 模板(远程)
用于**跨设备通知**和**长期归档**:
| 模板 | 触发 | 功能 |
|------|------|------|
| daily-standup | 工作日 9:00 | 昨日完成、今日计划、阻塞问题 |
| weekly-review | 周五 18:00 | 周报生成 |
| due-reminder | 每天 8:00 | 到期/逾期提醒 |
| inbox-reminder | 工作日 17:00 | Inbox 清理提醒 |
| monthly-retro | 每月 1 日 | 月度复盘归档 |
| graph-sync | push 触发 | 图谱同步 |
**设计理念**:
- **本地 Hook**:生成类(review, standup)→ 即时响应,无网络依赖
- **GitHub Actions**:通知类、归档类 → 跨设备、定时触发
---
## 10. 知识图谱(优先级低,预留设计)
> ⚠️ 本章节为预留设计,待后续迭代完善。初始版本不实现图谱功能。
### 10.1 预留接口syn graph # 启动图谱视图(TUI) syn graph export # 导出图谱数据 syn graph sync # 同步到 Nebula Graph(如配置)
### 10.2 数据模型(预留)
**节点类型**:Resource, Namespace, Tag, Person, TimePoint, Chunk
**边类型**:RELATED_TO, BELONGS_TO, CREATED_BY, ASSIGNED_TO, TAGGED_WITH, BLOCKED_BY 等
### 10.3 GraphRAG 集成(预留)
- 使用 Nebula Graph 存储知识图谱
- 支持 LLM 驱动的图谱查询和推理
- 自动发现资源间的隐含关系
---
## 11. 邮件集成(优先级低,预留设计)
> ⚠️ 本章节为预留设计,待后续迭代完善。初始版本仅支持手动创建邮件资源。
### 11.1 手动创建(初始版本支持)syn new email --subject "项目进度汇报"
- 支持剪贴板粘贴邮件内容
- 自动解析标题和正文
- 发件人/收件人需手动填写
### 11.2 API 集成(预留)