Files
dsh_ai1net_server/.workbuddy/memory/MEMORY.md
T
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

15 KiB
Raw Blame History

DSH 平台 — 记忆(状态层)

判据:会「违规/事故」⇒ 写实体;只"更慢更绕" ⇒ 给指针。落点:规则→CODEBUDDY.md(⛔不重复)|状态→本文件|方法论→技能|一次性事→PLAYBOOK/日志。 📄 报障先读 PLAYBOOK-实例与插件坑.md(§21 浏览器侧验收假阴性|§23 真机取证三坑)。 ⚠️ 上限 7,650 字符(⛔ wc -c 量的是字节)⇒ 只减不增;细节 ⇒ MEMORY-全文-20261001.md(下文「⇒ 全文」指它)。

一、状态速查(会变的都在这)

项 状态
在途单 🔴 ⛔ 别凭本表做规划 —— 现查 state.py + 本线 接续入口_*.md §0 最新行。
🔴 承载两分(09-26) 一句判据:公共承载(服务别人)⛔ 只有服务器能当;主权承载(只服务自己租户)桌面机 ✅。📂 全文⇒ MEMORY-设计口径-20261001.md §1
🔴 IM 线拍板(09-23) E2EE=强度档 · 预算 2000/10/30 s 固化 · 连接层=B 引 Centrifugo(须补自建心跳)。📂 选型单 §十四
🔴 D8(09-26 用户拍板) 「先不开端口,后续有需要再开」⇒ 主动搁置、⛔ 不当待办;重开=要做跨节点内容分发时。🔴 替代(⛔ 不需端口)=设备主动拉。⚠️ ⛔ 不影响群聊(全走 443)。📂 交付物/端口决策…-20260926.md
并发锁 🔴 域锁:域不重叠即真并行;无 --domains ⇒ 退化独占。🔴 域键算法 shell/hook 必须逐字一致(_ANCHOR_SEGS ⇄ _DOMAIN_SEGS)否则静默失效。开工第 0 步 preflight-lock.sh "<会话名>" <文件...>(【D】未归类或【E】机制层非空 ⇒ rc=1 拒开工)。🔴 机制层须独占|🔴 释放必带会话名(不带 ⇒ fail-closed;rc=124 卡住 ⇒ 用 mv 等效释放)|⚠️ 非 ASCII 会话名锁目录带 cksum 后缀|⚠️ 验收 hook 必带 DSH_SESSION_NAME(否则假绿)。
生产形态 / 路径 47 的 PG=本机进程 127.0.0.1:15432(⛔ 非容器 ⇒ docker exec 全失败)。47=Manager(dshs)+Worker w-47(19100);106=w-106(19000)。🔴 drop-in 才是唯一载体(写 /etc/dshs.env = 静默压掉)|回滚=删 cluster.conf→daemon-reload→restart dshs。🔴 106:users/ 权限必须 711(700 ⇒ 实例必崩)|🔴 机器可换 ⇒ ⛔ 别用单机规模限制规划。
🔴 会话分组 / cwd 🔴 workspaces 表 ⛔ 非真源;用 sessions.cwd/automation cwds 正斜杠形态(E:/ProgramData/AIProject/<line>)。错一字面即裂组且自我强化📂 技能 dsh-workflow(多棒接力档 §0.6)
配置外置线 / 覆盖网络线 两句判据:🔴 drop-in 必留 DSH_PLATFORM_DIR=/opt/dsh(删 ⇒ 目录静默搬家)|🔴🔴 中继走 443 ⇒ 功能全可用、⛔ 不用开任何端口(UDP 21100-21115 只服务 P2P);单秘密副本=config/platform.env(不入库·600;系统 env > 文件 > 代码默认)。📂 全文 ⇒ 同文件 §6/§7 + 入口 接续入口_覆盖网络线_20260916.md(§0 最新行+§2 首行=唯一依据)
🔴 形态元假设(09-21·最易犯) 一句判据:⛔ 默认「一个控制面」=错 ⇒ 正确=控制面联邦。📂 全文 ⇒ 同文件 §2 + 定稿 02-架构设计/覆盖网络-顶层架构全貌.md(唯一权威)⇒ ⛔ 别凭本行做设计
📁 文档分层 🔴 过程 ≠ 成品:04-调整方案/=过程|架构设计/=定稿,冲突以定稿为准。⚠️ 过时结论⛔ 不改正文,只加头部状态块指向定稿。⇒ 技能 dsh-knowledge。
插件数据落点(硬标准) 一句判据:🔴 一插件一库 dshs_pl_<pluginId> ⇒ ⛔ 不得拿实例本地 SQLite/文件当权威(只可缓存)|取 DSHS_DB_URL 只从 drop-in cluster.conf grep。📂 全文 ⇒ 同文件 §3
其他线 / 基线 / 品牌 一句判据:🔴 D4(09-18)跨云=目标形态(⛔ 作废「须同云」)|🔴 用户卷在 worker 上时写 home 必须走 UserFs(直写 fs = 静默空操作)。📂 全文 ⇒ 同文件 §4
🔴 协作·会话类别(10-01) 🔴 四类:① 主会话(只管目标/方向)② 协作会话 ③ 唤醒会话 ④ 队列上报的跟进会话 ⇒ 同工作区、靠标题两级前缀区分。🔴 「接续会话」=形态、⛔ 非类别(撞阈值时产生、继承角色)。🔴🔴 开工第 0 步=建齐三类(唤醒/协作/跟进,每类别一条;少一类即断:没人推/没人干/没人收)。🔴 读数=sessions 表,⛔不读 automations;判「都空闲」必排除自己;自动化只能开新会话。📂 细则 ⇒ MEMORY-设计口径-20261001.md §8 + 技能 session-mechanism §2.3.0b~0e
🔴 接续阈值(10-01 改值) 一句判据:三条任一命中 ⇒ 开接续会话 —— 上下文 ≥ 220,000 tok|日志软 5 / 硬 8 MiB(🔴 已升主阈值,10-01 由钩子 session-log-guard.py 落地并验收)|工具调用软 200 / 硬 250(🔴 尚未接线,stop-dialog-guard.py 仍 80 次)。📂 实体 ⇒ CODEBUDDY.md §G
🔴🔴 常驻三件(10-05·P0-73/74) ①载体=必夹「启动器」:任务动作 ⛔ 不许直起 collabd.py/board.py,必经 supervise-launch.py/board-launch.py(任务动作没有 env 字段 ⇒ 变量只能进程内设)。缺它 ⇒ 读 0 字节空库 ⇒ 检查程序静默失效(零报错)。②起法只许一条:改"起法"必全文搜 New-ScheduledTaskAction + .ps1(第二条旁路走 powershell.exe ⇒ conhost ⇒ 闪黑窗)。⚠️ "改了主路径" ≠ "把旁路也改了"。③分发手动·部署≠生效:deploy_code.py --ws <区>(无 watcher)+重启常驻;判据=心跳 started_h 晚于部署时间。🔴 判两套程序:协作看心跳 ∧ 检查看「有没有 检查会话:… 分支」。⇒ pitfalls.md P0-73/74

二、本机铁律(⛔ 违反即事故)

  • 🔴🔴 手机接入类功能 ⛔ 不得影响 WorkBuddy 本身的运行(09-29 用户明令)⇒ 一句判据:单向依赖,fail-safe 方向=关掉自己(崩/被杀/超时 ⇒ 只许"功能不可用",⛔ 不许"WorkBuddy 异常")。⛔ 也不得对宿主在跑的会话做 load/接管、抢 writer_occupied、改其配置/进程,⛔ 无超时等待上游。📂 全文(七条条款+禁止清单+V7 验收)⇒ MEMORY-设计口径-20261001.md §5
  • 🔴🔴 活库改动铁律:workbuddy.db=WAL 三件套 ⇒ ⛔ 禁文件级 cp/mv(salt 世代错位 ⇒ file is not a database)。① 文件级操作须停 app(SQL 可在线)② 备份用 backup() API ③ 改数据走 SQL+busy_timeout ④ 改完 integrity_check。🔴 活动库看 CODEBUDDY_CONFIG_DIR(实测 E:\ProgramData\.workbuddy);~/.workbuddy/=旧库⛔ 不当备份。🔴 09-23 已发生主库头部级损坏(零备份 ⇒ 数据全丢)⇒ 影响面超本平台 = 红线门禁,⛔ 不擅自修,先报用户。⇒ 全文
  • 🔴 实例/沙箱起不来,先查这三样(别先怀疑 OOM):① 属主/EACCES(root 跑 dsh --profile ⇒ 属主变 root ⇒ 崩溃循环/404;修 find <home> -user root -exec chown <uid>:<uid> {} + → 重启)② bwrap 版本(47=0.4.0/106=0.11.0;--perms 属 0.5+ ⇒ 47 报 Unknown option ⇒ 全挂;要权限用 --tmpfs)③ endpoints[].streams 恒=64 ⇒ 报 503/「一直重启」(清空=restart dshs)。⚠️ 备份一律 /opt/dsh/backups/|⚠️ smoke-isolation 不能作 account 模式验收|⇒ 全文
  • 🔴 集群化数据分层判据:① 归属/租约 ⇒ 只有 Manager 能写(双写=脑裂)② 跟用户走 ⇒ 实例 home ③ 本机运维 ⇒ Worker 本地库。
  • 🔴 ⛔ 别在会话里起「常驻后台长跑任务」:真因=输出量把会话日志推过 ~10 MiB ⇒ 宿主 diagnostic-log:dropped ⇒ 界面不刷新、看着像卡。🔴 唯一可行起法=「会话后台任务 + stdout 全重定向到文件」(detached spawn 活不过工具调用边界)。🔴🔴 硬耦合:该会话只要有 pending/running 后台任务,宿主 idle 钩子就被「静默压制」(实测被僵尸任务压 6h20m、零日志)⇒ 一切「钩子驱动的唤醒/监管」被无声掐死。⛔ 也不在自动化会话里手动续聊。⇒ 全文
  • 🔴 监管+投递 = 常驻(一直运行) —— 09-29 定案 + 10-01 用户再确认(「协作与投递一直运行(常驻)」)。🔴 投递唯一出口=协作程序(collabd.py);⛔ "自动任务当闹钟"已废弃;宿主钩子只作补充。🔴🔴 唤醒时钟=这个常驻进程本身(⛔ 非排期/自动任务;⛔ 别让唤醒会话自挂后台任务=禁区);代偿形态下唤醒轮排期名须带 [协作](否则 resolve_main 认成"主会话"⇒投给自己)。⚠️ 钩子事件实时生效·⛔不重启宿主;SessionEnd 从不被投递 ⇒ 锚点用 UserPromptSubmit|⇒ 全文
  • 🔴 作用域⛔ 不许静默排除(09-28 用户点破):wb-result-hook.py 用显式白名单 LINE_WS + 本工作区标 scope=home(⛔ 不当被监管线)+ 被丢弃必写 skipped.jsonl + stderr。⚠️ 线名按相对 AIProject 第一段取,⛔ 别用 basename(cwd)。
  • 🔴 出口一律声明编码:hook 走 sys.stdout.buffer.write(bytes),被重定向的脚本(常驻/后台任务)走 reconfigure("utf-8","replace") —— 否则含 ⛔ ⇒ GBK ⇒ 整轮 fatal/静默放行(判据=写日志+emit;详 P0-10)。
  • 🔴 WorkBuddy 网关(09-29 实测·源码级):口令=process.env.CODEBUDDY_GATEWAY_PASSWORD(桥跑在 WorkBuddy 进程树内即自动可得);唯一实测可用的带法是 x-access-token: <明文>,?password= 在受保护路径上永远失效 ⇒ 🔑 401 ≠ 凭据不对,也可能只是带法不对:遇 401 先读鉴权代码再动手。🔴 本机并存多实例、共用同一口令 ⇒ 判据只能靠父链(取证走 tmp/wb-phone/asar-peek.mjs)。
  • 🔴 四条取数坑:① pkill -f 匹配实际 argv ⇒ 用 ss -lntpH 'sport = :PORT';② fetch 静默丢 Host 头 ⇒ 假 404/200 ⇒ curl -H "Host: …";③ 本机 md5sum 出 hash *path、远端 hash path ⇒ 先 cut -d' ' -f1;④ journalctl --since 不吃 date -Is ⇒ 用 --since @<epoch>;⚠️ |grep …||true 会把"上游失败"伪装成"无命中"。🔴 本机 curl 走 HTTP_PROXY(127.0.0.1:65230)⇒ 访回环一律加 --noproxy '*',否则 502。
  • ⚠️ --scene all 演练含 120 s+90 s 观察窗 ⇒ ⛔ 不许套 < ~8 min 外层超时(截断 ⇒ restore() 不跑 ⇒ 106 relay 停机)。
  • 🔴 ssh '…' 单引号里不能再有单引号 ⇒ ✅ cat > f <<"EOF"/ssh host 'bash -s' < 本地脚本。⚠️ systemctl is-active inactive 时退出码 3 ⇒ 读状态的远端命令一律 || true。
  • 🔴 「单机自用」≠「不需要互联」(用户原话)。🔴 覆盖网络按异构设计:中继 45%/55% 余量(⛔ 别用同构 15%)· 必须补 443/TCP 兜底 · VPN/代理检测即降级。
  • 🔴 技术讨论不谈法规(⛔ 不引条文当论据/不主动提合规/不前置上抛)⇒ 判据见 CODEBUDDY.md §1。🔴 接手前人结论先做最小取证 ⇒ ⛔ 别拿旧结论当既成事实。
  • ⚠️ 本机执行环境:⛔ 别给 PATH 前置 /c/Windows/System32(那里 bash=WSL 启动器)。⚠️ dirname/ls/grep 成片 not found、rc=127 ⇒ ✅ export PATH=<PortableGit usr/bin:bin>:$PATH 一次即恢复;🔴 工具调用间不共享 shell 状态 ⇒ 每条 bash 命令都要前置。🔴 MSYS 路径(/e/…)⛔ 别交给 Windows 原生程序(会落到 E:\e\…)⇒ 一律传 E:/…。
  • ⚠️ 四条小规矩:行尾只信字节级(b.count(b'\r'))|含反引号一律 Write/Edit|引用用户口径只写原话|python -c 先落 .py|⛔ 进程替换 diff <(a) <(b) 不可用。

三、成本与自动化(全文 ⇒ 技能 dsh-workflow)

  • 🔴 成本 ≈ 单价 × 一轮工具调用次数 ⇒ 杠杆=压一轮次数(大输出先落盘只读关键行|限流|只 print 摘要)。⚠️ 无人值守 prompt 必写「本轮只做一件事,做完即停」。
  • 🔴 自动化四律:自动化=开新会话唯一通道|开机第 0 步=跑 state.py|prompt ⛔ 不抄任务细节|下一棒 id 只来自工具返回值|排期=收口+3~4 分钟、每条线只挂一个|入口只一份|🔴 cwds 逐字同形(去重键=path.trim().toLowerCase())|🔴 入口头部声明的「工作区」决定归属。

四、仓库 / 推送 / 授权

  • 📂 全文 ⇒ .workbuddy/memory/MEMORY-仓库推送与授权.md(双推/文档库并入/行尾/技能三处/抢锁 R9/授权)。
  • 工作区 E:/ProgramData/AIProject/aliyun-dsh-server 已入 git:remote [email protected]:maogeigei/dsh_shenxian_workspace.git(master);身份仓库级 maogeigei/[email protected];core.autocrlf=false。
  • 入库=文档与文件(CODEBUDDY.md/README.md/state.py/.gitignore、接续入口与包、docs/、交付物/、交接单/、归档/、.codebuddy/、.workbuddy/memory/);⛔ 不入库 tmp/、待清理/、日志与缓存、*.db*、*.tar.gz|*.tgz、.backup-*/。⛔ 工作区不留脚本副本 ⇒ 绝对路径调文档库 07-scripts/<name>。
  • 🔴 技能总仓(10-05):workbuddy_skills.git=25 技能总仓(推前 git ls-tree -d 数一遍,⛔ 别"删库再提交")。⚠️ 自 43b83b0 含明文令牌 .neodata_token(已 rm --cached+补规则;历史 blob 仍在 ⇒ 彻底清须 push --force+服务端吊销)。🔴 入库前必扫凭据文件名+已知令牌串;核验远端必与备份比差异。

文档库

⇒ ⛔ 动 dsh-server-docs 前先读库内 CODEBUDDY.md 同名章(04-调整方案/ 号不动;05-交接单/ 是锁根、07-scripts/ 绑宿主 hook;先抢锁;整理类任务须有顶层可见变化)。