Files
dsh_ai1net_server/.workbuddy/memory/MEMORY.md
T
admin a5b3a76cd3 chore(工作区): 撤除 scripts/ —— 两脚本皆失效,改用绝对路径调文档库 07-scripts/
_lock.sh 为一次性临时脚本(会话名写死),docs-sync-check.sh 为文档库版的
陈旧重复(2024 B vs 4516 B)。两者移入 归档/工作区-scripts-撤除-20260924/
并附理由 README。约定:工作区不保留脚本副本,避免漂移。
2026-09-24 07:52:12 +08:00

15 KiB
Raw Blame History

DSH 平台 — 记忆(状态层)

判据:不看会不会「违规/事故」?会 ⇒ 写实体;只"更慢更绕" ⇒ 给指针。落点:规则 → CODEBUDDY.md(⛔不重复)|状态 → 本文件|方法论 → 技能|一次性事 → PLAYBOOK/当日日志。 📄 报障先读 PLAYBOOK-实例与插件坑.md(§21 浏览器侧验收假阴性|§23 真机取证三坑)⚠️ 注入上限 ≈7,800 字符 ⇒ 只减不增(09-23 19:0x 已瘦身:8191 → 7,713)

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

项 状态
在途单 覆盖网络线 序①–㊿ 收官;序46 在途(步7 受阻:缺 client-artifact-missing)。🔴 序47 在途(档案 145;步1–7 已落并真跑,⛔ 步8–9 未做=卡桌面线拨号载体+门户 UI)。🔵 IM 线(档案 142)A–E 五单全部落地;🔴 三项拍板(09-23,见选型单 §十四):E2EE=强度档(≈55 µs/条 OK;⚠️ 三代价=棘轮须持久化/群聊须 Megolm 化(误用严格双棘轮⇒O(N²))/agent 代答须重做)· 上限预算 2000/10/30 s 固化(⚠️ 前提=单进程自研扇出)· 连接层=B 引 Centrifugo(⚠️ 须补发自建心跳)。下一棒=第 12 棒动工 B 案(automation 89e11630…;接缝=createImWsRuntime;范围见入口 §2)。✅ automation 库 09-23 18:55 已自愈(app 重建) ⇒ 记录全丢,各线接续棒须重登。🔴 资源口径(09-22):机器可换 ⇒ ⛔ 别用单机规模限制规划。 唯一红 = D8 云安全组未实施(放行对端 /32 × UDP 21100/21115;⛔ 零个 0.0.0.0/0)。🔴 持久禁令:⛔ 调 RELAY_FAILOVER_DEADLINE_MS、⛔ 动 HB_SEC/burst、⛔ COOLDOWN_MS=0。
并发锁(09-22 域锁落地) 🔴 域锁取代全局独占:域不重叠即真并行;无 --domains ⇒ 退化独占。🔴 域键算法 shell/hook 必须逐字一致(_ANCHOR_SEGS⇄_DOMAIN_SEGS,先长后短)否则静默失效。开工第 0 步 = bash scripts/preflight-lock.sh "<会话名>" <文件...>(【D】未归类 或【E】机制层非空 ⇒ rc=1 拒开工)。🔴 机制层须独占(config/crypto/isolation/index/scripts/CODEBUDDY.md/锁本身)。⚠️ 非 ASCII 会话名的锁目录必带 cksum 后缀|⚠️ trap 单槽位|⚠️ 验收 hook 必带 DSH_SESSION_NAME(否则空名走"只看 id"分支 ⇒ 假绿放行)。
生产形态 / 路径 / 环境 47 的 PG 是本机进程(127.0.0.1:15432)非容器 ⇒ 「docker exec dshs-pg psql」全失败;su postgres 无 socket、需 TCP+口令(⛔ 不取凭据)。47 = Manager(dshs;PG13 15432)+ Worker w-47(19100);106 = w-106(19000)。🔴 drop-in 才是唯一载体(同名键写 /etc/dshs.env = 静默压掉)|回滚 = 删 cluster.conf → daemon-reload → restart dshs。106:users/ 权限必须 711(700 ⇒ 实例必崩)。nginx 归宝塔 ⇒ is-active nginx=inactive 属正常|npm test 用 Node 22|bt-server 别名已修 22 端口。
🔴 会话分组 / cwd(09-23 二修·判据冻结) 真源 = workspaces.path(宿主自登记·全小写;sessions.cwd 已被污染 ⛔ 不作依据)⇒ cwds 逐字复制该值;新会话 cwd 逐字继承 cwds ⇒ 错一字面即裂组(现 e:160/E:5/d:11)。🔴 裂出的组会自我强化(手动新会话继承所在组字面)⇒ 只改 automation 不够,须清已裂组。📂 技能 §0.6。
配置外置线(140) 单一秘密副本 = config/platform.env(不入库·600);优先级 = 系统 env > 文件 > 代码默认。🔴 drop-in 必留 DSH_PLATFORM_DIR=/opt/dsh(删 ⇒ 目录静默搬家)|改后必须重生成服务器 platform.env|涉密复扫须 0。
覆盖网络线 入口 = 工作区根 接续入口_覆盖网络线_20260916.md(§0 最新行+§2 首行 = 唯一依据);⛔ 勿重做已完成棒。🔴 判据五条+坑清单 全在该入口+参数表_覆盖网络_20260917.md(指纹以 §10 现算为准)—— ⛔ 别凭记忆做。已落:relay 两台(只绑回环 20080)+切流/寻址/组密钥/jitter+打洞(D8 待验);sshd 反向隧道已下线。🔴 域名唯一 = ai1net.com;relay 候选 3 条(⛔ 别加伪多样性)|改候选链须「删 directory.json+二次重启控制面」才生效。
🔴 形态元假设(09-21 立 · 最易犯) ⛔ 默认「一个控制面」=错(用户两次纠正)⇒ 正确 = 控制面联邦(各区 Manager 各带 Worker/节点/设备)。全文 ⇒ 定稿 架构设计/覆盖网络-顶层架构全貌.md(唯一权威) ⇒ ⛔ 别凭本行做设计。🔴 必背三句(① 两张图分离=分水岭在根是否处于数据路径 ② 跟用户走/全局唯一/区域内唯一 三分 ③ 根密钥只管授权撤回签名者)。🔴 多根=any-of-N(任一沦陷=全网沦陷;Manager 可升格 ⇒ N 台=N 根)。🔴 G1=一切前置+ G6 撤根无机制 ⇒ 两者一起解、先于 F2。🔴 未自决:105 §3.2 骨干资格签发权|跨区可见性默认(倾向互不可见)。
📁 文档分层(09-21 立 · 找文件先看这条) 🔴 过程 ≠ 成品:04-调整方案/=过程|架构设计/=定稿。冲突 ⇒ 以 架构设计/ 为准。⚠️ 过程档案过时结论**⛔ 不改正文**,只加头部状态块指向定稿。机制 ⇒ 技能 dsh-architecture-lifecycle。
插件数据落点(硬标准) 🔴 一插件一库 dshs_pl_<pluginId> ⇒ ⛔ 不得拿实例本地 SQLite/文件当权威(只可缓存);内归属列 user_id/room_id 强制。⛔ homedir() 必错(实例 HOME=ws)。🔴 判版本只看 node_modules/<pkg>/package.json;源权威副本 = dsh-plugin-mcn/lib/。🔴 47 代码根 = /opt/dshs、106 = /opt/dshs-cluster(106 无 /opt/dshs)|/opt/dsh = 平台数据根,三台同名|取 DSHS_DB_URL 只从 drop-in cluster.conf grep(source /etc/dshs.env 拿到错的 5432)。⚠️ 真机取证清理必须写进 catch。🔴 装配协议 = link:(09-23 拍板,推翻 file:)⇒ 待落地 4 处(含重编译部署 47/106);判据 = 软链、占用 ≈ 4.0 K;⚠️ 软链目标须两机同路径。📂 全文 ⇒ 2026-09-23.md。
其他线 / 基线 / 品牌 其他线 ⇒ BRIEF.md。🔴 D4(09-18)跨云=目标形态,⛔ 作废「须同云」。🔑 基线/档案号 ⛔ 不写死 ⇒ 现查 state.py+INDEX.md;分叉走 git ls-remote 裸 sha + merge-base --is-ancestor。🔴 品牌 = 「能力网络」/CapabilityNet|favicon ⇒ PLAYBOOK-品牌与标识资产.md。🔴 共享模型 = 管理员逐用户授权(users.shared_model_granted v11 默认 0)|🔴 用户卷在 worker 上时,写 home 必须走 UserFs(直写 fs = 静默空操作)⇒ ⛔ 不得 cp/mv/直写 fs 动 home。🔴 数据库 ⇒ 数据库/DB-00…03。

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

  • 🔴🔴 活库改动铁律(09-23 血教训 · 已有结局) —— workbuddy.db = WAL 三件套(.db+-wal+-shm,app 运行中持有)。⛔ 禁文件级 cp/mv(只换一部分 ⇒ salt 世代错位 ⇒ file is not a database)。⇒ ① ⛔ 仅文件级操作须停 app(SQL 变更可在线·22:0x 实证)② 备份用官方 backup() API(不碰三件套)③ 改数据只走 SQL + busy_timeout ④ 改完跑 integrity_check。⚠️ 判据两条都须过:① change counter(off24)=version-valid-for(off92) ② 头部 16B=SQLite format 3。🔴 ?immutable=1 读不出 ≠ 仅 WAL 错位(实测=主库头部级损坏:建报 database disk image is malformed/查报 file is not a database)。🔴 判活动库/配置目录看 CODEBUDDY_CONFIG_DIR(实测 E:\ProgramData\.workbuddy);~/.workbuddy/workbuddy.db(09-12)=旧库,⛔ 不当备份。🔴 09-23 救治结论:头部坏 + WAL 无 page_no=1 帧 + 零 db 备份 ⇒ 只剩「重建空库」;⚠️ 需停 app ⇒ 影响面超本平台 ⇒ 红线门禁,⛔ 不擅自修。18:55 app 自愈实测:新库 magic 正常、旧库改名 *.corrupt-* 留档 ⇒ 代价=数据全丢(automation 记录清空)。
  • 🔴 R10 实例起不来先查属主/EACCES,别先怀疑 OOM —— root 跑 dsh --profile ⇒ 属主变 root ⇒ 崩溃循环/404。修 find <home> -user root -exec chown <uid>:<uid> {} + → 重启。⚠️ 平台侧备份一律 /opt/dsh/backups/。报 503/「一直重启」另查 endpoints[].streams 恒 = 64 ⇒ 代理连接泄漏占满中继额度(146;已修 proxy.ts);清空 = restart dshs。
  • 🔴 改 bwrap 参数前先看目标机 bubblewrap 版本(47=0.4.0/106=0.11.0):--perms 属 0.5+ ⇒ 47 上 Unknown option ⇒ 沙箱起不来 = 所有实例全挂;要权限用 --tmpfs。⚠️ smoke-isolation 不能作 account 模式验收。
  • 🔴 集群化数据分层判据:① 归属/租约 ⇒ 只有 Manager 能写(双写 = 脑裂)② 跟用户走 ⇒ 实例 home ③ 本机运维 ⇒ Worker 本地库。
  • 🔴 hook 脚本必须走 sys.stdout.buffer.write(bytes)(否则文案含 ⛔ ⇒ UnicodeEncodeError ⇒ stdout 空 ⇒ 静默放行);判据 = 写日志 + emit 双动作。
  • 🔴 四条取数坑(全文 ⇒ PB):① 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 把"上游失败"伪装成"无命中"。
  • ⚠️ --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 启动器)。⚠️ bash 报 dirname: command not found(或 ls/grep 成片 not found、rc=127)⇒ ✅ export PATH=<PortableGit 1.2.0 的 usr/bin:bin>:$PATH 一次即恢复(09-22 复测,PB §22.6);🔴 工具调用间不共享 shell 状态 ⇒ 每条 bash 命令都要前置。⚠️ 只有 export 也救不回才改走 PowerShell + 托管 python —— 该情形至今未复现,⛔ 别一遇 127 就跳。🔴 MSYS 路径(/e/…)⛔ 不许交给 Windows 原生程序(python.exe/Chromium/node)—— 按「当前盘根+相对」解释 ⇒ 落到 E:\e\…(09-22 实测长出 29 MB 影子目录,仍在增长)⇒ 一律传 E:/…;hook 已 _norm_path() 兜底。
  • ⚠️ 四条小规矩:行尾只信字节级(b.count(b'\r'))|含反引号一律 Write/Edit|引用用户口径只写原话|python -c 先落 .py|⛔ 进程替换 diff <(a) <(b) 不可用。

三、成本与自动化(详版 ⇒ 技能 dsh-auto-handoff-chain)

  • 🔴 成本 ≈ 单价 × 一轮工具调用次数 ⇒ 杠杆 = 压一轮次数:大输出先落盘只读关键行|限流(head -30)|批量活写脚本只 print 摘要。⚠️ 无人值守 prompt 必写「本轮只做一件事,做完即停」。
  • 🔴 自动化 / 接续 / 归属四律(排接续棒前必读 ⇒ 全文见技能):自动化 = 开新会话的唯一通道(钩子无此能力)|① 开机第 0 步=跑 state.py ② prompt ⛔ 不抄任务细节 ③ 并行口令必带线名、抢不到锁只报告 ④ 🔴 下一棒 id 只来自工具返回值|🔴 排期两铁律(用户原话「首个接续任务 5-8分钟」+「一个会话结束时再排下一个」)= 间隔=收口 + 5~8 分钟、每条线只挂一个(域不重叠可各挂一棒)|归属四律 = 入口只一份(本工作区,头部写工作区)· cwds=本工作区 · 参考规则用技能 · 🔴 cwds 只写「与手动开会话的 cwd 逐字同形」(判据 = 实测 sessions.cwd;当前正解 = E:/ProgramData/AIProject/aliyun-dsh-server 正斜杠 —— 宿主 DesktopWorkspaceRepo.list() 去重键 = path.trim().toLowerCase(),只小写、不统一斜杠 ⇒ 斜杠不同即裂同名分组;目录改名后须同步 cwds + 历史 sessions.cwd)。✅ 存量已清零(09-23):aliyun 根 StoryForge 入口副本已删(备份 归档/…removed-20260923;权威版 dsh-plugin-forge)。🔴 判据:入口文件头部声明的「工作区」决定它属于谁,与放在哪无关 ⇒ 外来副本会让 state.py 把别线当自家线。

四、仓库 / 推送 / 授权 → 📂 全文 ⇒ .workbuddy/memory/MEMORY-仓库推送与授权.md(双推/文档库并入/行尾/技能三处/抢锁 R9/授权)

文档库结构与命名规则(2026-09-24 固化)

⛔ 动 dsh-server-docs 前先读库内 CODEBUDDY.md 的「文档库结构与命名规则」章。 要点:序号一律阿拉伯数字两位;04-调整方案/ 号不动;05-交接单/ 是锁根、07-scripts/ 绑宿主 hook;动文档库先抢锁,与工具无关;整理类任务必须有顶层可见变化。

工作区 git(2026-09-24 立)

  • 工作区 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/、待清理/、运行态日志与缓存(.workbuddy/*.log、cache/、backups/)、*.db* 与 归档/db-cwd归一-备份-20260923/、*.tar.gz|*.tgz、.workbuddy/memory/.backup-*/。
  • ⛔ 工作区不保留脚本副本:scripts/ 已撤(两个脚本皆失效)⇒ 一律绝对路径调文档库 07-scripts/<name>,避免副本漂移。
  • 2026-09-24 回收 411 MB(470 M → 58.8 M,经回收站可恢复)。