Files
dsh_ai1net_server/.workbuddy/memory/MEMORY.md
T

13 KiB
Raw Blame History

DSH 平台 — 记忆(状态层)

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

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

项 状态
在途单 🔴 ⛔ 别凭本表做规划 —— 现查 state.py + 本线 接续入口_*.md §0 最新行。
🔴 三条线拍板 ① 承载两分(09-26):公共承载(服务别人)只有服务器能当;主权承载(只服务自己租户)桌面机 ✅。② IM 线(09-23):E2EE=强度档 · 连接层=B 引 Centrifugo(须补自建心跳)。③ D8(09-26 用户原话「先不开端口,后续有需要再开」) ⇒ 主动搁置、⛔ 不当待办;重开=要做跨节点内容分发时;替代(不需端口)=设备主动拉;⛔ 不影响群聊(全走 443)。📂 全文 ⇒ MEMORY-设计口径-20261001.md §1/选型单 §十四/交付物/端口决策…-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-05 起) 🔴 只有三类:主会话/任务会话/检查会话(唤醒·跟进·队列上报已整套退役;「接续会话」=形态、⛔ 非类别)。🔴 读数=sessions 表;判「都空闲」必排除自己;自动化只能开新会话。📂 细则 ⇒ 技能 session-mechanism(⚠️ 本行 2026-10-10 订正:原写「四类+开工建齐唤醒/协作/跟进」是作废口径)
🔴 接续阈值(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) ①载体=必夹「启动器」:任务动作必经 supervise-launch.py/board-launch.py(任务动作没有 env 字段,变量只能进程内设);缺它 ⇒ 读 0 字节空库、检查程序静默失效。②起法只许一条:改"起法"必搜 New-ScheduledTaskAction + .ps1(第二旁路走 powershell.exe ⇒ conhost ⇒ 闪黑窗)。③部署≠生效:deploy_code.py --ws <区> + 重启常驻;判据=心跳 started_h 晚于部署时间。🔴 判两套:协作看心跳 ∧ 检查看有没有 检查会话:… 分支。⇒ 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/backup() API/SQL+busy_timeout/integrity_check)。🔴 活动库看 CODEBUDDY_CONFIG_DIR(实测 E:\ProgramData\.workbuddy);~/.workbuddy/=旧库。🔴 09-23 已发生主库头部级损坏(零备份 ⇒ 数据全丢)⇒ 影响面超本平台 = 红线门禁,⛔ 不擅自修,先报用户。⇒ 全文
  • 🔴 实例/沙箱起不来,先查这三样(别先怀疑 OOM):① 属主/EACCES(root 跑 dsh --profile ⇒ 属主变 root ⇒ 崩溃循环/404)② bwrap 版本(47=0.4.0/106=0.11.0;--perms 属 0.5+ ⇒ 47 报 Unknown option ⇒ 全挂)③ endpoints[].streams 恒=64 ⇒ 503/「一直重启」。修法 ⇒ 全文。⚠️ 备份一律 /opt/dsh/backups/|⚠️ smoke-isolation 不能作 account 模式验收|⇒ 全文
  • 🔴 集群化数据分层判据:① 归属/租约 ⇒ 只有 Manager 能写(双写=脑裂)② 跟用户走 ⇒ 实例 home ③ 本机运维 ⇒ Worker 本地库。
  • 🔴 会话里起「常驻后台长跑任务」=禁区:真因=输出量把会话日志推过 ~10 MiB ⇒ 宿主丢日志 ⇒ 界面看着像卡。🔴 唯一可行起法=「会话后台任务 + stdout 全重定向到文件」。🔴🔴 硬耦合:该会话只要有 pending/running 后台任务,宿主 idle 钩子就被静默压制(实测被僵尸任务压 6h20m)⇒ 唤醒/监管被掐死。⛔ 也不在自动化会话里手动续聊。⇒ 全文
  • 🔴 监管+投递 = 常驻(10-01 用户再确认「协作与投递一直运行」)。🔴 投递唯一出口=协作程序(collabd.py);"自动任务当闹钟"已废弃;宿主钩子只作补充。🔴🔴 唤醒时钟=这个常驻进程本身(⛔ 非排期/自动任务);代偿形态下唤醒轮排期名须带 [协作](否则 resolve_main 认成主会话 ⇒ 投给自己)。⚠️ 钩子事件实时生效、⛔ 不重启宿主;锚点用 UserPromptSubmit(SessionEnd 从不被投递)。⇒ 全文
  • 🔴 作用域不许静默排除(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/静默放行(详 P0-10)。
  • 🔴 WorkBuddy 网关(09-29 实测·源码级):口令=process.env.CODEBUDDY_GATEWAY_PASSWORD(桥跑在 WorkBuddy 进程树内即自动可得);唯一实测可用的带法是 x-access-token: <明文>,?password= 在受保护路径上永远失效 ⇒ 🔑 401 ≠ 凭据不对,也可能只是带法不对:遇 401 先读鉴权代码再动手。🔴 本机并存多实例、共用同一口令 ⇒ 判据只能靠父链。
  • 🔴 取数四坑:pkill -f 认实际 argv ⇒ 用 ss -lntpH|fetch 静默丢 Host 头 ⇒ curl -H "Host: …"|本机与远端 md5sum 输出格式不同 ⇒ 先 cut -d' ' -f1|journalctl --since 不吃 date -Is ⇒ 用 --since @<epoch>。⚠️ |grep …||true 会把"上游失败"伪装成"无命中"。🔴 本机 curl 走 HTTP_PROXY ⇒ 访回环一律 --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 启动器)。⚠️ 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/ai1net-dsh-server:origin = [email protected]:admin/dsh_ai1net_server.git(2026-10-10 迁入;旧地址 [email protected]:maogeigei/dsh_shenxian_workspace.git 因主机密钥不符已弃用);身份 maogeigei/[email protected];core.autocrlf=false。
  • 平台源码另存两处:ssh.alotbuy.com:admin/dsh_shenxian.git + 本机 D:/github/dsh_shenxian。
  • 入库=文档与文件(CODEBUDDY.md/README.md/state.py/.gitignore、接续入口与包、docs/、交付物/、交接单/、归档/、.codebuddy/、.workbuddy/memory/);⛔ 不入库 tmp/、待清理/、日志与缓存、*.db*、*.tar.gz|*.tgz、.backup-*/。⛔ 工作区不留脚本副本 ⇒ 绝对路径调文档库 07-scripts/<name>。
  • 🔴 技能总仓:workbuddy_skills.git=10-09 起白名单收录(6 个技能 + 改包纪律.md,名单见 .gitignore;推前 git ls-tree -d 数一遍,⛔ 别"删库再提交")。⚠️ 历史 43b83b0 含明文令牌 .neodata_token(已 rm --cached,历史 blob 仍在 ⇒ 彻底清须 push --force+服务端吊销)。🔴 入库前扫凭据;核验远端与备份比差异。

文档库

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