PocketPilot 源码解读 · 03 | 护栏才是护城河:WorkspaceGuard、capability 与审批恢复
PocketPilot 不按工具名写白名单:路径先过 WorkspaceGuard,再按 capability 后缀分成 ALLOW / REQUIRE_APPROVAL / DENY。写操作在磁盘变更前用异常打断;批准恢复时重建 Guard,下一次 write 还要再批。配策略决策图。
PocketPilot 不按工具名写白名单:路径先过 WorkspaceGuard,再按 capability 后缀分成 ALLOW / REQUIRE_APPROVAL / DENY。写操作在磁盘变更前用异常打断;批准恢复时重建 Guard,下一次 write 还要再批。配策略决策图。
记忆、技能、MCP、cron、webhook 在 PocketPilot 里都不是特权子系统:它们经同一张工具表注册,过同一道策略门,最终仍是一条可审计 Task。评测用 ScriptedProvider 把路径逃逸和拒批锁成 26 个无 LLM 用例。配能力总线图。
墨坊是一份可读的 Java 小店:网关只暴露 8080,商品库、库存、店铺各用各的库。下单先 202 收下,库存经 RabbitMQ 后扣;余额不够再发消息把库存加回去。本文钉死产品论点和分层,配架构图。仓库 https://github.com/GitHub1002/ink-workshop。
下单接口先写 PENDING 和发件箱,返回 202。两份店铺用 SKIP LOCKED 抢同一行再投递 RabbitMQ。库存结果把订单推进 RESERVED 或 REJECTED;付款只接受 RESERVED,余额不够则 RELEASING。配状态机图。
库存进程不共享订单表。扣减是 update … where available >= quantity,同一把钥匙用 SHA-256 指纹挡住换行重放。付款失败走另一条释放队列,结果仍经库存自己的发件箱回到店铺。配扣减回补图。
对外只暴露 8080。网关用 lb://ink-workshop 轮转两份店铺,限流每秒 20 可从 Nacos 热更新,店铺连续失败后熔断返回 503。店面 Vite 只打网关。配边缘图。