Replies: 1 comment
|
这个功能请求正好命中我们在 Windows 上实测到的痛点,补一手上机数据(不是推测:三点采样 + 对照组)。
现象(我们实测到的)
影响(真实事故,可复现)
★ 本机受控实测(三点采样 + 对照组)做法:在 Web 界面里打开/创建一条会话(放在沙箱工作区,不动生产会话),然后用一个只读探针去「试着拿」这条会话的写租约 —— 拿得到 = 无人持有(FREE);拿不到并报
复现步骤(我们手上的)
建议(按「最小改动 → 最完整」排)
附:为什么这对「自动化会话」更要命我们这套用法里,会话就是「住户」:住户之间通过文件邮局互相投递,投递的前提是对方会话能被唤醒。租约一被攥住 ⇒ 该住户永久叫不醒 ⇒ 整条协作链断掉,而且断得没有声音(对用户是通用错误、对同伴是「没回信」)。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
背景
~/.dsh/sessions全局共享,多个 profile 可同时打开不同窗口。agentLoop.resume会通过persistence.open(id, 'write')取得该会话的内核级单写者写租约(packages/session/session-persistence-jsonl/src/lease.ts:Windows 为路径派生的命名内核信号量,不落锁文件;POSIX 为session.lock上的非阻塞 flock),并随会话 live 期持续持有;争用方得到SessionAlreadyOwnedError("session ... is already owned by an active write handle")。痛点(实际场景复现)
需求
session/disposed→ 持久化层最终排空并关闭写句柄 → 租约内核级释放)。语义明确 ≠ 归档/删除,仅 detach(归档是另一套机制且是物理删除——务必区分入口)。resume因SessionAlreadyOwnedError失败时,GUI 给出可操作文案——该会话正被哪个窗口/profile(及进程 pid)持有。实现上可在租约 acquire 时由持有方写入持有者标识 sidecar(或宿主间广播),错误路径读取展示;并给出引导(前往持有侧关闭 / 经确认后强制接管——若提供须明示日志撕裂风险)。依据与关联
packages/session/session-persistence-jsonl/src/lease.ts(模块注释明确 "held for the whole life of a write handle" / "deliberately no expiry")All reactions